From 8dac6795ee0d48b6f3c83ae1032b32a897d94ac8 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 24 Mar 2024 11:26:05 +0700 Subject: [PATCH] sidebar: booru: option to disable nsfw by default --- .../modules/.configuration/user_options.js | 1 + .config/ags/modules/sideleft/apis/booru.js | 29 +++++++++++++++++++ .config/ags/services/booru.js | 8 +++-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/.config/ags/modules/.configuration/user_options.js b/.config/ags/modules/.configuration/user_options.js index 0f3e1b5c7..cf19b33f1 100644 --- a/.config/ags/modules/.configuration/user_options.js +++ b/.config/ags/modules/.configuration/user_options.js @@ -39,6 +39,7 @@ let configOptions = { 'sidebar': { 'imageColumns': 2, 'imageBooruCount': 20, + 'imageAllowNsfw': false, }, 'search': { 'engineBaseUrl': "https://www.google.com/search?q=", diff --git a/.config/ags/modules/sideleft/apis/booru.js b/.config/ags/modules/sideleft/apis/booru.js index ec404978a..9a8184ddf 100644 --- a/.config/ags/modules/sideleft/apis/booru.js +++ b/.config/ags/modules/sideleft/apis/booru.js @@ -12,6 +12,7 @@ import { MarginRevealer } from '../../.widgethacks/advancedrevealers.js'; import { setupCursorHover, setupCursorHoverInfo } from '../../.widgetutils/cursorhover.js'; import BooruService from '../../../services/booru.js'; import { chatEntry } from '../apiwidgets.js'; +import { ConfigToggle } from '../../.commonwidgets/configwidgets.js'; const Grid = Widget.subclass(Gtk.Grid, "AgsGrid"); async function getImageViewerApp(preferredApp) { @@ -85,6 +86,33 @@ const BooruInfo = () => { }); } +export const BooruSettings = () => MarginRevealer({ + transition: 'slide_down', + revealChild: true, + child: Box({ + vertical: true, + className: 'sidebar-chat-settings', + children: [ + Box({ + vertical: true, + hpack: 'fill', + className: 'sidebar-chat-settings-toggles', + children: [ + ConfigToggle({ + icon: 'menstrual_health', + name: 'Lewds', + desc: 'Shows naughty stuff when enabled', + initValue: BooruService.nsfw, + onChange: (self, newValue) => { + BooruService.nsfw = newValue; + }, + }), + ] + }) + ] + }) +}); + const booruWelcome = Box({ vexpand: true, homogeneous: true, @@ -94,6 +122,7 @@ const booruWelcome = Box({ vertical: true, children: [ BooruInfo(), + BooruSettings(), ] }) }); diff --git a/.config/ags/services/booru.js b/.config/ags/services/booru.js index 8faae8e5a..a4f06d9a3 100644 --- a/.config/ags/services/booru.js +++ b/.config/ags/services/booru.js @@ -8,7 +8,7 @@ const APISERVICES = { } const getWorkingImageSauce = (url) => { - if(url.includes('pximg.net')) { + if (url.includes('pximg.net')) { return `https://www.pixiv.net/en/artworks/${url.substring(url.lastIndexOf('/')).replace(/_p\d+\.png$/, '')}`; } return url; @@ -33,6 +33,7 @@ function paramStringFromObj(params) { class BooruService extends Service { _baseUrl = 'https://yande.re/post.json'; _mode = 'yandere'; + _nsfw = userOptions.sidebar.imageAllowNsfw; _responses = []; _queries = []; @@ -56,6 +57,9 @@ class BooruService extends Service { this.emit('clear'); } + get nsfw() { return this._nsfw } + set nsfw(value) { this._nsfw = value; } + get mode() { return this._mode } set mode(value) { this._mode = value; @@ -66,7 +70,7 @@ class BooruService extends Service { async fetch(msg) { // Init - const userArgs = msg.split(/\s+/); + const userArgs = `${msg}${this._nsfw ? '' : ' rating:safe'}`.split(/\s+/); let taglist = []; // Construct body/headers