catfriend 0.15 → 0.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,6 +8,7 @@
8
8
  # License:: MIT
9
9
  require 'catfriend/filetokenstack'
10
10
  require 'catfriend/imap'
11
+ require 'catfriend/dbus'
11
12
  require 'net/imap'
12
13
  require 'optparse'
13
14
 
@@ -99,6 +100,7 @@ def self.main args
99
100
  work_accounts = false
100
101
  foreground = false
101
102
  Catfriend.verbose = false
103
+ done_action = false
102
104
  begin
103
105
  OptionParser.new do |opts|
104
106
  opts.banner = "usage: #{APP_NAME} [options]"
@@ -112,8 +114,20 @@ def self.main args
112
114
  opts.on("-v", "--verbose", "verbose output to console") do
113
115
  Catfriend.verbose = true
114
116
  end
117
+
118
+ opts.on("-s", "--stop", "shut down running server") do
119
+ done_action = true
120
+ dbus = DBus.new
121
+ if dbus.send_shutdown
122
+ puts "sent shutdown signal"
123
+ else
124
+ puts "could not send shutdown signal, no server running?"
125
+ end
126
+ end
115
127
  end.parse!
116
128
 
129
+ return 0 if done_action
130
+
117
131
  Catfriend.verbose = false unless foreground
118
132
 
119
133
  servers = parse_config
@@ -121,10 +135,10 @@ def self.main args
121
135
  raise ConfigError, "no servers to check" if servers.empty?
122
136
 
123
137
  if foreground
124
- start_servers servers
138
+ main_loop servers
125
139
  else
126
140
  pid = fork do
127
- start_servers servers
141
+ main_loop servers
128
142
  end
129
143
  Process.detach pid
130
144
  end
@@ -141,9 +155,12 @@ def self.main args
141
155
  1
142
156
  end
143
157
 
144
- def self.start_servers servers
158
+ def self.main_loop servers
159
+ dbus = DBus.new servers
160
+ dbus.start
145
161
  servers.each { |s| s.start }
146
162
  servers.each { |s| s.join }
163
+ dbus.join
147
164
  end
148
165
 
149
166
  end ########################### end module
@@ -0,0 +1,71 @@
1
+ require 'catfriend/thread'
2
+ require 'catfriend/server'
3
+ require 'dbus'
4
+
5
+ module Catfriend # {
6
+
7
+ SERVICE = "org.freedesktop.Catfriend"
8
+ PATH = "/org/freedesktop/Catfriend"
9
+ INTERFACE = "org.freedesktop.Catfriend.System"
10
+
11
+ class DBus
12
+ include Thread
13
+
14
+ class DBusObject < ::DBus::Object
15
+ def initialize(main, servers)
16
+ @main = main
17
+ @servers = servers
18
+ super PATH
19
+ end
20
+
21
+ dbus_interface INTERFACE do
22
+ dbus_method :stop do
23
+ Catfriend.whisper "received shutdown request"
24
+ @main.quit # this must be run from within method handler
25
+ @servers.each { |s| s.disconnect }
26
+ end
27
+ end
28
+ end
29
+
30
+ def initialize(servers = nil)
31
+ @servers = servers
32
+ end
33
+
34
+ def init
35
+ @bus = ::DBus::SessionBus.instance unless @bus
36
+ end
37
+
38
+ def send_shutdown
39
+ init
40
+ service = @bus.service(SERVICE)
41
+ object = service.object(PATH)
42
+ object.introspect
43
+ object.default_iface = INTERFACE
44
+ object.stop
45
+ true
46
+ rescue
47
+ false
48
+ end
49
+
50
+ def start_service
51
+ object = DBusObject.new(@main, @servers)
52
+ service = @bus.request_service(SERVICE)
53
+ service.export object
54
+ end
55
+
56
+ def run
57
+ init
58
+ if send_shutdown
59
+ Catfriend.whisper "shut down existing catfriend"
60
+ end
61
+
62
+ @main = ::DBus::Main.new
63
+ start_service
64
+ @main << @bus
65
+ @main.run
66
+ rescue => e
67
+ puts "dbus unknown error #{e.message}\n#{e.backtrace.join("\n")}"
68
+ end
69
+ end
70
+
71
+ end # } end module
@@ -118,7 +118,6 @@ class ImapServer
118
118
  end
119
119
 
120
120
  def kill
121
- @stopping = true
122
121
  disconnect
123
122
  super
124
123
  end
@@ -136,7 +135,13 @@ class ImapServer
136
135
  @imap = Net::IMAP.new(@host, args)
137
136
  @imap.login(@user, @password)
138
137
  @imap.select(@mailbox || "INBOX")
139
- return @imap.fetch('*', 'UID').first.seqno
138
+
139
+ begin
140
+ # fetch raises an exception when the mailbox is empty
141
+ @imap.fetch('*', 'UID').first.seqno
142
+ rescue
143
+ 0
144
+ end
140
145
  end
141
146
 
142
147
  def reconnect
@@ -151,10 +156,12 @@ class ImapServer
151
156
  @message_count = new_count
152
157
  end
153
158
 
154
- def disconnect ; @imap.disconnect ; end
159
+ def disconnect
160
+ @stopping = true
161
+ @imap.disconnect
162
+ end
155
163
 
156
- private :connect, :disconnect, :reconnect,
157
- :check_loop, :run, :error, :notify_message
164
+ private :connect, :reconnect, :check_loop, :run, :error, :notify_message
158
165
 
159
166
  attr_writer :host, :password, :id, :user, :no_ssl, :cert_file, :mailbox
160
167
  attr_accessor :work_account
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: catfriend
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.15'
4
+ version: '0.16'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-12 00:00:00.000000000 Z
12
+ date: 2012-02-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: libnotify
16
- requirement: &12249920 !ruby/object:Gem::Requirement
16
+ requirement: &12342540 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,18 @@ dependencies:
21
21
  version: 0.7.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *12249920
24
+ version_requirements: *12342540
25
+ - !ruby/object:Gem::Dependency
26
+ name: ruby-dbus
27
+ requirement: &12340600 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0.7'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *12340600
25
36
  description: E-mail checker with libnotify desktop notifications.
26
37
  email:
27
38
  - catfriend@chilon.net
@@ -32,11 +43,13 @@ extra_rdoc_files: []
32
43
  files:
33
44
  - LICENSE
34
45
  - catfriend.example
46
+ - lib/catfriend/dbus.rb
35
47
  - lib/catfriend/server.rb
36
48
  - lib/catfriend/filetokenstack.rb
37
49
  - lib/catfriend/thread.rb
38
50
  - lib/catfriend/imap.rb
39
- - bin/catfriend
51
+ - !binary |-
52
+ YmluL2NhdGZyaWVuZA==
40
53
  homepage: https://github.com/nuisanceofcats/catfriend
41
54
  licenses:
42
55
  - Expat