diff --git a/data/gamehub.gschema.xml.in b/data/gamehub.gschema.xml.in index 546d5068..c00bd37e 100644 --- a/data/gamehub.gschema.xml.in +++ b/data/gamehub.gschema.xml.in @@ -343,6 +343,14 @@ '@PREF_API_KEY_STEAMGRIDDB@' SteamGridDB API key + + 'false' + SteamGridDB humor filter setting + + + 'false' + SteamGridDB NSFW filter setting + diff --git a/src/data/providers/images/SteamGridDB.vala b/src/data/providers/images/SteamGridDB.vala index 17f0b671..b6f8bc7d 100644 --- a/src/data/providers/images/SteamGridDB.vala +++ b/src/data/providers/images/SteamGridDB.vala @@ -29,7 +29,7 @@ namespace GameHub.Data.Providers.Images private const string BASE_URL = DOMAIN + "/api/v2"; private const string API_KEY_PAGE = DOMAIN + "/profile/preferences"; - private ImagesProvider.ImageSize?[] SIZES = { null, ImageSize(460, 215), ImageSize(920, 430), ImageSize(600, 900), ImageSize(342, 482) }; + private ImagesProvider.ImageSize?[] SIZES = { null, ImageSize(460, 215), ImageSize(920, 430), ImageSize(600, 900), ImageSize(342, 482), ImageSize(660, 930), ImageSize(512, 512), ImageSize(1024, 1024) }; public override string id { get { return "steamgriddb"; } } public override string name { get { return "SteamGridDB"; } } @@ -162,6 +162,42 @@ namespace GameHub.Data.Providers.Images grid.attach(label, 0, 0); grid.attach(entry_wrapper, 1, 0); + var label_filter_humor = new Gtk.Label(_("Humoristic images")); + label_filter_humor.halign = Gtk.Align.START; + label_filter_humor.valign = Gtk.Align.CENTER; + label_filter_humor.hexpand = true; + + var combo_filter_humor = new Gtk.ComboBoxText(); + combo_filter_humor.halign = Gtk.Align.END; + combo_filter_humor.valign = Gtk.Align.CENTER; + combo_filter_humor.hexpand = false; + combo_filter_humor.append("true", C_("imagesource_steamgriddb_image_filter", "Only")); + combo_filter_humor.append("false", C_("imagesource_steamgriddb_image_filter", "None")); + combo_filter_humor.append("any", C_("imagesource_steamgriddb_image_filter", "Doesn't matter")); + combo_filter_humor.set_active_id(settings.filter_humor); + combo_filter_humor.changed.connect(() => { settings.filter_humor = combo_filter_humor.get_active_id(); }); + + grid.attach(label_filter_humor, 0, 1); + grid.attach(combo_filter_humor, 1, 1); + + var label_filter_nsfw = new Gtk.Label(_("NSFW images")); + label_filter_nsfw.halign = Gtk.Align.START; + label_filter_nsfw.valign = Gtk.Align.CENTER; + label_filter_nsfw.hexpand = true; + + var combo_filter_nsfw = new Gtk.ComboBoxText(); + combo_filter_nsfw.halign = Gtk.Align.END; + combo_filter_nsfw.valign = Gtk.Align.CENTER; + combo_filter_nsfw.hexpand = false; + combo_filter_nsfw.append("true", C_("imagesource_steamgriddb_image_filter", "Only")); + combo_filter_nsfw.append("false", C_("imagesource_steamgriddb_image_filter", "None")); + combo_filter_nsfw.append("any", C_("imagesource_steamgriddb_image_filter", "Doesn't matter")); + combo_filter_nsfw.set_active_id(settings.filter_nsfw); + combo_filter_nsfw.changed.connect(() => { settings.filter_nsfw = combo_filter_nsfw.get_active_id(); }); + + grid.attach(label_filter_nsfw, 0, 2); + grid.attach(combo_filter_nsfw, 1, 2); + return grid; } } @@ -170,6 +206,9 @@ namespace GameHub.Data.Providers.Images { private SGDBGame game; private string dimensions; + private string filter_humor; + private string filter_nsfw; + private string types = "&types=static"; // GameHub can't display apng anyway. private ArrayList? images = null; public Result(SteamGridDB source, SGDBGame game, ImagesProvider.ImageSize? size) @@ -181,14 +220,16 @@ namespace GameHub.Data.Providers.Images title = "%s: %d × %d".printf(source.name, image_size.width, image_size.height); subtitle = game.name; url = "%s/game/%s".printf(SteamGridDB.DOMAIN, game.id); - dimensions = size != null ? "?dimensions=%dx%d".printf(size.width, size.height) : ""; + dimensions = size != null ? "&dimensions=%dx%d".printf(size.width, size.height) : ""; + filter_humor = "?humor=%s".printf(Settings.Providers.Images.SteamGridDB.instance.filter_humor); + filter_nsfw = "&nsfw=%s".printf(Settings.Providers.Images.SteamGridDB.instance.filter_nsfw); } public override async ArrayList? load_images() { if(images != null) return images; - var endpoint = "/grids/game/%s%s".printf(game.id, dimensions); + var endpoint = "/grids/game/%s%s%s%s%s".printf(game.id, filter_humor, filter_nsfw, types, dimensions); var root = yield Parser.parse_remote_json_file_async(SteamGridDB.BASE_URL + endpoint, "GET", Settings.Providers.Images.SteamGridDB.instance.api_key); if(root == null || root.get_node_type() != Json.NodeType.OBJECT) return images; diff --git a/src/settings/Providers.vala b/src/settings/Providers.vala index 2a67d310..75cbf6b9 100644 --- a/src/settings/Providers.vala +++ b/src/settings/Providers.vala @@ -26,6 +26,8 @@ namespace GameHub.Settings.Providers { public bool enabled { get; set; } public string api_key { get; set; } + public string filter_humor { get; set; } + public string filter_nsfw { get; set; } public SteamGridDB() {