bin/sup-import in sup-0.0.4 vs bin/sup-import in sup-0.0.5

- old
+ new

@@ -47,10 +47,11 @@ --force-archive: regardless of the source "archive" flag, any new messages found will not appear in the inbox. --force-read: any messages found will not be marked as new. The following options can also be specified: + --verbose: print message ids as they're processed --the-usual: import new messages from all usual sources --rebuild: rebuild the index for the specified sources rather than just adding new messages. Useful if the sources have changed in any way *other* than new messages being added. @@ -60,10 +61,11 @@ --optimize: optimize the index after adding any new messages. --help: don't do anything, just show this message. EOS exit end +#' stupid ruby-mode ## for sources that require login information, prompt the user for ## that. also provide a list of previously-defined login info to ## choose from, if any. def get_login_info uri, sources @@ -103,10 +105,11 @@ force_read = ARGV.delete "--force-read" the_usual = ARGV.delete "--the-usual" rebuild = ARGV.delete "--rebuild" force_rebuild = ARGV.delete "--force-rebuild" optimize = ARGV.delete "--optimize" +verbose = ARGV.delete "--verbose" start_at = # ok really need to use optparse or something now if(i = ARGV.index("--start-at")) raise "start-at requires a numeric argument: #{ARGV[i + 1].inspect}" unless ARGV.length > (i + 1) && ARGV[i + 1] =~ /\d/ ARGV.delete_at i ARGV.delete_at(i).to_i # whoa! @@ -165,23 +168,24 @@ puts "loading from #{source}... " num = 0 start_offset = nil source.each do |offset, labels| start_offset ||= offset - labels -= [:inbox] if force_archive + labels -= [:inbox] if force_archive || archive labels -= [:unread] if force_read begin m = Redwood::Message.new :source => source, :source_info => offset, :labels => labels if found[m.id] puts "skipping duplicate message #{m.id}" next else found[m.id] = true end - m.remove_label :unread if m.status == "RO" unless force_read - puts "# message at #{offset}, labels: #{labels * ', '}" unless rebuild + m.remove_label :unread if m.source_marked_read? unless force_read + puts "# message at #{offset}, labels: #{labels * ', '}" if verbose unless rebuild + labels.each { |l| Redwood::LabelManager << l } if (rebuild || force_rebuild) && (docid, entry = index.load_entry_for_id(m.id)) && entry if force_rebuild || entry[:source_info].to_i != offset puts "replacing message #{m.id} labels #{entry[:label].inspect} (offset #{entry[:source_info]} => #{offset})" m.labels = entry[:label].split.map { |l| l.intern } @@ -193,12 +197,12 @@ rescue Redwood::MessageFormatError, Redwood::SourceError => e $stderr.puts "ignoring erroneous message at #{source}##{offset}: #{e.message}" end if num % 1000 == 0 && num > 0 elapsed = Time.now - start - pctdone = (offset.to_f - start_offset) / (source.total.to_f - start_offset) - remaining = (source.total.to_f - offset.to_f) * (elapsed.to_f / (offset.to_f - start_offset)) - puts "## #{num} (#{(pctdone * 100.0)}% done) read; #{elapsed.to_time_s} elapsed; est. #{remaining.to_time_s} remaining" + pctdone = source.pct_done + remaining = (100.0 - pctdone) * (elapsed.to_f / pctdone) + puts "## #{num} (#{pctdone}% done) read; #{elapsed.to_time_s} elapsed; est. #{remaining.to_time_s} remaining" end end puts "loaded #{num} messages" unless num == 0 end ensure