From b18bb73f4b336c9fda8abde2a09c0cbf00c7352c Mon Sep 17 00:00:00 2001 From: Toks Date: Thu, 22 May 2014 20:07:15 -0400 Subject: [PATCH 01/35] Implentation for #2141 --- app/assets/javascripts/related_tag.js | 7 ++++++ app/assets/javascripts/uploads.js | 3 +++ .../stylesheets/specific/wiki_pages.css.scss | 8 ++++++ app/helpers/wiki_page_versions_helper.rb | 20 +++++++++++++++ app/helpers/wiki_pages_helper.rb | 5 ++++ app/logical/sources/site.rb | 5 ++++ app/models/wiki_page.rb | 25 ++++++++++++++++--- app/models/wiki_page_version.rb | 5 +++- app/views/wiki_page_versions/diff.html.erb | 2 ++ app/views/wiki_page_versions/show.html.erb | 4 +++ app/views/wiki_pages/_form.html.erb | 2 ++ app/views/wiki_pages/search.html.erb | 1 + app/views/wiki_pages/show.html.erb | 4 +++ ...505000956_add_other_names_to_wiki_pages.rb | 10 ++++++++ 14 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20140505000956_add_other_names_to_wiki_pages.rb diff --git a/app/assets/javascripts/related_tag.js b/app/assets/javascripts/related_tag.js index bf87c744a..95d2dbfde 100644 --- a/app/assets/javascripts/related_tag.js +++ b/app/assets/javascripts/related_tag.js @@ -125,6 +125,7 @@ this.build_recent_and_frequent($dest); $dest.append(this.build_html(query, related_tags, "general")); + this.build_translated($dest); if (wiki_page_tags.length) { $dest.append(Danbooru.RelatedTag.build_html("wiki:" + query, wiki_page_tags, "wiki")); } @@ -173,6 +174,12 @@ } } + Danbooru.RelatedTag.build_translated = function($dest) { + if (Danbooru.RelatedTag.translated_tags && Danbooru.RelatedTag.translated_tags.length) { + $dest.append(this.build_html("translated", Danbooru.RelatedTag.translated_tags, "translated")); + } + } + Danbooru.RelatedTag.build_html = function(query, related_tags, name, is_wide_column) { if (query === null || query === "") { return ""; diff --git a/app/assets/javascripts/uploads.js b/app/assets/javascripts/uploads.js index 315191adb..97b8d3f0e 100644 --- a/app/assets/javascripts/uploads.js +++ b/app/assets/javascripts/uploads.js @@ -67,6 +67,9 @@ $("#source-artist").html('' + data.artist_name + ''); $("#source-tags").html(tag_html); + Danbooru.RelatedTag.translated_tags = data.translated_tags; + Danbooru.RelatedTag.build_all(); + var new_artist_link = 'new'; $("#source-record").html(new_artist_link); diff --git a/app/assets/stylesheets/specific/wiki_pages.css.scss b/app/assets/stylesheets/specific/wiki_pages.css.scss index 6c114ec19..bb0e3ad8f 100644 --- a/app/assets/stylesheets/specific/wiki_pages.css.scss +++ b/app/assets/stylesheets/specific/wiki_pages.css.scss @@ -27,4 +27,12 @@ div#c-wiki-pages { margin-left: 15em; padding-left: 1em; } + + .hint { + display: block; + } + + .other-name { + font-weight: bold; + } } diff --git a/app/helpers/wiki_page_versions_helper.rb b/app/helpers/wiki_page_versions_helper.rb index fa8e9c28f..b36604f92 100644 --- a/app/helpers/wiki_page_versions_helper.rb +++ b/app/helpers/wiki_page_versions_helper.rb @@ -48,4 +48,24 @@ module WikiPageVersionsHelper output.join.gsub(/\r?\n/, '
').html_safe end + + def wiki_page_other_names_diff(thispage, otherpage) + new_names = otherpage.other_names_array + old_names = thispage.other_names_array + added_names = new_names - old_names + removed_names = old_names - new_names + unchanged_names = new_names & old_names + + html = [] + added_names.each do |name| + html << '' + name + '' + end + removed_names.each do |name| + html << '' + name + '' + end + unchanged_names.each do |name| + html << '' + name + '' + end + return html.join(" ").html_safe + end end diff --git a/app/helpers/wiki_pages_helper.rb b/app/helpers/wiki_pages_helper.rb index afe7033fe..8b1f11674 100644 --- a/app/helpers/wiki_pages_helper.rb +++ b/app/helpers/wiki_pages_helper.rb @@ -47,4 +47,9 @@ module WikiPagesHelper html.html_safe end + + def wiki_page_other_names_list(wiki_page) + names_html = wiki_page.other_names_array.map{|name| content_tag("span", name, :class => "other-name")} + names_html.join(", ").html_safe + end end diff --git a/app/logical/sources/site.rb b/app/logical/sources/site.rb index b88d50201..1202fd8a6 100644 --- a/app/logical/sources/site.rb +++ b/app/logical/sources/site.rb @@ -18,12 +18,17 @@ module Sources end end + def translated_tags + WikiPage.other_names_match(tags.map(&:first)).map{|wiki_page| [wiki_page.title, wiki_page.category_name]} + end + def to_json return { :artist_name => artist_name, :profile_url => profile_url, :image_url => image_url, :tags => tags, + :translated_tags => translated_tags, :danbooru_name => artist_record.try(:first).try(:name), :danbooru_id => artist_record.try(:first).try(:id), :unique_id => unique_id diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index 65ce87e2b..8a60ded8a 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -10,7 +10,7 @@ class WikiPage < ActiveRecord::Base validates_presence_of :title validate :validate_locker_is_janitor validate :validate_not_locked - attr_accessible :title, :body, :is_locked + attr_accessible :title, :body, :is_locked, :other_names has_one :tag, :foreign_key => "name", :primary_key => "title" has_one :artist, lambda {where(:is_active => true)}, :foreign_key => "name", :primary_key => "title" has_many :versions, lambda {order("wiki_page_versions.id ASC")}, :class_name => "WikiPageVersion", :dependent => :destroy @@ -32,6 +32,12 @@ class WikiPage < ActiveRecord::Base end end + def other_names_match(names) + names = names.map{|name| name.to_escaped_for_tsquery} + query_sql = names.join(" | ") + where("other_names_index @@ to_tsquery('danbooru', E?)", query_sql) + end + def search(params = {}) q = where("true") params = {} if params.blank? @@ -48,6 +54,10 @@ class WikiPage < ActiveRecord::Base q = q.body_matches(params[:body_matches]) end + if params[:other_names_match].present? + q = q.other_names_match(params[:other_names_match].split(" ")) + end + if params[:creator_name].present? q = q.where("creator_id = (select _.id from users _ where lower(_.name) = ?)", params[:creator_name].tr(" ", "_").mb_chars.downcase) end @@ -113,6 +123,7 @@ class WikiPage < ActiveRecord::Base self.title = version.title self.body = version.body self.is_locked = version.is_locked + self.other_names = version.other_names end def revert_to!(version) @@ -141,7 +152,8 @@ class WikiPage < ActiveRecord::Base prev.update_attributes( :title => title, :body => body, - :is_locked => is_locked + :is_locked => is_locked, + :other_names => other_names ) end @@ -156,12 +168,13 @@ class WikiPage < ActiveRecord::Base :updater_ip_addr => CurrentUser.ip_addr, :title => title, :body => body, - :is_locked => is_locked + :is_locked => is_locked, + :other_names => other_names ) end def create_version - if title_changed? || body_changed? || is_locked_changed? + if title_changed? || body_changed? || is_locked_changed? || other_names_changed? if merge_version? merge_version else @@ -207,4 +220,8 @@ class WikiPage < ActiveRecord::Base def visible? artist.blank? || !artist.is_banned? || CurrentUser.user.is_janitor? end + + def other_names_array + other_names.to_s.scan(/\S+/) + end end diff --git a/app/models/wiki_page_version.rb b/app/models/wiki_page_version.rb index 3d2b4bd23..dbf269bce 100644 --- a/app/models/wiki_page_version.rb +++ b/app/models/wiki_page_version.rb @@ -2,7 +2,7 @@ class WikiPageVersion < ActiveRecord::Base belongs_to :wiki_page belongs_to :updater, :class_name => "User" belongs_to :artist - attr_accessible :wiki_page_id, :title, :body, :is_locked, :updater_id, :updater_ip_addr, :version + attr_accessible :wiki_page_id, :title, :body, :is_locked, :updater_id, :updater_ip_addr, :version, :other_names module SearchMethods def for_user(user_id) @@ -43,4 +43,7 @@ class WikiPageVersion < ActiveRecord::Base artist.blank? || !artist.is_banned? || CurrentUser.user.is_janitor? end + def other_names_array + other_names.to_s.scan(/\S+/) + end end diff --git a/app/views/wiki_page_versions/diff.html.erb b/app/views/wiki_page_versions/diff.html.erb index 429be93d0..e70f1b79a 100644 --- a/app/views/wiki_page_versions/diff.html.erb +++ b/app/views/wiki_page_versions/diff.html.erb @@ -4,6 +4,8 @@

Showing differences between <%= compact_time @thispage.created_at %> (<%= link_to_user @thispage.updater %>) and <%= compact_time @otherpage.created_at %> (<%= link_to_user @otherpage.updater %>)

+

<%= wiki_page_other_names_diff(@thispage, @otherpage) %>

+
<%= wiki_page_diff(@thispage, @otherpage) %>
diff --git a/app/views/wiki_page_versions/show.html.erb b/app/views/wiki_page_versions/show.html.erb index 9d0374dc3..95a1639bf 100644 --- a/app/views/wiki_page_versions/show.html.erb +++ b/app/views/wiki_page_versions/show.html.erb @@ -7,6 +7,10 @@
<% if @wiki_page_version.visible? %> + <% if @wiki_page_version.other_names.present? %> +

<%= wiki_page_other_names_list(@wiki_page_version) %>

+ <% end %> + <%= format_text(@wiki_page_version.body) %> <% else %>

This artist has requested removal of their information.

diff --git a/app/views/wiki_pages/_form.html.erb b/app/views/wiki_pages/_form.html.erb index 53dcd1bb1..19b1d06c9 100644 --- a/app/views/wiki_pages/_form.html.erb +++ b/app/views/wiki_pages/_form.html.erb @@ -6,6 +6,8 @@ <%= f.input :title, :as => :string %> <% end %> + <%= f.input :other_names, :as => :text, :hint => "Names used for this tag on other sites such as Pixiv. Separate with spaces." %> + <%= dtext_field "wiki_page", "body" %> <% if CurrentUser.user.is_janitor? %> diff --git a/app/views/wiki_pages/search.html.erb b/app/views/wiki_pages/search.html.erb index b343af1f9..9d102c7d4 100644 --- a/app/views/wiki_pages/search.html.erb +++ b/app/views/wiki_pages/search.html.erb @@ -4,6 +4,7 @@ <%= search_field "title", :hint => "Use * for wildcard searches" %> <%= search_field "creator_name" %> <%= search_field "body_matches", :label => "Body" %> + <%= search_field "other_names_match", :label => "Other names" %>
diff --git a/app/views/wiki_pages/show.html.erb b/app/views/wiki_pages/show.html.erb index 6549c8933..0c2178b06 100644 --- a/app/views/wiki_pages/show.html.erb +++ b/app/views/wiki_pages/show.html.erb @@ -14,6 +14,10 @@
<% if @wiki_page.visible? %> + <% if @wiki_page.other_names.present? %> +

<%= wiki_page_other_names_list(@wiki_page) %>

+ <% end %> + <%= format_text(@wiki_page.body) %> <% if @wiki_page.artist %> diff --git a/db/migrate/20140505000956_add_other_names_to_wiki_pages.rb b/db/migrate/20140505000956_add_other_names_to_wiki_pages.rb new file mode 100644 index 000000000..b6ee5d69d --- /dev/null +++ b/db/migrate/20140505000956_add_other_names_to_wiki_pages.rb @@ -0,0 +1,10 @@ +class AddOtherNamesToWikiPages < ActiveRecord::Migration + def change + add_column :wiki_pages, :other_names, :text + add_column :wiki_pages, :other_names_index, :tsvector + add_column :wiki_page_versions, :other_names, :text + + execute "CREATE INDEX index_wiki_pages_on_other_names_index ON wiki_pages USING GIN (other_names_index)" + execute "CREATE TRIGGER trigger_wiki_pages_on_update_for_other_names BEFORE INSERT OR UPDATE ON wiki_pages FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger('other_names_index', 'public.danbooru', 'other_names')" + end +end From 6c4cd425652ef87cb0cbe9c94daf51e9c3c3ebf8 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Mon, 5 May 2014 17:21:18 -0700 Subject: [PATCH 02/35] iqdb command fixes --- app/logical/iqdb/command.rb | 4 +++- app/logical/iqdb/importer.rb | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/logical/iqdb/command.rb b/app/logical/iqdb/command.rb index 1b7d97644..4f19445c7 100644 --- a/app/logical/iqdb/command.rb +++ b/app/logical/iqdb/command.rb @@ -7,7 +7,7 @@ module Iqdb end def process(&block) - IO.popen("iqdb command #{database}", "w", &block) + IO.popen("iqdb command #{database}", "w+", &block) end def add(post) @@ -15,6 +15,7 @@ module Iqdb process do |io| io.puts "add 0 #{hex}:#{post.preview_file_path}" io.puts "quit" + io.read end end @@ -23,6 +24,7 @@ module Iqdb process do |io| io.puts "remove 0 #{hex}" io.puts "quit" + io.read end end end diff --git a/app/logical/iqdb/importer.rb b/app/logical/iqdb/importer.rb index c12690b82..efa359479 100644 --- a/app/logical/iqdb/importer.rb +++ b/app/logical/iqdb/importer.rb @@ -1,14 +1,15 @@ module Iqdb class Importer def import! - Post.find_each do |post| - IO.popen("iqdb command #{Danbooru.config.iqdb_file}", "w") do |io| + Post.where("created_at >= ?", 3.months.ago).find_each do |post| + IO.popen("iqdb command #{Danbooru.config.iqdb_file}", "w+") do |io| if File.exists?(post.preview_file_path) puts post.id hex = post.id.to_s(16) io.puts "add 0 #{hex}:#{post.preview_file_path}" end io.puts "quit" + io.read end end end From 402624f6d9678f0d513b975e5ec8269c6cd626c7 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Mon, 5 May 2014 17:29:34 -0700 Subject: [PATCH 03/35] revert importer change --- app/logical/iqdb/importer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/logical/iqdb/importer.rb b/app/logical/iqdb/importer.rb index efa359479..585d45710 100644 --- a/app/logical/iqdb/importer.rb +++ b/app/logical/iqdb/importer.rb @@ -1,7 +1,7 @@ module Iqdb class Importer def import! - Post.where("created_at >= ?", 3.months.ago).find_each do |post| + Post.find_each do |post| IO.popen("iqdb command #{Danbooru.config.iqdb_file}", "w+") do |io| if File.exists?(post.preview_file_path) puts post.id From e66a61477568b79bd35bbab06ca4ed4c71818177 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Mon, 5 May 2014 17:33:21 -0700 Subject: [PATCH 04/35] new version --- config/danbooru_default_config.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/danbooru_default_config.rb b/config/danbooru_default_config.rb index 6ddc636fa..dcd1adbe4 100644 --- a/config/danbooru_default_config.rb +++ b/config/danbooru_default_config.rb @@ -4,7 +4,7 @@ module Danbooru class Configuration # The version of this Danbooru. def version - "2.48.0" + "2.49.0" end # The name of this Danbooru. From 57ad234b9078002272931d91fdb8cfbec8327207 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Fri, 25 Apr 2014 17:15:09 -0700 Subject: [PATCH 05/35] fixes #2130 --- app/assets/javascripts/uploads.js | 2 +- app/controllers/iqdb_controller.rb | 8 ----- app/controllers/iqdb_queries_controller.rb | 30 +++++++++++++++++++ app/logical/iqdb/importer.rb | 1 - app/logical/iqdb/responses/collection.rb | 5 +--- app/logical/iqdb/server.rb | 13 ++++++++ .../iqdb_queries/create_by_post.html.erb | 9 ++++++ .../create_by_url.html.erb} | 0 .../posts/partials/show/_options.html.erb | 2 +- config/routes.rb | 2 +- 10 files changed, 56 insertions(+), 16 deletions(-) delete mode 100644 app/controllers/iqdb_controller.rb create mode 100644 app/controllers/iqdb_queries_controller.rb create mode 100644 app/views/iqdb_queries/create_by_post.html.erb rename app/views/{iqdb/similar_by_source.html.erb => iqdb_queries/create_by_url.html.erb} (100%) diff --git a/app/assets/javascripts/uploads.js b/app/assets/javascripts/uploads.js index 97b8d3f0e..335744c4e 100644 --- a/app/assets/javascripts/uploads.js +++ b/app/assets/javascripts/uploads.js @@ -20,7 +20,7 @@ } Danbooru.Upload.initialize_iqdb_source = function() { - $.get("/iqdb/similar_by_source", {"source": $("#normalized_url").val()}).done(function(html) {$("#iqdb-similar").html(html)}); + $.post("/iqdb_queries", {"url": $("#normalized_url").val()}).done(function(html) {$("#iqdb-similar").html(html)}); } Danbooru.Upload.initialize_enter_on_tags = function() { diff --git a/app/controllers/iqdb_controller.rb b/app/controllers/iqdb_controller.rb deleted file mode 100644 index f1e63c5b3..000000000 --- a/app/controllers/iqdb_controller.rb +++ /dev/null @@ -1,8 +0,0 @@ -class IqdbController < ApplicationController - def similar_by_source - @download = Iqdb::Download.new(params[:source]) - @download.download_from_source - @download.find_similar - render :layout => false - end -end diff --git a/app/controllers/iqdb_queries_controller.rb b/app/controllers/iqdb_queries_controller.rb new file mode 100644 index 000000000..ac23a7ace --- /dev/null +++ b/app/controllers/iqdb_queries_controller.rb @@ -0,0 +1,30 @@ +class IqdbQueriesController < ApplicationController + before_filter :member_only + + def create + if !Danbooru.config.iqdb_hostname_and_port + render :nothing => true + return + end + + if params[:url] + create_by_url + elsif params[:post_id] + create_by_post + end + end + +protected + def create_by_url + @download = Iqdb::Download.new(params[:url]) + @download.download_from_source + @download.find_similar + render :layout => false, :action => "create_by_url" + end + + def create_by_post + @post = Post.find(params[:post_id]) + @results = Iqdb::Server.default.similar(@post.id, 3) + render :layout => false, :action => "create_by_post" + end +end \ No newline at end of file diff --git a/app/logical/iqdb/importer.rb b/app/logical/iqdb/importer.rb index 585d45710..8aad521b0 100644 --- a/app/logical/iqdb/importer.rb +++ b/app/logical/iqdb/importer.rb @@ -4,7 +4,6 @@ module Iqdb Post.find_each do |post| IO.popen("iqdb command #{Danbooru.config.iqdb_file}", "w+") do |io| if File.exists?(post.preview_file_path) - puts post.id hex = post.id.to_s(16) io.puts "add 0 #{hex}:#{post.preview_file_path}" end diff --git a/app/logical/iqdb/responses/collection.rb b/app/logical/iqdb/responses/collection.rb index a01ab2c8c..f8cd4915a 100644 --- a/app/logical/iqdb/responses/collection.rb +++ b/app/logical/iqdb/responses/collection.rb @@ -2,6 +2,7 @@ module Iqdb module Responses class Collection attr_reader :responses + delegate :each, :empty?, :any?, :to => :matches def initialize(response_string) @responses = response_string.split(/\n/).map do |string| @@ -13,10 +14,6 @@ module Iqdb @matches ||= responses.select {|x| x.is_a?(Iqdb::Responses::Response_200) && x.score >= 90} end - def empty? - matches.empty? - end - def errored? errors.any? end diff --git a/app/logical/iqdb/server.rb b/app/logical/iqdb/server.rb index efc2983e0..de39f04e7 100644 --- a/app/logical/iqdb/server.rb +++ b/app/logical/iqdb/server.rb @@ -7,6 +7,10 @@ module Iqdb attr_reader :hostname, :port, :socket + def self.default + new(*Danbooru.config.iqdb_hostname_and_port) + end + def initialize(hostname, port) @hostname = hostname @port = port @@ -45,6 +49,15 @@ module Iqdb end end + def similar(post_id, results, flags = FLAG_DISCARD_COMMON_COEFFS) + request do + hex_id = post_id.to_s(16) + socket.puts "sim 0 #{flags} #{results} #{hex_id}" + socket.puts "done" + responses = Responses::Collection.new(@socket.read) + end + end + def query(results, filename, flags = FLAG_DISCARD_COMMON_COEFFS) request do socket.puts "query 0 #{flags} #{results} #{filename}" diff --git a/app/views/iqdb_queries/create_by_post.html.erb b/app/views/iqdb_queries/create_by_post.html.erb new file mode 100644 index 000000000..f66fb5b58 --- /dev/null +++ b/app/views/iqdb_queries/create_by_post.html.erb @@ -0,0 +1,9 @@ +<% if @results.any? %> +

Similar

+ <% @results.each do |match| %> + <%= PostPresenter.preview(Post.find(match.post_id)) %> + <% end %> +<% else %> +

Similar

+

No matches found

+<% end %> diff --git a/app/views/iqdb/similar_by_source.html.erb b/app/views/iqdb_queries/create_by_url.html.erb similarity index 100% rename from app/views/iqdb/similar_by_source.html.erb rename to app/views/iqdb_queries/create_by_url.html.erb diff --git a/app/views/posts/partials/show/_options.html.erb b/app/views/posts/partials/show/_options.html.erb index b8ffaf9cc..18996f2ba 100644 --- a/app/views/posts/partials/show/_options.html.erb +++ b/app/views/posts/partials/show/_options.html.erb @@ -14,7 +14,7 @@ <% if CurrentUser.is_builder? && post.has_notes? %>
  • <%= link_to "Copy all notes", "#", :id => "copy-notes" %>
  • <% end %> -
  • <%= link_to "Find similar", "http://danbooru.iqdb.org/db-search.php?url=http://#{Danbooru.config.hostname}#{post.preview_file_url}" %>
  • +
  • <%= link_to "Find similar", iqdb_queries_path(:post_id => post.id), :method => :post, :remote => true %>
  • <% if post.is_status_locked? %>
  • Status locked
  • diff --git a/config/routes.rb b/config/routes.rb index 8391c0b85..0c28cfc3e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -257,6 +257,7 @@ Rails.application.routes.draw do get :diff end end + resources :iqdb_queries, :only => [:create] # aliases resources :wpages, :controller => "wiki_pages" @@ -264,7 +265,6 @@ Rails.application.routes.draw do resources :fposts, :controller => "forum_posts" get "/m/posts", :controller => "mobile/posts", :action => "index" get "/m/posts/:id", :controller => "mobile/posts", :action => "show" - get "/iqdb/similar_by_source", :controller => "iqdb", :action => "similar_by_source" # legacy aliases get "/artist" => redirect {|params, req| "/artists?page=#{req.params[:page]}&search[name]=#{CGI::escape(req.params[:name].to_s)}"} From 639eea85f16c59f2c3c572023b07b8c707fc8010 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 8 May 2014 15:41:29 -0700 Subject: [PATCH 06/35] wip --- app/logical/iqdb/server.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/logical/iqdb/server.rb b/app/logical/iqdb/server.rb index de39f04e7..66d832ccf 100644 --- a/app/logical/iqdb/server.rb +++ b/app/logical/iqdb/server.rb @@ -54,7 +54,7 @@ module Iqdb hex_id = post_id.to_s(16) socket.puts "sim 0 #{flags} #{results} #{hex_id}" socket.puts "done" - responses = Responses::Collection.new(@socket.read) + responses = Responses::Collection.new(socket.read) end end @@ -62,7 +62,7 @@ module Iqdb request do socket.puts "query 0 #{flags} #{results} #{filename}" socket.puts "done" - responses = Responses::Collection.new(@socket.read) + responses = Responses::Collection.new(socket.read) end end end From f8dffc7e8b841cb0b6a13ec22b010a98610014dc Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 8 May 2014 16:42:16 -0700 Subject: [PATCH 07/35] * Refactor iqdb response collection --- Gemfile | 2 +- Gemfile.lock | 3 --- app/controllers/iqdb_queries_controller.rb | 2 +- app/logical/iqdb/download.rb | 2 +- app/logical/iqdb/responses/collection.rb | 3 ++- app/logical/iqdb/server.rb | 9 --------- app/views/iqdb_queries/create_by_url.html.erb | 4 ++-- 7 files changed, 7 insertions(+), 18 deletions(-) diff --git a/Gemfile b/Gemfile index 810d3dfe7..9776a34dc 100644 --- a/Gemfile +++ b/Gemfile @@ -53,6 +53,6 @@ end group :development do gem 'ruby-prof' - gem 'sql-logging' + # gem 'sql-logging' end diff --git a/Gemfile.lock b/Gemfile.lock index cade865e2..1f37e6340 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -190,8 +190,6 @@ GEM actionpack (>= 3.0) activesupport (>= 3.0) sprockets (~> 2.8) - sql-logging (3.0.8) - rails (> 3.0.0) statistics2 (0.54) term-ansicolor (1.3.0) tins (~> 1.0) @@ -264,7 +262,6 @@ DEPENDENCIES simple_form simplecov sprockets-rails - sql-logging statistics2 term-ansicolor therubyracer diff --git a/app/controllers/iqdb_queries_controller.rb b/app/controllers/iqdb_queries_controller.rb index ac23a7ace..de0628976 100644 --- a/app/controllers/iqdb_queries_controller.rb +++ b/app/controllers/iqdb_queries_controller.rb @@ -24,7 +24,7 @@ protected def create_by_post @post = Post.find(params[:post_id]) - @results = Iqdb::Server.default.similar(@post.id, 3) + @results = Iqdb::Server.default.query(3, @post.preview_file_path) render :layout => false, :action => "create_by_post" end end \ No newline at end of file diff --git a/app/logical/iqdb/download.rb b/app/logical/iqdb/download.rb index 47f4c9c9b..d2f3afa56 100644 --- a/app/logical/iqdb/download.rb +++ b/app/logical/iqdb/download.rb @@ -14,7 +14,7 @@ module Iqdb def find_similar if Danbooru.config.iqdb_hostname_and_port - @matches = Iqdb::Server.new(*Danbooru.config.iqdb_hostname_and_port).query(3, @download.file_path).matches + @matches = Iqdb::Server.default.query(3, @download.file_path).matches end end end diff --git a/app/logical/iqdb/responses/collection.rb b/app/logical/iqdb/responses/collection.rb index f8cd4915a..a5d3fd34d 100644 --- a/app/logical/iqdb/responses/collection.rb +++ b/app/logical/iqdb/responses/collection.rb @@ -2,7 +2,8 @@ module Iqdb module Responses class Collection attr_reader :responses - delegate :each, :empty?, :any?, :to => :matches + include Enumerable + delegate :<=>, :each, :to => :matches def initialize(response_string) @responses = response_string.split(/\n/).map do |string| diff --git a/app/logical/iqdb/server.rb b/app/logical/iqdb/server.rb index 66d832ccf..787cbbf67 100644 --- a/app/logical/iqdb/server.rb +++ b/app/logical/iqdb/server.rb @@ -49,15 +49,6 @@ module Iqdb end end - def similar(post_id, results, flags = FLAG_DISCARD_COMMON_COEFFS) - request do - hex_id = post_id.to_s(16) - socket.puts "sim 0 #{flags} #{results} #{hex_id}" - socket.puts "done" - responses = Responses::Collection.new(socket.read) - end - end - def query(results, filename, flags = FLAG_DISCARD_COMMON_COEFFS) request do socket.puts "query 0 #{flags} #{results} #{filename}" diff --git a/app/views/iqdb_queries/create_by_url.html.erb b/app/views/iqdb_queries/create_by_url.html.erb index ba06a3ff1..5c3d96a41 100644 --- a/app/views/iqdb_queries/create_by_url.html.erb +++ b/app/views/iqdb_queries/create_by_url.html.erb @@ -1,6 +1,6 @@ -<% if @download.matches.any? %> +<% if @download.any? %>

    Similar

    - <% @download.matches.each do |match| %> + <% @download.each do |match| %> <%= PostPresenter.preview(Post.find(match.post_id)) %> <% end %> <% else %> From 38c0e01f9b1fd112ffc4a367a23d39a665a5b41a Mon Sep 17 00:00:00 2001 From: Toks Date: Thu, 8 May 2014 20:25:11 -0400 Subject: [PATCH 08/35] Support referrer matching for seiga and da --- app/logical/sources/strategies/deviant_art.rb | 8 ++++++++ app/logical/sources/strategies/nico_seiga.rb | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/app/logical/sources/strategies/deviant_art.rb b/app/logical/sources/strategies/deviant_art.rb index 11a463282..cd7193a65 100644 --- a/app/logical/sources/strategies/deviant_art.rb +++ b/app/logical/sources/strategies/deviant_art.rb @@ -5,6 +5,14 @@ module Sources url =~ /^https?:\/\/(?:.+?\.)?deviantart\.(?:com|net)/ end + def referer_url(template) + if template.params[:ref] =~ /deviantart\.com\/art\// + template.params[:ref] + else + template.params[:url] + end + end + def site_name "Deviant Art" end diff --git a/app/logical/sources/strategies/nico_seiga.rb b/app/logical/sources/strategies/nico_seiga.rb index e58a7dffc..32f5cad7c 100644 --- a/app/logical/sources/strategies/nico_seiga.rb +++ b/app/logical/sources/strategies/nico_seiga.rb @@ -5,6 +5,14 @@ module Sources url =~ /^https?:\/\/(?:\w+\.)?nico(?:seiga|video)\.jp/ end + def referer_url(template) + if template.params[:ref] =~ /seiga\.nicovideo\.jp\/seiga\/im\d+/ + template.params[:ref] + else + template.params[:url] + end + end + def site_name "Nico Seiga" end From 3d0fa5968d0595cf16e105e73c72bd70be05d838 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 8 May 2014 17:04:11 -0700 Subject: [PATCH 09/35] fixes #2147 --- app/assets/javascripts/autocomplete.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/autocomplete.js b/app/assets/javascripts/autocomplete.js index 9a8841708..e5deccba9 100644 --- a/app/assets/javascripts/autocomplete.js +++ b/app/assets/javascripts/autocomplete.js @@ -11,8 +11,8 @@ Danbooru.Autocomplete.test_local_storage = function() { try { - localStorage.setItem("test", "test"); - localStorage.removeItem("test"); + $.localStorage.set("test", "test"); + $.localStorage.remove("test"); return true; } catch(e) { return false; @@ -20,8 +20,18 @@ } Danbooru.Autocomplete.prune_local_storage = function() { - if (this.enable_local_storage && localStorage.length > 10000) { - $.localStorage.removeAll(); + if (this.enable_local_storage) { + var now = new Date().getTime(); + $.each($.localStorage.keys(), function(i, key) { + var expiry = Date.parse($.localStorage.get(key)); + if (expiry < now) { + $.localStorage.remove(key); + } + }); + + if ($.localStorage.keys().length > 4000) { + $.localStorage.removeAll(); + } } } From d4b20a01178f886e4153783175ec102bb7f95932 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Fri, 9 May 2014 17:25:38 -0700 Subject: [PATCH 10/35] fixes #2148 --- INSTALL.debian | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.debian b/INSTALL.debian index 542edaf96..065605b59 100644 --- a/INSTALL.debian +++ b/INSTALL.debian @@ -1,6 +1,6 @@ #!/bin/bash -# Run: curl -s https://raw.github.com/r888888888/danbooru/master/INSTALL.debian > install.sh ; chmod +x install.sh ; ./install.sh +# Run: curl -s https://raw.githubusercontent.com/r888888888/danbooru/master/INSTALL.debian > install.sh ; chmod +x install.sh ; ./install.sh if [[ "$(whoami)" != "root" ]] ; then echo "You must run this script as root" @@ -102,7 +102,7 @@ sudo -u postgres createuser -s danbooru # Setup nginx update-rc.d -f nginx defaults -curl -s https://raw.github.com/r888888888/danbooru/master/script/install/nginx.danbooru.conf > /etc/nginx/conf.d/danbooru.conf +curl -s https://raw.githubusercontent.com/r888888888/danbooru/master/script/install/nginx.danbooru.conf > /etc/nginx/conf.d/danbooru.conf sed -i -e "s/__hostname__/$HOSTNAME/g" /etc/nginx/conf.d/danbooru.conf /etc/init.d/nginx start From 507c69d144950d6717b1f83014a26482700a01eb Mon Sep 17 00:00:00 2001 From: r888888888 Date: Fri, 9 May 2014 17:42:40 -0700 Subject: [PATCH 11/35] add autocomplete guards --- app/assets/javascripts/autocomplete.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/autocomplete.js b/app/assets/javascripts/autocomplete.js index e5deccba9..739c7cb41 100644 --- a/app/assets/javascripts/autocomplete.js +++ b/app/assets/javascripts/autocomplete.js @@ -23,9 +23,12 @@ if (this.enable_local_storage) { var now = new Date().getTime(); $.each($.localStorage.keys(), function(i, key) { - var expiry = Date.parse($.localStorage.get(key)); - if (expiry < now) { - $.localStorage.remove(key); + var obj = $.localStorage.get(key); + if (obj && obj.expires) { + var expiry = Date.parse(obj.expires); + if (expiry < now) { + $.localStorage.remove(key); + } } }); From 048c5a1e9f8fcd1a3aa12a1c0709e40ffd15b20c Mon Sep 17 00:00:00 2001 From: Toks Date: Sat, 10 May 2014 12:06:21 -0400 Subject: [PATCH 12/35] Fix link in label getting escaped --- app/views/users/edit.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb index b4898e953..4275e7b7d 100644 --- a/app/views/users/edit.html.erb +++ b/app/views/users/edit.html.erb @@ -54,7 +54,7 @@ A list of tags that you use often. They will appear when using the list of Related Tags.
    - <%= f.input :custom_style, :label => "Custom CSS style", :hint => "Style to apply to the whole site." %> + <%= f.input :custom_style, :label => "Custom CSS style".html_safe, :hint => "Style to apply to the whole site." %>
    From e2492719c9b9a664a0f5dd998f1c75c8c0b48d23 Mon Sep 17 00:00:00 2001 From: Toks Date: Sat, 10 May 2014 13:42:44 -0400 Subject: [PATCH 13/35] fix #2152 --- app/views/users/edit.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb index 4275e7b7d..8f8b4b013 100644 --- a/app/views/users/edit.html.erb +++ b/app/views/users/edit.html.erb @@ -38,7 +38,7 @@ <%= f.input :per_page, :label => "Posts per page", :as => :select, :collection => (1..100), :include_blank => false %> <% end %> - <%= f.input :blacklisted_tags, :hint => "Put any tag combinations you never want to see here. Each combination should go on a separate line. View help.", :input_html => {:size => "40x5"} %> + <%= f.input :blacklisted_tags, :hint => "Put any tag combinations you never want to see here. Each combination should go on a separate line. View help.".html_safe, :input_html => {:size => "40x5"} %>
    @@ -54,7 +54,7 @@ A list of tags that you use often. They will appear when using the list of Related Tags.
    - <%= f.input :custom_style, :label => "Custom CSS style".html_safe, :hint => "Style to apply to the whole site." %> + <%= f.input :custom_style, :label => "Custom CSS style".html_safe, :hint => "Style to apply to the whole site.", :input_html => {:size => "40x5"} %>
    From f98f6dafbb018fbdb3169c8b096bcee1ca8f3a43 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Sun, 11 May 2014 00:01:52 -0700 Subject: [PATCH 14/35] lower threshold for iqdb matches --- app/logical/iqdb/responses/collection.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/logical/iqdb/responses/collection.rb b/app/logical/iqdb/responses/collection.rb index a5d3fd34d..2fc02f22d 100644 --- a/app/logical/iqdb/responses/collection.rb +++ b/app/logical/iqdb/responses/collection.rb @@ -12,7 +12,7 @@ module Iqdb end def matches - @matches ||= responses.select {|x| x.is_a?(Iqdb::Responses::Response_200) && x.score >= 90} + @matches ||= responses.select {|x| x.is_a?(Iqdb::Responses::Response_200) && x.score >= 80} end def errored? From 363a748ec691720776247e772f8161d309f656f0 Mon Sep 17 00:00:00 2001 From: Toks Date: Sun, 11 May 2014 11:08:45 -0400 Subject: [PATCH 15/35] Remove enter-to-autocomplete see http://sonohara.donmai.us/forum_topics/10558 --- .../javascripts/jquery-ui-autocomplete-custom.js | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/vendor/assets/javascripts/jquery-ui-autocomplete-custom.js b/vendor/assets/javascripts/jquery-ui-autocomplete-custom.js index bc0163253..b6c3a1b6b 100644 --- a/vendor/assets/javascripts/jquery-ui-autocomplete-custom.js +++ b/vendor/assets/javascripts/jquery-ui-autocomplete-custom.js @@ -116,17 +116,6 @@ $.widget( "ui.autocomplete", { suppressKeyPress = true; this._keyEvent( "next", event ); break; - case keyCode.ENTER: - case keyCode.NUMPAD_ENTER: - // when menu is open and has focus - if ( this.menu.active ) { - // #6055 - Opera still allows the keypress to occur - // which causes forms to submit - suppressKeyPress = true; - event.preventDefault(); - this.menu.select( event ); - } - break; case keyCode.TAB: if ( this.menu.active ) { event.preventDefault(); From b3bab586d3815adac536a1d659ba921deffe2506 Mon Sep 17 00:00:00 2001 From: Toks Date: Wed, 14 May 2014 22:31:05 -0400 Subject: [PATCH 16/35] fix javascript error --- app/assets/javascripts/autocomplete.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/autocomplete.js b/app/assets/javascripts/autocomplete.js index 739c7cb41..1988c53af 100644 --- a/app/assets/javascripts/autocomplete.js +++ b/app/assets/javascripts/autocomplete.js @@ -23,7 +23,7 @@ if (this.enable_local_storage) { var now = new Date().getTime(); $.each($.localStorage.keys(), function(i, key) { - var obj = $.localStorage.get(key); + var obj = localStorage.getItem(key); if (obj && obj.expires) { var expiry = Date.parse(obj.expires); if (expiry < now) { From 5f707689626908e6c399c4063edfacbd047201e1 Mon Sep 17 00:00:00 2001 From: Toks Date: Thu, 15 May 2014 23:35:57 -0400 Subject: [PATCH 17/35] #1866: Support HTTPS urls --- app/logical/downloads/strategies/deviant_art.rb | 6 +++--- app/logical/downloads/strategies/twitpic.rb | 6 +++--- app/logical/sources/strategies/deviant_art.rb | 4 ++-- app/models/post.rb | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/logical/downloads/strategies/deviant_art.rb b/app/logical/downloads/strategies/deviant_art.rb index 45e939faf..32ebe028c 100644 --- a/app/logical/downloads/strategies/deviant_art.rb +++ b/app/logical/downloads/strategies/deviant_art.rb @@ -12,7 +12,7 @@ module Downloads protected def rewrite_html_pages(url, headers) - if url =~ %r{^http://.+?\.deviantart\.com/art/} + if url =~ %r{^https?://.+?\.deviantart\.com/art/} source = ::Sources::Strategies::DeviantArt.new(url) source.get return [source.image_url, headers] @@ -22,10 +22,10 @@ module Downloads end def rewrite_thumbnails(url, headers) - if url =~ %r{^(http://.+?\.deviantart\.net/.+?/)200H/} + if url =~ %r{^(https?://.+?\.deviantart\.net/.+?/)200H/} match = $1 url.sub!(match + "200H/", match) - elsif url =~ %r{^(http://.+?\.deviantart\.net/.+?/)PRE/} + elsif url =~ %r{^(https?://.+?\.deviantart\.net/.+?/)PRE/} match = $1 url.sub!(match + "PRE/", match) end diff --git a/app/logical/downloads/strategies/twitpic.rb b/app/logical/downloads/strategies/twitpic.rb index 4854da9cd..0939af09c 100644 --- a/app/logical/downloads/strategies/twitpic.rb +++ b/app/logical/downloads/strategies/twitpic.rb @@ -2,7 +2,7 @@ module Downloads module Strategies class Twitpic < Base def rewrite(url, headers) - if url =~ %r{http://twitpic\.com} || url =~ %r{^http://d3j5vwomefv46c\.cloudfront\.net} + if url =~ %r{https?://twitpic\.com} || url =~ %r{^https?://d3j5vwomefv46c\.cloudfront\.net} url, headers = rewrite_html_pages(url, headers) url, headers = rewrite_thumbnails(url, headers) end @@ -14,7 +14,7 @@ module Downloads def rewrite_html_pages(url, headers) # example: http://twitpic.com/cpprns - if url =~ %r{http://twitpic\.com/([a-z0-9]+)$} + if url =~ %r{https?://twitpic\.com/([a-z0-9]+)$} id = $1 url = "http://twitpic.com/show/full/#{id}" return [url, headers] @@ -24,7 +24,7 @@ module Downloads end def rewrite_thumbnails(url, headers) - if url =~ %r{^http://d3j5vwomefv46c\.cloudfront\.net/photos/thumb/(\d+\..+)$} + if url =~ %r{^https?://d3j5vwomefv46c\.cloudfront\.net/photos/thumb/(\d+\..+)$} match = $1 url.sub!("/thumb/" + match, "/large/" + match) end diff --git a/app/logical/sources/strategies/deviant_art.rb b/app/logical/sources/strategies/deviant_art.rb index cd7193a65..af2297898 100644 --- a/app/logical/sources/strategies/deviant_art.rb +++ b/app/logical/sources/strategies/deviant_art.rb @@ -58,9 +58,9 @@ module Sources def normalized_url @normalized_url ||= begin - if url =~ %r{\Ahttp://(?:fc|th)\d{2}\.deviantart\.net/.+/[a-z0-9_]*_by_[a-z0-9_]+-d([a-z0-9]+)\.}i + if url =~ %r{\Ahttps?://(?:fc|th)\d{2}\.deviantart\.net/.+/[a-z0-9_]*_by_[a-z0-9_]+-d([a-z0-9]+)\.}i "http://fav.me/d#{$1}" - elsif url =~ %r{\Ahttp://(?:fc|th)\d{2}\.deviantart\.net/.+/[a-f0-9]+-d([a-z0-9]+)\.}i + elsif url =~ %r{\Ahttps?://(?:fc|th)\d{2}\.deviantart\.net/.+/[a-f0-9]+-d([a-z0-9]+)\.}i "http://fav.me/d#{$1}" elsif url =~ %r{deviantart\.com/art/} url diff --git a/app/models/post.rb b/app/models/post.rb index 41b29cdbe..a71e45542 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -279,15 +279,15 @@ class Post < ActiveRecord::Base when %r{\Ahttp://lohas\.nicoseiga\.jp/priv/(\d+)\?e=\d+&h=[a-f0-9]+}i, %r{\Ahttp://lohas\.nicoseiga\.jp/priv/[a-f0-9]+/\d+/(\d+)}i "http://seiga.nicovideo.jp/seiga/im#{$1}" - when %r{\Ahttp://d3j5vwomefv46c\.cloudfront\.net/photos/large/(\d+)\.}i + when %r{\Ahttps?://d3j5vwomefv46c\.cloudfront\.net/photos/large/(\d+)\.}i base_10_id = $1.to_i base_36_id = base_10_id.to_s(36) "http://twitpic.com/#{base_36_id}" - when %r{\Ahttp://(?:fc|th)\d{2}\.deviantart\.net/.+/[a-z0-9_]*_by_([a-z0-9_]+)-d([a-z0-9]+)\.}i + when %r{\Ahttps?://(?:fc|th)\d{2}\.deviantart\.net/.+/[a-z0-9_]*_by_([a-z0-9_]+)-d([a-z0-9]+)\.}i "http://#{$1}.deviantart.com/gallery/#/d#{$2}" - when %r{\Ahttp://(?:fc|th)\d{2}\.deviantart\.net/.+/[a-f0-9]+-d([a-z0-9]+)\.}i + when %r{\Ahttps?://(?:fc|th)\d{2}\.deviantart\.net/.+/[a-f0-9]+-d([a-z0-9]+)\.}i "http://deviantart.com/gallery/#/d#{$1}" when %r{\Ahttp://www\.karabako\.net/images(?:ub)?/karabako_(\d+)(?:_\d+)?\.}i @@ -296,7 +296,7 @@ class Post < ActiveRecord::Base when %r{\Ahttp://p\.twpl\.jp/show/orig/([a-z0-9]+)}i "http://p.twipple.jp/#{$1}" - when %r{\Ahttp://pictures\.hentai-foundry\.com//[^/]/([^/]+)/(\d+)\.}i + when %r{\Ahttps?://pictures\.hentai-foundry\.com//[^/]/([^/]+)/(\d+)\.}i "http://www.hentai-foundry.com/pictures/user/#{$1}/#{$2}" else From 56342336fed37949b8f3afb3167495953a3273c0 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 15 May 2014 20:31:23 -0700 Subject: [PATCH 18/35] new version --- config/danbooru_default_config.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/danbooru_default_config.rb b/config/danbooru_default_config.rb index dcd1adbe4..41d765a13 100644 --- a/config/danbooru_default_config.rb +++ b/config/danbooru_default_config.rb @@ -4,7 +4,7 @@ module Danbooru class Configuration # The version of this Danbooru. def version - "2.49.0" + "2.50.0" end # The name of this Danbooru. From dd48ceffd17acd97769f4236d24cc5a8899a3d04 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 15 May 2014 21:46:01 -0700 Subject: [PATCH 19/35] remove intelligent autocomplete expiry --- app/assets/javascripts/autocomplete.js | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/app/assets/javascripts/autocomplete.js b/app/assets/javascripts/autocomplete.js index 1988c53af..fa5b57133 100644 --- a/app/assets/javascripts/autocomplete.js +++ b/app/assets/javascripts/autocomplete.js @@ -21,17 +21,6 @@ Danbooru.Autocomplete.prune_local_storage = function() { if (this.enable_local_storage) { - var now = new Date().getTime(); - $.each($.localStorage.keys(), function(i, key) { - var obj = localStorage.getItem(key); - if (obj && obj.expires) { - var expiry = Date.parse(obj.expires); - if (expiry < now) { - $.localStorage.remove(key); - } - } - }); - if ($.localStorage.keys().length > 4000) { $.localStorage.removeAll(); } @@ -178,12 +167,8 @@ if (this.enable_local_storage) { var cached = $.localStorage.get(key); if (cached) { - if (cached.expires < new Date()) { - $.localStorage.remove(key); - } else { - resp(cached.value); - return; - } + resp(cached.value); + return; } } From f2e2ae35b9a12537da36a22aeee72fd1a3c077d5 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 15 May 2014 22:12:01 -0700 Subject: [PATCH 20/35] new version --- config/danbooru_default_config.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/danbooru_default_config.rb b/config/danbooru_default_config.rb index 41d765a13..e3cfd8c67 100644 --- a/config/danbooru_default_config.rb +++ b/config/danbooru_default_config.rb @@ -4,7 +4,7 @@ module Danbooru class Configuration # The version of this Danbooru. def version - "2.50.0" + "2.50.1" end # The name of this Danbooru. From a66d43292516317b7ff9d4ee0c0ef8fdb0f202f4 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 15 May 2014 22:14:08 -0700 Subject: [PATCH 21/35] fixes #2155 --- app/controllers/iqdb_queries_controller.rb | 1 + app/views/iqdb_queries/create_by_url.html.erb | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/iqdb_queries_controller.rb b/app/controllers/iqdb_queries_controller.rb index de0628976..4fa85fcfe 100644 --- a/app/controllers/iqdb_queries_controller.rb +++ b/app/controllers/iqdb_queries_controller.rb @@ -19,6 +19,7 @@ protected @download = Iqdb::Download.new(params[:url]) @download.download_from_source @download.find_similar + @results = @download.matches render :layout => false, :action => "create_by_url" end diff --git a/app/views/iqdb_queries/create_by_url.html.erb b/app/views/iqdb_queries/create_by_url.html.erb index 5c3d96a41..f66fb5b58 100644 --- a/app/views/iqdb_queries/create_by_url.html.erb +++ b/app/views/iqdb_queries/create_by_url.html.erb @@ -1,6 +1,6 @@ -<% if @download.any? %> +<% if @results.any? %>

    Similar

    - <% @download.each do |match| %> + <% @results.each do |match| %> <%= PostPresenter.preview(Post.find(match.post_id)) %> <% end %> <% else %> From 06fe608bd0458cf2bc5d0b32ddcd954d88f93bcc Mon Sep 17 00:00:00 2001 From: Toks Date: Fri, 16 May 2014 20:48:40 -0400 Subject: [PATCH 22/35] fixes #2157 --- app/models/artist.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/models/artist.rb b/app/models/artist.rb index 3f890a95b..60405843e 100644 --- a/app/models/artist.rb +++ b/app/models/artist.rb @@ -123,6 +123,7 @@ class Artist < ActiveRecord::Base def merge_version prev = versions.last prev.update_attributes( + :name => name, :url_string => url_string, :is_active => is_active, :is_banned => is_banned, From c2bc6a346881220c622a3ad19695bf779208e509 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Sat, 17 May 2014 01:55:36 -0700 Subject: [PATCH 23/35] rename r-18 to r_18 --- app/views/posts/partials/show/_share.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/posts/partials/show/_share.html.erb b/app/views/posts/partials/show/_share.html.erb index e5fe91bbd..d52e7b7eb 100644 --- a/app/views/posts/partials/show/_share.html.erb +++ b/app/views/posts/partials/show/_share.html.erb @@ -11,7 +11,7 @@ var addthis_config = {"data_track_addressbar": false}; var addthis_share = { "url":"<%= j post_path(post, :only_path => false, :host => Danbooru.config.hostname) %>", - "title": "<%= '#r-18 ' unless post.rating == 's' %><%= j post.presenter.humanized_essential_tag_string %>" + "title": "<%= '#r_18 ' unless post.rating == 's' %><%= j post.presenter.humanized_essential_tag_string %>" }; From 45c97bb0c93cb3f7b2cdb80bbba5ea2da18cd1b6 Mon Sep 17 00:00:00 2001 From: Toks Date: Sat, 17 May 2014 13:00:05 -0400 Subject: [PATCH 24/35] Update keyboard shortcut page related #2158 --- app/views/static/keyboard_shortcuts.html.erb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/static/keyboard_shortcuts.html.erb b/app/views/static/keyboard_shortcuts.html.erb index 8132ab277..1c8ec3c64 100644 --- a/app/views/static/keyboard_shortcuts.html.erb +++ b/app/views/static/keyboard_shortcuts.html.erb @@ -19,6 +19,7 @@
  • n New note
  • e Edit tags
  • shift+e Edit tags in dialog window
  • +
  • enter Submit tag changes
  • q Search
  • w Scroll up
  • s Scroll down
  • From b194935bdeb4950180926b93817e3cf975659e82 Mon Sep 17 00:00:00 2001 From: Toks Date: Sat, 17 May 2014 13:10:22 -0400 Subject: [PATCH 25/35] #1866: Support fc2 url redirecting --- app/models/post.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/models/post.rb b/app/models/post.rb index a71e45542..e1b0a3165 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -299,6 +299,19 @@ class Post < ActiveRecord::Base when %r{\Ahttps?://pictures\.hentai-foundry\.com//[^/]/([^/]+)/(\d+)\.}i "http://www.hentai-foundry.com/pictures/user/#{$1}/#{$2}" + when %r{\Ahttp://blog-imgs-\d+(?:-origin)?\.fc2\.com/[^/]/[^/]/[^/]/([^/]+)/([^.]+\.[^?]+)}i + username = $1 + filename = $2 + "http://#{username}.blog.fc2.com/img/#{filename}/" + + when %r{\Ahttp://diary(\d)?\.fc2\.com/user/([^/]+)/img/(\d+)_(\d+)/(\d+)\.}i + server_id = $1 + username = $2 + year = $3 + month = $4 + day = $5 + "http://diary#{server_id}.fc2.com/cgi-sys/ed.cgi/#{username}?Y=#{year}&M=#{month}&D=#{day}" + else source end From 5f29ef55573b5c7f4e4d601bcec5ee0a640a7895 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Wed, 21 May 2014 18:02:06 -0700 Subject: [PATCH 26/35] fixes #2130 --- app/assets/javascripts/posts.js | 16 ++-------------- app/views/iqdb_queries/create_by_post.html.erb | 9 --------- app/views/iqdb_queries/create_by_post.js.erb | 10 ++++++++++ app/views/posts/partials/show/_edit.html.erb | 4 ++++ 4 files changed, 16 insertions(+), 23 deletions(-) delete mode 100644 app/views/iqdb_queries/create_by_post.html.erb create mode 100644 app/views/iqdb_queries/create_by_post.js.erb diff --git a/app/assets/javascripts/posts.js b/app/assets/javascripts/posts.js index e9d258ba8..69040e109 100644 --- a/app/assets/javascripts/posts.js +++ b/app/assets/javascripts/posts.js @@ -135,20 +135,8 @@ Danbooru.Post.initialize_similar = function() { $("#similar-button").click(function(e) { - var old_source_name = $("#post_source").attr("name"); - var old_action = $("#form").attr("action"); - - $("#post_source").attr("name", "url"); - $("#form").attr("target", "_blank"); - $("#form").attr("action", "http://danbooru.iqdb.org/"); - - $("#form").trigger("submit"); - - $("#post_source").attr("name", old_source_name); - $("#form").attr("target", ""); - $("#form").attr("action", old_action); - - e.preventDefault(); + $.post("/iqdb_queries", {"url": $("#post_source").val()}).done(function(html) {$("#iqdb-similar").html(html).show()}); + e.preventDefault(); }); } diff --git a/app/views/iqdb_queries/create_by_post.html.erb b/app/views/iqdb_queries/create_by_post.html.erb deleted file mode 100644 index f66fb5b58..000000000 --- a/app/views/iqdb_queries/create_by_post.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<% if @results.any? %> -

    Similar

    - <% @results.each do |match| %> - <%= PostPresenter.preview(Post.find(match.post_id)) %> - <% end %> -<% else %> -

    Similar

    -

    No matches found

    -<% end %> diff --git a/app/views/iqdb_queries/create_by_post.js.erb b/app/views/iqdb_queries/create_by_post.js.erb new file mode 100644 index 000000000..01a1dd2e2 --- /dev/null +++ b/app/views/iqdb_queries/create_by_post.js.erb @@ -0,0 +1,10 @@ +var html = ''; +<% if @results.any? %> + <% @results.each do |match| %> + html += '<%= j PostPresenter.preview(Post.find(match.post_id)) %>'; + <% end %> +<% else %> + html += '

    No matches found

    '; +<% end %> + +$("
    ").html(html).dialog({title: "Similar Posts", modal: true, width: "600px"}); diff --git a/app/views/posts/partials/show/_edit.html.erb b/app/views/posts/partials/show/_edit.html.erb index 59386e619..906cfe82b 100644 --- a/app/views/posts/partials/show/_edit.html.erb +++ b/app/views/posts/partials/show/_edit.html.erb @@ -62,6 +62,10 @@ <%= button_tag "Artist", :id => "find-artist-button", :type => "button" %>
    + <% if Danbooru.config.iqdb_hostname_and_port %> + + <% end %> +
    <%= f.label :tag_string, "Tags" %> From 1690365bdc91899a2c6655145543552556c35a94 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 22 May 2014 14:54:19 -0700 Subject: [PATCH 27/35] fixes #2162 --- config/initializers/core_extensions.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/core_extensions.rb b/config/initializers/core_extensions.rb index f89f4e18e..fcd3d4b0e 100644 --- a/config/initializers/core_extensions.rb +++ b/config/initializers/core_extensions.rb @@ -10,7 +10,7 @@ module Danbooru end def to_escaped_for_tsquery - "'#{gsub(/'/, '\0\0').gsub(/\\/, '\0\0\0\0')}'" + "'#{gsub(/\0/, '').gsub(/'/, '\0\0').gsub(/\\/, '\0\0\0\0')}'" end def to_escaped_js From 8ee2dd68e2acb285e778ea2ca80bc6c723002cd1 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 22 May 2014 17:22:19 -0700 Subject: [PATCH 28/35] potential fix for #2136 --- app/logical/iqdb/server.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/logical/iqdb/server.rb b/app/logical/iqdb/server.rb index 787cbbf67..e75071fb7 100644 --- a/app/logical/iqdb/server.rb +++ b/app/logical/iqdb/server.rb @@ -49,7 +49,7 @@ module Iqdb end end - def query(results, filename, flags = FLAG_DISCARD_COMMON_COEFFS) + def query(results, filename, flags = 0) request do socket.puts "query 0 #{flags} #{results} #{filename}" socket.puts "done" From 82f771834e30d9f581a04de73401c544b31d0f81 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 22 May 2014 17:42:34 -0700 Subject: [PATCH 29/35] fixes #1367 --- app/logical/api_cache_generator.rb | 4 ++-- config/danbooru_default_config.rb | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/logical/api_cache_generator.rb b/app/logical/api_cache_generator.rb index e0aa15f1e..d32090ca4 100644 --- a/app/logical/api_cache_generator.rb +++ b/app/logical/api_cache_generator.rb @@ -1,6 +1,6 @@ class ApiCacheGenerator def generate_tag_cache - path = File.expand_path(File.join(Rails.root, "..", "shared")) + path = Danbooru.config.shared_dir_path FileUtils.mkdir_p("#{path}/system/cache") File.open("#{path}/system/cache/tags.json", "w") do |f| f.print("[") @@ -26,6 +26,6 @@ class ApiCacheGenerator gz.close end RemoteFileManager.new("#{path}/system/cache/tags.json").distribute - RemoteFileManager.new("#{path}/shared/system/cache/tags.json.gz").distribute + RemoteFileManager.new("#{path}/system/cache/tags.json.gz").distribute end end diff --git a/config/danbooru_default_config.rb b/config/danbooru_default_config.rb index e3cfd8c67..4cebafd37 100644 --- a/config/danbooru_default_config.rb +++ b/config/danbooru_default_config.rb @@ -310,5 +310,9 @@ module Danbooru # /var/www/danbooru2/shared/iqdb.db nil end + + def shared_dir_path + "/var/www/danbooru2/shared" + end end end From 4b7941cc95e60628fc223a189b8110a7ad3c2ce4 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 22 May 2014 17:50:41 -0700 Subject: [PATCH 30/35] fixes #2163 --- app/assets/javascripts/shortcuts.js | 4 ++++ app/views/static/keyboard_shortcuts.html.erb | 1 + 2 files changed, 5 insertions(+) diff --git a/app/assets/javascripts/shortcuts.js b/app/assets/javascripts/shortcuts.js index d841712b4..a1fe66e5a 100644 --- a/app/assets/javascripts/shortcuts.js +++ b/app/assets/javascripts/shortcuts.js @@ -16,6 +16,10 @@ }); if ($("#image").length) { + $(document).bind("keypress", "shift+o", function(e) { + Danbooru.Post.approve(Danbooru.meta("post-id")); + }); + $(document).bind("keypress", "shift+e", function(e) { if (!$("#edit-dialog").length) { $("#edit").show(); diff --git a/app/views/static/keyboard_shortcuts.html.erb b/app/views/static/keyboard_shortcuts.html.erb index 1c8ec3c64..284a6825f 100644 --- a/app/views/static/keyboard_shortcuts.html.erb +++ b/app/views/static/keyboard_shortcuts.html.erb @@ -19,6 +19,7 @@
  • n New note
  • e Edit tags
  • shift+e Edit tags in dialog window
  • +
  • shift+o Approve post
  • enter Submit tag changes
  • q Search
  • w Scroll up
  • From 3049f8b57cb55b08326f86aa54d93ca3cca1a03c Mon Sep 17 00:00:00 2001 From: r888888888 Date: Thu, 22 May 2014 17:51:43 -0700 Subject: [PATCH 31/35] fixes #2161 --- app/controllers/posts_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index bb9bbd01d..5fa965fd1 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -116,6 +116,7 @@ class PostsController < ApplicationController def random count = Post.fast_count(params[:tags]) @post = Post.tag_match(params[:tags]).offset(rand(count)).first + raise ActiveRecord::RecordNotFound if @post.nil? redirect_to post_path(@post, :tags => params[:tags]) end From 78387fa16868192330b6e88bf9b35cc65f012f73 Mon Sep 17 00:00:00 2001 From: Toks Date: Fri, 23 May 2014 16:33:55 -0400 Subject: [PATCH 32/35] #2141 hide index in api --- app/models/wiki_page.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index 8a60ded8a..35d853f65 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -75,7 +75,7 @@ class WikiPage < ActiveRecord::Base module ApiMethods def hidden_attributes - super + [:body_index] + super + [:body_index, :other_names_index] end def serializable_hash(options = {}) From 631e0dfbb374b409c3119d9318ed54d46deea1df Mon Sep 17 00:00:00 2001 From: Toks Date: Fri, 23 May 2014 16:47:29 -0400 Subject: [PATCH 33/35] #2141 display other names in excerpt --- app/assets/stylesheets/specific/wiki_pages.css.scss | 2 +- app/views/posts/partials/index/_excerpt.html.erb | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/specific/wiki_pages.css.scss b/app/assets/stylesheets/specific/wiki_pages.css.scss index bb0e3ad8f..cd5b6c5eb 100644 --- a/app/assets/stylesheets/specific/wiki_pages.css.scss +++ b/app/assets/stylesheets/specific/wiki_pages.css.scss @@ -1,4 +1,4 @@ -div#c-wiki-pages { +div#c-wiki-pages, div#excerpt { span.version { color: #AAA; } diff --git a/app/views/posts/partials/index/_excerpt.html.erb b/app/views/posts/partials/index/_excerpt.html.erb index 2cb93b36c..0ec1b73c9 100644 --- a/app/views/posts/partials/index/_excerpt.html.erb +++ b/app/views/posts/partials/index/_excerpt.html.erb @@ -41,6 +41,10 @@
    <% elsif post_set.has_wiki? %>
    + <% if post_set.wiki_page.other_names.present? %> +

    <%= wiki_page_other_names_list(post_set.wiki_page) %>

    + <% end %> + <%= format_text(post_set.wiki_page.presenter.excerpt) %> <% if post_set.wiki_page.artist %> From 10e03114474b2fb1a04c919596272bd153745341 Mon Sep 17 00:00:00 2001 From: Toks Date: Sat, 24 May 2014 12:58:14 -0400 Subject: [PATCH 34/35] #2141 normalize other names --- app/models/wiki_page.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index 35d853f65..c022d0eed 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -1,5 +1,6 @@ class WikiPage < ActiveRecord::Base before_save :normalize_title + before_save :normalize_other_names before_validation :initialize_creator, :on => :create before_validation :initialize_updater after_save :create_version @@ -135,6 +136,12 @@ class WikiPage < ActiveRecord::Base self.title = title.mb_chars.downcase.tr(" ", "_") end + def normalize_other_names + normalized_other_names = other_names.to_s.gsub(/\u3000/, " ").scan(/\S+/) + normalized_other_names = normalized_other_names.map{|name| name.downcase} + self.other_names = normalized_other_names.uniq.join(" ") + end + def creator_name User.id_to_name(creator_id).tr("_", " ") end From aebeffb888ffbb9c6c7c6ba1499bbec40c69185c Mon Sep 17 00:00:00 2001 From: Toks Date: Tue, 27 May 2014 16:13:24 -0400 Subject: [PATCH 35/35] #2141 add link to help page --- app/views/wiki_pages/_form.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/wiki_pages/_form.html.erb b/app/views/wiki_pages/_form.html.erb index 19b1d06c9..d074d358d 100644 --- a/app/views/wiki_pages/_form.html.erb +++ b/app/views/wiki_pages/_form.html.erb @@ -6,7 +6,7 @@ <%= f.input :title, :as => :string %> <% end %> - <%= f.input :other_names, :as => :text, :hint => "Names used for this tag on other sites such as Pixiv. Separate with spaces." %> + <%= f.input :other_names, :as => :text, :label => "Other names (view help)".html_safe, :hint => "Names used for this tag on other sites such as Pixiv. Separate with spaces." %> <%= dtext_field "wiki_page", "body" %>