46 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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.downcase
 | |
|         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
 | |
| 
 | 
