]> git.cworth.org Git - sup/blob - lib/sup/contact.rb
finally, attachment support\!
[sup] / lib / sup / contact.rb
1 module Redwood
2
3 class ContactManager
4   include Singleton
5
6   def initialize fn
7     @fn = fn
8     @p2a = {} # person to alias map
9     @a2p = {} # alias to person map
10
11     if File.exists? fn
12       IO.foreach(fn) do |l|
13         l =~ /^(\S+): (.*)$/ or raise "can't parse #{fn} line #{l.inspect}"
14         aalias, addr = $1, $2
15         p = PersonManager.person_for addr, :definitive => true
16         @p2a[p] = aalias
17         @a2p[aalias] = p
18       end
19     end
20
21     self.class.i_am_the_instance self
22   end
23
24   def contacts; @p2a.keys; end
25   def set_contact person, aalias
26     if(pold = @a2p[aalias]) && (pold != person)
27       drop_contact pold
28     end
29     @p2a[person] = aalias
30     @a2p[aalias] = person
31   end
32   def drop_contact person
33     if(aalias = @p2a[person])
34       @p2a.delete person
35       @a2p.delete aalias
36     end
37   end    
38   def person_with aalias; @a2p[aalias]; end
39   def alias_for person; @p2a[person]; end
40   def is_contact? person; @p2a.member? person; end
41   def save
42     File.open(@fn, "w") do |f|
43       @p2a.each do |p, a|
44         f.puts "#{a}: #{p.full_address}"
45       end
46     end
47   end
48 end
49
50 end