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