summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHunternif <hunternif@gmail.com>2021-09-01 23:46:13 +0100
committerHunternif <hunternif@gmail.com>2021-09-01 23:51:16 +0100
commit125c43177506dae11677ac3a9f2f5703881d1d1e (patch)
tree13235f4110c9afaa9bc1676392e7b9d80cf187ca
parent91f707a83b96c3ed834fe28ebeb91801345ff15a (diff)
server, client: honor safety when fetching similar posts
-rw-r--r--client/js/controls/post_readonly_sidebar_control.js2
-rw-r--r--client/js/models/post_list.js8
-rw-r--r--server/szurubooru/api/post_api.py4
-rw-r--r--server/szurubooru/func/similar.py6
4 files changed, 13 insertions, 7 deletions
diff --git a/client/js/controls/post_readonly_sidebar_control.js b/client/js/controls/post_readonly_sidebar_control.js
index da2630d..e1c4afc 100644
--- a/client/js/controls/post_readonly_sidebar_control.js
+++ b/client/js/controls/post_readonly_sidebar_control.js
@@ -7,6 +7,7 @@ const views = require("../util/views.js");
const uri = require("../util/uri.js");
const misc = require("../util/misc.js");
const PostMetricListControl = require("./post_metric_list_control.js");
+const PostList = require("../models/post_list.js");
const template = views.getTemplate("post-readonly-sidebar");
const scoreTemplate = views.getTemplate("score");
@@ -241,6 +242,7 @@ class PostReadonlySidebarControl extends events.EventTarget {
return api
.get(
uri.formatApiLink("post", this._post.id, "similar", {
+ query: PostList.decorateSearchQuery(""),
limit: parseInt(settings.get().similarPosts),
})
)
diff --git a/client/js/models/post_list.js b/client/js/models/post_list.js
index 3db7ade..1220c7a 100644
--- a/client/js/models/post_list.js
+++ b/client/js/models/post_list.js
@@ -10,7 +10,7 @@ class PostList extends AbstractList {
static getAround(id, searchQuery, cachenumber) {
return api.get(
uri.formatApiLink("post", id, "around", {
- query: PostList._decorateSearchQuery(searchQuery || ""),
+ query: PostList.decorateSearchQuery(searchQuery || ""),
fields: "id",
cachenumber: cachenumber,
})
@@ -21,7 +21,7 @@ class PostList extends AbstractList {
return api
.get(
uri.formatApiLink("posts", {
- query: PostList._decorateSearchQuery(text || ""),
+ query: PostList.decorateSearchQuery(text || ""),
offset: offset,
limit: limit,
fields: fields.join(","),
@@ -41,7 +41,7 @@ class PostList extends AbstractList {
return api
.get(
uri.formatApiLink("posts", "median", {
- query: PostList._decorateSearchQuery(text || ""),
+ query: PostList.decorateSearchQuery(text || ""),
fields: fields.join(","),
})
)
@@ -54,7 +54,7 @@ class PostList extends AbstractList {
});
}
- static _decorateSearchQuery(text) {
+ static decorateSearchQuery(text) {
const browsingSettings = settings.get();
const disabledSafety = [];
if (api.safetyEnabled()) {
diff --git a/server/szurubooru/api/post_api.py b/server/szurubooru/api/post_api.py
index edb78fb..ad779ae 100644
--- a/server/szurubooru/api/post_api.py
+++ b/server/szurubooru/api/post_api.py
@@ -346,11 +346,13 @@ def get_posts_similar(
) -> rest.Response:
auth.verify_privilege(ctx.user, "posts:view:similar")
_search_executor_config.user = ctx.user
+ query_text = ctx.get_param_as_string("query", default="")
post_id = _get_post_id(params)
post = posts.get_post_by_id(post_id)
limit = ctx.get_param_as_int("limit", default=10, min=1, max=100)
- results = similar.find_similar_posts(post, limit)
+ results = similar.find_similar_posts(post, limit, query_text)
return {
+ "query": query_text,
"limit": limit,
"results": list([
posts.serialize_micro_post(result, ctx.user) for result in results
diff --git a/server/szurubooru/func/similar.py b/server/szurubooru/func/similar.py
index 37f3f0d..2e100ab 100644
--- a/server/szurubooru/func/similar.py
+++ b/server/szurubooru/func/similar.py
@@ -8,7 +8,9 @@ _search_executor_config = search.configs.PostSearchConfig()
_search_executor = search.Executor(_search_executor_config)
-def find_similar_posts(source_post: model.Post, limit: int) -> List[model.Post]:
+def find_similar_posts(
+ source_post: model.Post, limit: int, query_text: str = ''
+) -> List[model.Post]:
results = []
# Sort tags in order of increasing post count, i.e. least to most popular
# This will help yield results quicker
@@ -19,7 +21,7 @@ def find_similar_posts(source_post: model.Post, limit: int) -> List[model.Post]:
tags = source_tags
for x in range(max_removals + 1):
# prepare the current search, remove known results
- query = ' '.join([t.first_name for t in tags])
+ query = query_text + ' ' + ' '.join([t.first_name for t in tags])
query += ' -id:%d' % source_post.post_id
for r in results:
query += ' -id:%d' % r.post_id