Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions wallpapers-bing/wallpapers_bing.vala
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ using GLib;
using Gtk;
using Gee;
using Singularity;
using Singularity.Widgets;
using Peas;

[ModuleInit]
Expand Down Expand Up @@ -33,6 +34,15 @@ namespace WallpapersBing {
public bool requires_credentials { get { return false; } }
public bool supports_search { get { return false; } }
public Provider() { base("/usr/local/bin/ncz-wallpaper-bing"); }
public async string market_list(Cancellable? cancel) throws Error {
return yield command({helper, "markets"}, cancel, 30);
}
public async string preferred_market(Cancellable? cancel) throws Error {
return (yield command({helper, "market"}, cancel, 30)).strip();
}
public async void set_preferred_market(string market, Cancellable? cancel) throws Error {
yield command({helper, "market", market}, cancel, 30);
}
public async ArrayList<WallpaperProviderChoice> choices(string index, Cancellable? cancel) throws Error {
var loaded = WallpaperBing.markets(yield command({helper, "markets"}, cancel, 30));
// The helper is expected to always advertise the combined view
Expand Down Expand Up @@ -64,6 +74,7 @@ namespace WallpapersBing {
public class WallpapersBingPlugin : Object, Singularity.Plugin {
private PluginContext context;
private WallpapersBing.Provider? provider;
private const string BING_MARKETS_ID_ALL = "all";

public void activate(PluginContext ctx) {
this.context = ctx;
Expand All @@ -84,6 +95,47 @@ public class WallpapersBingPlugin : Object, Singularity.Plugin {
lbl.wrap = true;
lbl.xalign = 0;
box.append(lbl);
load_bing_markets.begin(box);
return box;
}

private async void load_bing_markets(Box box) {
if (provider == null) return;
var bing_markets_options = new Gee.ArrayList<Singularity.Core.AppSettingOption>();
bing_markets_options.add(new Singularity.Core.AppSettingOption() { id = BING_MARKETS_ID_ALL, label = _("All Markets, No Preference") });
string bing_markets_current = BING_MARKETS_ID_ALL;
try {
foreach (string line in (yield provider.market_list(null)).split("\n")) {
string[] columns = line.split("\t");
if (columns.length < 2 || columns[0].strip() == "") continue;
bing_markets_options.add(new Singularity.Core.AppSettingOption() {
id = columns[0].strip(), label = columns[1].strip() });
}
string configured = yield provider.preferred_market(null);
if (configured.ascii_down() != BING_MARKETS_ID_ALL) {
foreach (var option in bing_markets_options) {
if (option.id == configured) bing_markets_current = configured;
}
}
} catch (Error e) {
warning("wallpapers-bing: could not load market settings: %s", e.message);
return;
}
var bing_markets_row = new SelectionRow.with_options(_("Bing Preferred Region"), bing_markets_options,
bing_markets_current);
bing_markets_row.subtitle = _("Bing always combines every region's photo of the day; this only picks whose caption and credit win when the same photo is shared");
bing_markets_row.selected.connect((id) => {
persist_bing_market.begin(id);
});
box.append(bing_markets_row);
}

private async void persist_bing_market(string market) {
if (provider == null) return;
try {
yield provider.set_preferred_market(market, null);
} catch (Error e) {
warning("wallpapers-bing: could not save preferred market: %s", e.message);
}
}
}
Loading