]> git.cworth.org Git - sup/blobdiff - lib/sup/mbox/loader.rb
bugfix: :sent label not being applied to sent messages
[sup] / lib / sup / mbox / loader.rb
index 831c71705ed11f8dab9a781c323ff2e5b2fd04d3..a11bf9541e6efed049754cf85442c6cdbd714c8b 100644 (file)
@@ -1,17 +1,20 @@
 require 'rmail'
 require 'uri'
+require 'set'
 
 module Redwood
 module MBox
 
 class Loader < Source
+  include SerializeLabelsNicely
   yaml_properties :uri, :cur_offset, :usual, :archived, :id, :labels
-  attr_accessor :labels
+
+  attr_reader :labels
 
   ## uri_or_fp is horrific. need to refactor.
-  def initialize uri_or_fp, start_offset=0, usual=true, archived=false, id=nil, labels=[]
+  def initialize uri_or_fp, start_offset=0, usual=true, archived=false, id=nil, labels=nil
     @mutex = Mutex.new
-    @labels = ((labels || []) - LabelManager::RESERVED_LABELS).uniq.freeze
+    @labels = Set.new((labels || []) - LabelManager::RESERVED_LABELS)
 
     case uri_or_fp
     when String
@@ -47,7 +50,7 @@ class Loader < Source
       raise OutOfSyncSourceError, "mbox file is smaller than last recorded message offset. Messages have probably been deleted by another client."
     end
   end
-    
+
   def start_offset; 0; end
   def end_offset; File.size @f; end
 
@@ -113,7 +116,7 @@ class Loader < Source
     need_blank = File.exists?(@filename) && !File.zero?(@filename)
     File.open(@filename, "a") do |f|
       f.puts if need_blank
-      f.puts "From #{from_email} #{date}"
+      f.puts "From #{from_email} #{date.utc}"
       yield f
     end
   end
@@ -168,7 +171,7 @@ class Loader < Source
     end
 
     self.cur_offset = next_offset
-    [returned_offset, (self.labels + [:unread]).uniq]
+    [returned_offset, (labels + [:unread])]
   end
 end