]> git.cworth.org Git - sup/blobdiff - lib/sup/modes/label-search-results-mode.rb
Allow thread index view to sort oldest first
[sup] / lib / sup / modes / label-search-results-mode.rb
index 34a094325beccab1bf3552913c8246efc12285a9..6899104c46d21b1b6d90e43e8d1ab467d15edf8c 100644 (file)
@@ -1,30 +1,38 @@
 module Redwood
 
 class LabelSearchResultsMode < ThreadIndexMode
+  def initialize labels, newest_first
+    @labels = labels
+    opts = { :labels => @labels }
+    opts[:load_deleted] = true if labels.include? :deleted
+    opts[:load_spam] = true if labels.include? :spam
+    super [], opts
+    @newest_first = newest_first
+  end
+
   register_keymap do |k|
-    k.add :load_more_threads, "Load #{LOAD_MORE_THREAD_NUM} more threads", 'M'
+    k.add :refine_search, "Refine search", '|'
   end
 
-  def initialize labels
-    @labels = labels
-    super
+  def refine_search
+    label_query = @labels.size > 1 ? "(#{@labels.join('||')})" : @labels.first
+    query = BufferManager.ask :search, "refine query: ", "+label:#{label_query} "
+    return unless query && query !~ /^\s*$/
+    SearchResultsMode.spawn_from_query query, @newest_first
   end
 
-  def is_relevant? m; @labels.all? { |l| m.has_label? l }; end
+  def is_relevant? m; @labels.all? { |l| m.has_label? l } end
 
-  def load_more_threads opts={}
-    n = opts[:num] || ThreadIndexMode::LOAD_MORE_THREAD_NUM
-    load_n_threads_background n, :labels => @labels,
-                                 :load_killed => true,
-                                 :load_spam => false,
-                                 :when_done =>(lambda do |num|
-      opts[:when_done].call if opts[:when_done]
-      if num > 0
-        BufferManager.flash "Found #{num} threads"
-      else
-        BufferManager.flash "No matches"
-      end
-    end)
+  def self.spawn_nicely label
+    label = LabelManager.label_for(label) unless label.is_a?(Symbol)
+    case label
+    when nil
+    when :inbox
+      BufferManager.raise_to_front InboxMode.instance.buffer
+    else
+      b, new = BufferManager.spawn_unless_exists("All threads with label '#{label}'") { LabelSearchResultsMode.new [label], true }
+      b.mode.load_threads :num => b.content_height if new
+    end
   end
 end