diff options
Diffstat (limited to 'core/plugin/search')
-rw-r--r-- | core/plugin/search/model/search.rb | 24 | ||||
-rw-r--r-- | core/plugin/search/search.rb | 10 |
2 files changed, 30 insertions, 4 deletions
diff --git a/core/plugin/search/model/search.rb b/core/plugin/search/model/search.rb new file mode 100644 index 00000000..3158bdd7 --- /dev/null +++ b/core/plugin/search/model/search.rb @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +module Plugin::Search + class Search < Retriever::Model + register :twitter_search, name: Plugin[:search]._('Twitter検索') + + field.string :query, required: true + + # https://twitter.com/search?q=%23superfuckjp + handle ->uri{ + uri.scheme == 'https' && + uri.host == 'twitter.com' && + uri.path == '/search' && + uri.query.split('&').any?{|r|r.split('=', 2).first == 'q'} + } do |uri| + _, query = uri.query.split('&').lazy.map{|r| r.split('=', 2) }.find{|k,v| k == 'q' } + new(query: CGI.unescape(query)) + end + + memoize def perma_link + URI.parse("https://twitter.com/search?q=#{CGI.escape(self.query)}") + end + end +end diff --git a/core/plugin/search/search.rb b/core/plugin/search/search.rb index afb912e6..a59ccb26 100644 --- a/core/plugin/search/search.rb +++ b/core/plugin/search/search.rb @@ -1,6 +1,11 @@ # -*- coding: utf-8 -*- +require_relative 'model/search' Plugin.create :search do + intent Plugin::Search::Search do |token| + Plugin.call(:search_start, token.model.query) + end + querybox = ::Gtk::Entry.new() querycont = ::Gtk::VBox.new(false, 0) searchbtn = ::Gtk::Button.new(_('検索')) @@ -37,7 +42,7 @@ Plugin.create :search do elm.sensitive = querybox.sensitive = true }.trap{ |e| error e - timeline(:search) << Message.new(message: _("検索中にエラーが発生しました (%{error})" % {error: e.to_s}), system: true) + timeline(:search) << Mikutter::System::Message.new(description: _("検索中にエラーが発生しました (%{error})" % {error: e.to_s})) elm.sensitive = querybox.sensitive = true } } savebtn.signal_connect('clicked'){ |elm| @@ -46,9 +51,6 @@ Plugin.create :search do Plugin.call(:saved_search_register, saved_search[:id], query, Service.primary) }.terminate(_("検索キーワード「%{query}」を保存できませんでした。あとで試してみてください" % {query: query})) } - Message::Entity.addlinkrule(:hashtags, /(?:#|#)[a-zA-Z0-9_]+/, :search_hashtag){ |segment| - Plugin.call(:search_start, '#' + segment[:url].match(/\A(?:#|#)?(.+)\Z/)[1]) - } end |