refactor iqdb endpoints
This commit is contained in:
@@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
18
app/logical/iqdb_proxy.rb
Normal file
18
app/logical/iqdb_proxy.rb
Normal file
@@ -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
|
||||
9
app/views/iqdb_queries/_matches.html.erb
Normal file
9
app/views/iqdb_queries/_matches.html.erb
Normal file
@@ -0,0 +1,9 @@
|
||||
<% if @matches.present? %>
|
||||
<h3>Similar</h3>
|
||||
<% @matches.each do |match| %>
|
||||
<%= PostPresenter.preview(match["post"], :tags => "status:any", :similarity => match["score"], :size => true) %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<h3>Similar</h3>
|
||||
<p>No matches found</p>
|
||||
<% end %>
|
||||
@@ -1,9 +0,0 @@
|
||||
<% if @results.any? %>
|
||||
<h3>Similar</h3>
|
||||
<% @results.each do |match| %>
|
||||
<%= PostPresenter.preview(Post.find(match["post_id"]), :tags => "status:any", :similarity => match["score"], :size => true) %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<h3>Similar</h3>
|
||||
<p>No matches found</p>
|
||||
<% end %>
|
||||
1
app/views/iqdb_queries/show+xhr.html.erb
Normal file
1
app/views/iqdb_queries/show+xhr.html.erb
Normal file
@@ -0,0 +1 @@
|
||||
<%= render "iqdb_queries/matches" %>
|
||||
@@ -21,18 +21,7 @@
|
||||
<% end %>
|
||||
</section>
|
||||
|
||||
<% if @matches %>
|
||||
<section>
|
||||
<h2>Similar results</h2>
|
||||
<% if @matches.any? %>
|
||||
<% @matches.each do |post, score| %>
|
||||
<%= PostPresenter.preview(post, :tags => "status:any", :size => true, :similarity => score) %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<p>No matches found</p>
|
||||
<% end %>
|
||||
</section>
|
||||
<% end %>
|
||||
<%= render "iqdb_queries/matches" %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<% if @matches %>
|
||||
<%= raw @matches.to_json %>
|
||||
<% end %>
|
||||
@@ -16,7 +16,7 @@
|
||||
<% end %>
|
||||
<li id="add-artist-commentary-list"><%= link_to "Add commentary", "#", :id => "add-commentary" %></li>
|
||||
<li><%= link_to "Add to favorite group", "#", :id => "open-favgroup-dialog-link" %></li>
|
||||
<li><%= link_to "Find similar", iqdb_queries_path(:post_id => post.id), :method => :post, :remote => true %></li>
|
||||
<li><%= link_to "Find similar", iqdb_queries_path(:post_id => post.id) %></li>
|
||||
|
||||
<% if post.is_status_locked? %>
|
||||
<li><span id="status-locked-notice">Status locked</span></li>
|
||||
|
||||
Reference in New Issue
Block a user