def lines; @text.length; end
def [] i; @text[i]; end
+ def contains_thread? t; !@lines[t].nil?; end
def reload
drop_all_threads
def select t=nil
t ||= @threads[curpos]
- t = t.clone # XXXX highly experimental
+ ## this isn't working entirely. TODO:figure out why
+ # t = t.clone # required so that messages added later on don't completely
+ # screw everything up
## TODO: don't regen text completely
Redwood::reporting_thread do
threads.each { |t| select t }
end
- def handle_starred_update m
+ def handle_starred_update sender, m
return unless(t = @ts.thread_for m)
update_text_for_line @lines[t]
+ BufferManager.draw_screen
end
- def handle_read_update m
- return unless(t = @ts.thread_for m)
+ def handle_read_update sender, t
+ return unless @lines[t]
update_text_for_line @lines[t]
+ BufferManager.draw_screen
end
+ def handle_archived_update *a; handle_read_update *a; end
+
## overwrite me!
def is_relevant? m; false; end
- def handle_add_update m
+ def handle_add_update sender, m
if is_relevant?(m) || @ts.is_relevant?(m)
@ts.load_thread_for_message m
update
end
end
- def handle_delete_update mid
+ def handle_delete_update sender, mid
if @ts.contains_id? mid
@ts.remove mid
update
+ BufferManager.draw_screen
end
end
def update
## let's see you do THIS in python
- @threads = @ts.threads.select { |t| !@hidden_threads[t] }.sort_by { |t| t.date }.reverse
+ @threads = @ts.threads.select { |t| !@hidden_threads[t] && !t.has_label?(:killed) }.sort_by { |t| t.date }.reverse
@size_width = (@threads.map { |t| t.size }.max || 0).num_digits
regen_text
end
end
end
- ## i always hate people who name things like this...
- def actually_toggle_starred t=@threads[curpos]
+ def actually_toggle_starred t
if t.has_label? :starred # if ANY message has a star
t.remove_label :starred # remove from all
else
end
def toggle_starred
- actually_toggle_starred
+ t = @threads[curpos] or return
+ actually_toggle_starred t
update_text_for_line curpos
cursor_down
end
regen_text
end
+ def actually_toggle_archived t
+ if t.has_label? :inbox
+ t.remove_label :inbox
+ UpdateManager.relay self, :unarchived, t
+ else
+ t.add_label :inbox
+ UpdateManager.relay self, :archived, t
+ end
+ end
+
def toggle_archived
t = @threads[curpos] or return
- t.toggle_label :inbox
+ actually_toggle_archived t
update_text_for_line curpos
- cursor_down
end
def multi_toggle_archived threads
- threads.each { |t| t.toggle_label :inbox }
+ threads.each { |t| actually_toggle_archived t }
regen_text
end
thread = @threads[curpos]
speciall = (@hidden_labels + LabelManager::RESERVED_LABELS).uniq
keepl, modifyl = thread.labels.partition { |t| speciall.member? t }
- label_string = modifyl.join(" ") + " "
+ label_string = modifyl.join(" ")
+ label_string += " " unless label_string.empty?
answer = BufferManager.ask :edit_labels, "edit labels: ", label_string
return unless answer
t = @threads[curpos] or return
m = t.latest_message
return if m.nil? # probably won't happen
+ m.load_from_source!
mode = ForwardMode.new m
BufferManager.spawn "Forward of #{m.subj}", mode
mode.edit
def load_n_threads n=LOAD_MORE_THREAD_NUM, opts={}
@mbid = BufferManager.say "Searching for threads..."
orig_size = @ts.size
- last_update = Time.now
+ last_update = Time.now - 9999 # oh yeah
@ts.load_n_threads(@ts.size + n, opts) do |i|
BufferManager.say "Loaded #{i} threads...", @mbid
if (Time.now - last_update) >= 0.25
update
end
- def remove_label_and_hide_thread t, label
- t.remove_label label
- hide_thread t
- end
-
def hide_thread t
raise "already hidden" if @hidden_threads[t]
@hidden_threads[t] = true