This fixes the "I changed a message from unread to read in one list (e.g. 'U') and now when I open the message from inbox it can't find it" bug.
Here is a version that is theoretically more efficient, though God help you if you have more than one location per message. commit ca5b02b8ff88412f92984d6b9176ff1876886cc6 Author: Edward Z. Yang <ezy...@mit.edu> Date: Tue Aug 21 15:19:11 2012 -0400 Sync and update other threads when Maildir sync-back changes location. Signed-off-by: Edward Z. Yang <ezy...@mit.edu> diff --git a/lib/sup/maildir.rb b/lib/sup/maildir.rb index 0c8c563..050cfaf 100644 --- a/lib/sup/maildir.rb +++ b/lib/sup/maildir.rb @@ -226,7 +226,7 @@ private new_base = (flags.include?("S")) ? "cur" : "new" md_base, md_ver, md_flags = maildir_data orig_path - return orig_path if md_flags == flags + return if md_flags == flags new_loc = File.join new_base, "#{md_base}:#{md_ver},#{flags}" orig_path = File.join @dir, orig_path diff --git a/lib/sup/message.rb b/lib/sup/message.rb index 0616f75..9af847d 100644 --- a/lib/sup/message.rb +++ b/lib/sup/message.rb @@ -286,11 +286,16 @@ EOS end def sync_back + r = nil @locations.each do |l| if l.valid? - l.sync_back @labels if $config[:sync_back_to_maildir] and l.source.is_a? Maildir + r ||= l.sync_back @labels if $config[:sync_back_to_maildir] and l.source.is_a? Maildir end end + if r + Index.sync_message self, true + UpdateManager.relay self, :updated, self + end end def merge_labels_from_locations merge_labels Excerpts from Edward Z. Yang's message of Tue Aug 21 15:19:56 -0400 2012: > From: "Edward Z. Yang" <ezy...@mit.edu> > > Signed-off-by: Edward Z. Yang <ezy...@mit.edu> > --- > lib/sup/maildir.rb | 2 +- > lib/sup/message.rb | 6 +++++- > 2 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/lib/sup/maildir.rb b/lib/sup/maildir.rb > index 0c8c563..050cfaf 100644 > --- a/lib/sup/maildir.rb > +++ b/lib/sup/maildir.rb > @@ -226,7 +226,7 @@ private > new_base = (flags.include?("S")) ? "cur" : "new" > md_base, md_ver, md_flags = maildir_data orig_path > > - return orig_path if md_flags == flags > + return if md_flags == flags > > new_loc = File.join new_base, "#{md_base}:#{md_ver},#{flags}" > orig_path = File.join @dir, orig_path > diff --git a/lib/sup/message.rb b/lib/sup/message.rb > index 0616f75..cd9226e 100644 > --- a/lib/sup/message.rb > +++ b/lib/sup/message.rb > @@ -288,7 +288,11 @@ EOS > def sync_back > @locations.each do |l| > if l.valid? > - l.sync_back @labels if $config[:sync_back_to_maildir] and > l.source.is_a? Maildir > + r = l.sync_back @labels if $config[:sync_back_to_maildir] and > l.source.is_a? Maildir > + if r > + Index.sync_message self, true > + UpdateManager.relay self, :updated, self > + end > end > end > end _______________________________________________ Sup-devel mailing list Sup-devel@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-devel