emn 0.0.1
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.
- checksums.yaml +7 -0
- data/bin/emn +7 -0
- data/lib/emn/version.rb +3 -0
- data/lib/emn.rb +193 -0
- metadata +75 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b0f059daf1f7b203fd38adb480b7c2df68c851ba
|
4
|
+
data.tar.gz: aaaea7cf03035c6e13b062e68821b380c8cbe1ae
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 34f5749ff2f14a9a8c7505e445b7d1f64ee1c3a989a8bba90b0003f78e65a3a88d38649472dbba4121acd1df60aba8d8c485abf17ddbad378be5551a10218175
|
7
|
+
data.tar.gz: 90932542c0783857db08928f797c2bfcc0c321e08a52272fce30fc871841e07f51911e48451a637504c31eed47806b5ef4decade19c63f3d85c035749a28d2e6
|
data/bin/emn
ADDED
data/lib/emn/version.rb
ADDED
data/lib/emn.rb
ADDED
@@ -0,0 +1,193 @@
|
|
1
|
+
require 'eaal'
|
2
|
+
require 'yaml'
|
3
|
+
require 'pushover'
|
4
|
+
require 'optparse'
|
5
|
+
require 'pp'
|
6
|
+
require 'logger'
|
7
|
+
require 'emn/version'
|
8
|
+
|
9
|
+
class EMN
|
10
|
+
OPTIONS = {
|
11
|
+
:verbose => false,
|
12
|
+
:debug => false,
|
13
|
+
:config => File.expand_path("~/.emn"),
|
14
|
+
:seen => File.expand_path("~/.emn_seen"),
|
15
|
+
:logger => nil
|
16
|
+
}
|
17
|
+
|
18
|
+
def logger
|
19
|
+
if OPTIONS[:debug] || OPTIONS[:verbose]
|
20
|
+
return Logger.new(STDOUT)
|
21
|
+
else
|
22
|
+
return Logger.new(nil)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def parse_options
|
27
|
+
opt = OptionParser.new
|
28
|
+
|
29
|
+
opt.banner = "New mail notifications for Eve Online"
|
30
|
+
opt.separator ""
|
31
|
+
|
32
|
+
opt.on("--debug", "Enable debug mode") do
|
33
|
+
OPTIONS[:debug] = true
|
34
|
+
end
|
35
|
+
|
36
|
+
opt.on("--verbose", "Verbose logging") do
|
37
|
+
OPTIONS[:verbose] = true
|
38
|
+
end
|
39
|
+
|
40
|
+
opt.on("--config [CONFIG]", "Config file location (%s)" % OPTIONS[:config]) do |v|
|
41
|
+
OPTIONS[:config] = File.expand_path(v)
|
42
|
+
end
|
43
|
+
|
44
|
+
opt.on("--seen [SEEN_FILE]", "Seen file location (%s)" % OPTIONS[:seen]) do |v|
|
45
|
+
OPTIONS[:seen] = File.expand_path(v)
|
46
|
+
end
|
47
|
+
|
48
|
+
opt.separator ""
|
49
|
+
opt.separator "http://github.com/ripienaar/emn"
|
50
|
+
|
51
|
+
opt.parse!
|
52
|
+
|
53
|
+
logger.info("emn %s starting with config %s and seen file %s" % [ EMN::VERSION, OPTIONS[:config], OPTIONS[:seen]])
|
54
|
+
end
|
55
|
+
|
56
|
+
def config
|
57
|
+
@config ||= YAML.load(File.read(File.expand_path(OPTIONS[:config])))
|
58
|
+
end
|
59
|
+
|
60
|
+
def seen
|
61
|
+
@seen ||= YAML.load(File.read(File.expand_path(OPTIONS[:seen])))
|
62
|
+
rescue
|
63
|
+
@seen = {}
|
64
|
+
end
|
65
|
+
|
66
|
+
def save_seen!
|
67
|
+
return if OPTIONS[:debug]
|
68
|
+
|
69
|
+
File.open(File.expand_path(OPTIONS[:seen]), "w") do |file|
|
70
|
+
file.puts seen.to_yaml
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def pushover
|
75
|
+
Pushover.user = config[:pushover][:user_token]
|
76
|
+
Pushover.token = config[:pushover][:app_token]
|
77
|
+
Pushover
|
78
|
+
end
|
79
|
+
|
80
|
+
def eve_api
|
81
|
+
unless EAAL.cache.is_a?(EAAL::Cache::FileCache)
|
82
|
+
EAAL.cache = EAAL::Cache::FileCache.new
|
83
|
+
end
|
84
|
+
|
85
|
+
@eve_api ||= EAAL::API.new(
|
86
|
+
config[:eve][:key_id],
|
87
|
+
config[:eve][:verification_code]
|
88
|
+
)
|
89
|
+
end
|
90
|
+
|
91
|
+
def mails(char)
|
92
|
+
eve_api.scope = "char"
|
93
|
+
eve_api.MailMessages("characterID" => char.characterID).messages.sort_by{|m| m.messageID}
|
94
|
+
end
|
95
|
+
|
96
|
+
def characters
|
97
|
+
eve_api.scope = "account"
|
98
|
+
eve_api.Characters.characters
|
99
|
+
end
|
100
|
+
|
101
|
+
def check_mail
|
102
|
+
notifications = {}
|
103
|
+
|
104
|
+
characters.each do |toon|
|
105
|
+
logger.debug("Checking character %s" % toon.name)
|
106
|
+
|
107
|
+
messages = mails(toon)
|
108
|
+
|
109
|
+
logger.debug("Found %d messages for %s" % [messages.size, toon.name])
|
110
|
+
|
111
|
+
messages.each do |mail|
|
112
|
+
logger.debug("Processing email %s: from: %s subject: %s" % [mail.messageID, mail.senderName, mail.title])
|
113
|
+
|
114
|
+
seen[toon.name] ||= "0"
|
115
|
+
|
116
|
+
if seen[toon.name] < mail.messageID
|
117
|
+
seen[toon.name] = mail.messageID
|
118
|
+
|
119
|
+
if mail.senderName == toon.name
|
120
|
+
logger.debug("Skipping mail %s as it's from the character" % mail.messageID)
|
121
|
+
next
|
122
|
+
end
|
123
|
+
|
124
|
+
logger.debug("Adding email %s: %s to the queue" % [mail.messageID, mail.title])
|
125
|
+
|
126
|
+
notifications[toon.name] ||= []
|
127
|
+
notifications[toon.name] << {
|
128
|
+
:from => mail.senderName,
|
129
|
+
:date => mail.sentDate,
|
130
|
+
:subject => mail.title
|
131
|
+
}
|
132
|
+
else
|
133
|
+
logger.debug("Skipping email %s: it's been seen before (%s)" % [mail.messageID, seen[toon.name]])
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
notifications.empty? ? nil : notifications
|
139
|
+
end
|
140
|
+
|
141
|
+
def message_body(notifications)
|
142
|
+
summary = ["<b>"]
|
143
|
+
body = []
|
144
|
+
|
145
|
+
notifications.keys.sort.each do |toon|
|
146
|
+
summary << "%s: %d " % [toon, notifications[toon].size]
|
147
|
+
|
148
|
+
body << "<b>%s</b>" % toon
|
149
|
+
notifications[toon].reverse[0..config[:max_notifications] - 1].each do |notification|
|
150
|
+
body << " %s: %s" % [notification[:from], notification[:subject]]
|
151
|
+
end
|
152
|
+
|
153
|
+
if notifications[toon].size > config[:max_notifications]
|
154
|
+
body << " ... and %d more" % [notifications[toon].size - config[:max_notifications]]
|
155
|
+
end
|
156
|
+
|
157
|
+
body << ""
|
158
|
+
end
|
159
|
+
|
160
|
+
summary << "</b>"
|
161
|
+
|
162
|
+
[summary, "", body].flatten.join("\n")
|
163
|
+
end
|
164
|
+
|
165
|
+
def publish(message)
|
166
|
+
if OPTIONS[:debug]
|
167
|
+
logger.debug("Would have published the message: ")
|
168
|
+
puts message
|
169
|
+
return true
|
170
|
+
else
|
171
|
+
responce = pushover.notification(:html => 1, :message => message)
|
172
|
+
|
173
|
+
if responce.code == 200
|
174
|
+
return true
|
175
|
+
else
|
176
|
+
STDERR.puts("Failed to notify pushover: %s" % responce.inspect)
|
177
|
+
return false
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def send!
|
183
|
+
if notifications = check_mail
|
184
|
+
logger.debug("Found mail for %d characters" % [notifications.keys.size])
|
185
|
+
|
186
|
+
if publish(message_body(notifications))
|
187
|
+
save_seen!
|
188
|
+
end
|
189
|
+
else
|
190
|
+
logger.debug("No new mail found, not sending any messages")
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: emn
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- R.I.Pienaar
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: eaal
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pushover
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Get Pushover notification when your characters get mail
|
42
|
+
email: rip@devco.net
|
43
|
+
executables:
|
44
|
+
- emn
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- bin/emn
|
49
|
+
- lib/emn.rb
|
50
|
+
- lib/emn/version.rb
|
51
|
+
homepage: http://devco.net/
|
52
|
+
licenses: []
|
53
|
+
metadata: {}
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 2.0.14
|
72
|
+
signing_key:
|
73
|
+
specification_version: 4
|
74
|
+
summary: Eve Online New Mail Notifier
|
75
|
+
test_files: []
|