sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit f2f21ae1da74dfd3a079e66548be00f52b08cd57
parent ab3ab3b97a9ed517640b53332a9f0be76af94c99
Author: Whyme Lyu <callme5long@gmail.com>
Date:   Sun, 19 May 2013 23:55:31 +0800

Console#{add,remove}_labels delegates to LabelService

Diffstat:
M lib/sup/modes/console_mode.rb | 33 ++++++++++++++-------------------
1 file changed, 14 insertions(+), 19 deletions(-)
diff --git a/lib/sup/modes/console_mode.rb b/lib/sup/modes/console_mode.rb
@@ -1,10 +1,13 @@
 require 'pp'
 
+require "sup/service/label_service"
+
 module Redwood
 
 class Console
   def initialize mode
     @mode = mode
+    @label_service = LabelService.new
   end
 
   def query(query)
@@ -12,35 +15,27 @@ class Console
   end
 
   def add_labels(query, *labels)
-    count = 0
-    query(query).each do |m|
-      labels.each {|l| m.add_label l }
-      Index.update_message_state m
-      count += 1
-    end
-    Index.save_index
-    puts "Labels modified on #{count} messages."
-    puts "You might want to refresh open buffer with `@` key."
+    count = @label_service.add_labels(query, *labels)
+    print_buffer_dirty_msg count
   end
 
   def remove_labels(query, *labels)
-    count = 0
-    query(query).each do |m|
-      labels.each {|l| m.remove_label l }
-      Index.update_message_state m
-      count += 1
-    end
-    Index.save_index
-    puts "Labels modified on #{count} messages."
-    puts "You might want to refresh open buffer with `@` key."
+    count = @label_service.remove_labels(query, *labels)
+    print_buffer_dirty_msg count
+  end
+
+  def print_buffer_dirty_msg msg_count
+    puts "Scanned #{msg_count} messages."
+    puts "You might want to refresh open buffers with `@` key."
   end
+  private :print_buffer_dirty_msg
 
   def xapian; Index.instance.instance_variable_get :@xapian; end
 
   def loglevel; Redwood::Logger.level; end
   def set_loglevel(level); Redwood::Logger.level = level; end
 
-  def special_methods; methods - Object.methods end
+  def special_methods; public_methods - Object.methods end
 
   def puts x; @mode << "#{x.to_s.rstrip}\n" end
   def p x; puts x.inspect end