diff --git a/app/assets/javascripts/posts.js.erb b/app/assets/javascripts/posts.js.erb index 0adadf4d2..74c73164a 100644 --- a/app/assets/javascripts/posts.js.erb +++ b/app/assets/javascripts/posts.js.erb @@ -154,7 +154,7 @@ Danbooru.Post.initialize_similar = function() { $("#similar-button").click(function(e) { - $.get("/iqdb_queries/preview", {"url": $("#post_source").val()}).done(function(html) {$("#iqdb-similar").html(html).show()}); + $.get("/iqdb_queries", {"variant": "xhr", "url": $("#post_source").val()}).done(function(html) {$("#iqdb-similar").html(html).show()}); e.preventDefault(); }); } diff --git a/app/assets/javascripts/uploads.js b/app/assets/javascripts/uploads.js index fa74257ba..c18dabdd0 100644 --- a/app/assets/javascripts/uploads.js +++ b/app/assets/javascripts/uploads.js @@ -61,7 +61,7 @@ Danbooru.Upload.initialize_iqdb_source = function() { if (/^https?:\/\//.test($("#normalized_url").val())) { - $.get("/iqdb_queries/preview", {"url": $("#normalized_url").val()}).done(function(html) {$("#iqdb-similar").html(html)}); + $.get("/iqdb_queries", {"variant": "xhr", "url": $("#normalized_url").val()}).done(function(html) {$("#iqdb-similar").html(html)}); } } @@ -77,7 +77,7 @@ Danbooru.Upload.initialize_similar = function() { $("#similar-button").click(function(e) { - $.get("/iqdb_queries/preview", {"url": $("#upload_source").val()}).done(function(html) {$("#iqdb-similar").html(html).show()}); + $.get("/iqdb_queries", {"variant": "xhr", "url": $("#upload_source").val()}).done(function(html) {$("#iqdb-similar").html(html).show()}); e.preventDefault(); }); } diff --git a/app/controllers/iqdb_queries_controller.rb b/app/controllers/iqdb_queries_controller.rb index f5162330b..c076dd420 100644 --- a/app/controllers/iqdb_queries_controller.rb +++ b/app/controllers/iqdb_queries_controller.rb @@ -3,35 +3,27 @@ class IqdbQueriesController < ApplicationController def show if params[:url] - url = URI.parse(Danbooru.config.iqdbs_server) - url.path = "/similar" - url.query = {callback: iqdb_queries_url(format: params[:format]), url: params[:url]}.to_query - redirect_to url.to_s - return + @matches = IqdbProxy.query(params[:url]) end if params[:post_id] - post = Post.find(params[:post_id]) - url = URI.parse(Danbooru.config.iqdbs_server) - url.path = "/similar" - url.query = {callback: iqdb_queries_url(format: params[:format]), url: post.preview_file_url}.to_query - redirect_to url.to_s - return + @matches = IqdbProxy.query(Post.find(params[:post_id]).preview_file_url) end if params[:matches] - @matches = JSON.parse(params[:matches]) - @matches = @matches.map {|x| [Post.find(x[0]), x[1]]} + @matches = IqdbProxy.decorate_posts(JSON.parse(params[:matches])) end - respond_with(@matches) - end + respond_with(@matches) do |fmt| + fmt.html - def preview - url = URI.parse(Danbooru.config.iqdbs_server) - url.path = "/similar" - url.query = {url: params[:url]}.to_query - @results = HTTParty.get(url.to_s).parsed_response - render layout: false + fmt.html.xhr do + render layout: false + end + + fmt.json do + render json: @matches + end + end end end diff --git a/app/logical/iqdb_proxy.rb b/app/logical/iqdb_proxy.rb new file mode 100644 index 000000000..d5330f562 --- /dev/null +++ b/app/logical/iqdb_proxy.rb @@ -0,0 +1,18 @@ +class IqdbProxy + def self.query(url) + raise NotImplementedError unless Danbooru.config.iqdbs_server.present? + + url = URI.parse(Danbooru.config.iqdbs_server) + url.path = "/similar" + url.query = {url: url}.to_query + json = HTTParty.get(url.to_s, Danbooru.config.httparty_options).parsed_response + decorate_posts(json) + end + + def self.decorate_posts(json) + json.map do |x| + x["post"] = Post.find(x["id"]) + x + end + end +end diff --git a/app/views/iqdb_queries/_matches.html.erb b/app/views/iqdb_queries/_matches.html.erb new file mode 100644 index 000000000..2b6e5a413 --- /dev/null +++ b/app/views/iqdb_queries/_matches.html.erb @@ -0,0 +1,9 @@ +<% if @matches.present? %> +
No matches found
+<% end %> diff --git a/app/views/iqdb_queries/preview.html.erb b/app/views/iqdb_queries/preview.html.erb deleted file mode 100644 index 23b4ee5ce..000000000 --- a/app/views/iqdb_queries/preview.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<% if @results.any? %> -No matches found
-<% end %> diff --git a/app/views/iqdb_queries/show+xhr.html.erb b/app/views/iqdb_queries/show+xhr.html.erb new file mode 100644 index 000000000..1e6f5999d --- /dev/null +++ b/app/views/iqdb_queries/show+xhr.html.erb @@ -0,0 +1 @@ +<%= render "iqdb_queries/matches" %> \ No newline at end of file diff --git a/app/views/iqdb_queries/show.html.erb b/app/views/iqdb_queries/show.html.erb index 67686e241..a66dd34b3 100644 --- a/app/views/iqdb_queries/show.html.erb +++ b/app/views/iqdb_queries/show.html.erb @@ -21,18 +21,7 @@ <% end %> - <% if @matches %> -No matches found
- <% end %> -