catfriend 0.15 → 0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/catfriend +20 -3
- data/lib/catfriend/dbus.rb +71 -0
- data/lib/catfriend/imap.rb +12 -5
- metadata +18 -5
data/bin/catfriend
CHANGED
@@ -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
|
-
|
138
|
+
main_loop servers
|
125
139
|
else
|
126
140
|
pid = fork do
|
127
|
-
|
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.
|
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
|
data/lib/catfriend/imap.rb
CHANGED
@@ -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
|
-
|
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
|
159
|
+
def disconnect
|
160
|
+
@stopping = true
|
161
|
+
@imap.disconnect
|
162
|
+
end
|
155
163
|
|
156
|
-
private :connect, :
|
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.
|
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-
|
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: &
|
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: *
|
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
|
-
-
|
51
|
+
- !binary |-
|
52
|
+
YmluL2NhdGZyaWVuZA==
|
40
53
|
homepage: https://github.com/nuisanceofcats/catfriend
|
41
54
|
licenses:
|
42
55
|
- Expat
|