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()
{