smarter reading contacts from archived messages
This commit is contained in:
parent
75c0059bb4
commit
f249147024
46
sup/hooks/extra-contact-addresses.rb
Executable file
46
sup/hooks/extra-contact-addresses.rb
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
||||||
|
|
||||||
|
require 'xapian'
|
||||||
|
require 'trollop'
|
||||||
|
require 'set'
|
||||||
|
|
||||||
|
unless defined? BASE_DIR
|
||||||
|
BASE_DIR = ENV["SUP_BASE"] || File.join(ENV["HOME"], ".sup")
|
||||||
|
end
|
||||||
|
|
||||||
|
xapian = Xapian::Database.new File.join(BASE_DIR, 'xapian')
|
||||||
|
version = xapian.get_metadata 'rescue-version'
|
||||||
|
version = '0' if version.empty?
|
||||||
|
|
||||||
|
contacts = Hash.new { |key| Set.new }
|
||||||
|
|
||||||
|
case version
|
||||||
|
when '0'
|
||||||
|
xapian.postlist('Kmail').each do |x|
|
||||||
|
entry = Marshal.load(xapian.document(x.docid).data)
|
||||||
|
([entry[:from]] + entry[:to] + entry[:cc] + entry[:bcc]).compact.each do |email, name|
|
||||||
|
next if email.nil?
|
||||||
|
name = name.strip.chomp("'").chomp('"').reverse
|
||||||
|
.chomp("'").chomp('"').reverse unless name.nil?
|
||||||
|
email.downcase!
|
||||||
|
if name.nil? or email.include? name
|
||||||
|
contacts[email] = Set.new unless contacts.has_key? email
|
||||||
|
else
|
||||||
|
contacts[email] << name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
abort "this sup-dump version doesn't understand your index"
|
||||||
|
end
|
||||||
|
|
||||||
|
contacts.map do |email, names|
|
||||||
|
if names.empty?
|
||||||
|
email
|
||||||
|
else
|
||||||
|
names.map { |name| "#{name} <#{email}>" }
|
||||||
|
end
|
||||||
|
end.flatten
|
||||||
|
|
Loading…
Reference in New Issue
Block a user