partygoer-client 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/partygoer-client.rb +35 -30
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4385f1fb04460ff257152c2cf070efe9cd1d39c8
|
4
|
+
data.tar.gz: 2e4be4a61f1c3bc50eb3331ca0930873d0b1cd77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0ef5c08bb3ec6e07fe926d213fbcd8f479233abcf52748f9af4bf5be6495f65ce5ab2cf5eb4acad2a0290856f5ff940179807f26ab516f35ebca0c2bd29931f
|
7
|
+
data.tar.gz: 9c0cd207d129bd4e6aaf3a04f8bef32debb9b6a4a6020e7117f48c9a28e21d719cc9530033cbb9fae08fc65ad247db527781eea894c8ccbb155bbdcbf7a5adb6
|
data/lib/partygoer-client.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'faye'
|
3
3
|
require 'eventmachine'
|
4
|
-
require 'json'
|
5
4
|
require 'rest-client'
|
5
|
+
|
6
|
+
require 'json'
|
6
7
|
require 'logger'
|
7
8
|
|
8
9
|
# Connects to a partygoer instance, performs an initial poll, and then polls
|
@@ -15,7 +16,7 @@ class PartyGoerClient
|
|
15
16
|
@@logger.formatter = proc do |severity, datetime, _progname, msg|
|
16
17
|
"\n\n#{datetime} #{severity}:\n\t#{msg}"
|
17
18
|
end
|
18
|
-
@@logger.level = Logger::
|
19
|
+
@@logger.level = Logger::INFO
|
19
20
|
|
20
21
|
def initialize(server)
|
21
22
|
@server = server
|
@@ -33,7 +34,7 @@ class PartyGoerClient
|
|
33
34
|
@api = RestClient::Resource.new("#{@server}/api/queue", headers:
|
34
35
|
{ content_type: 'application/json', accept: 'application/json' })
|
35
36
|
@client = Faye::Client.new("#{@server}:9292/faye")
|
36
|
-
|
37
|
+
logger.info { "Client initialized with server: #{server}" }
|
37
38
|
@is_playing = false
|
38
39
|
start
|
39
40
|
end
|
@@ -41,9 +42,9 @@ class PartyGoerClient
|
|
41
42
|
def playing=(track)
|
42
43
|
payload = { track: track }
|
43
44
|
@api['/playing'].put(payload)
|
44
|
-
|
45
|
+
logger.info { "Set now playing to #{track['name']}" }
|
45
46
|
rescue
|
46
|
-
|
47
|
+
logger.error {
|
47
48
|
"Could not set now playing to #{track.inspect}:\n\t#{$!}\n\t#{$@.join("\n\t")}"
|
48
49
|
}
|
49
50
|
end
|
@@ -56,9 +57,9 @@ class PartyGoerClient
|
|
56
57
|
payload = { track: track }
|
57
58
|
end
|
58
59
|
EM.defer(proc { @api['/tracks'].post(payload) })
|
59
|
-
|
60
|
+
logger.info { "Suggested #{track.inspect}" }
|
60
61
|
rescue
|
61
|
-
|
62
|
+
logger.error("Failed to suggest track: #{track.inspect}\n#{$!}\n#{$@.join("\n\t")}")
|
62
63
|
end
|
63
64
|
|
64
65
|
def skip?
|
@@ -68,19 +69,19 @@ class PartyGoerClient
|
|
68
69
|
@playing['num_downvotes'] >= (2 * @playing['num_upvotes'])
|
69
70
|
end
|
70
71
|
rescue
|
71
|
-
|
72
|
+
logger.error("Failed to check skip criteria:\n#{$!}\n#{$@.join("\n\t")}")
|
72
73
|
end
|
73
74
|
|
74
75
|
def up_next
|
75
76
|
@queued[1]
|
76
77
|
rescue
|
77
|
-
|
78
|
+
logger.error("Failed to check up next:\n#{$!}\n#{$@.join("\n\t")}")
|
78
79
|
end
|
79
80
|
|
80
81
|
def start
|
81
82
|
pull_update
|
82
83
|
return if @event_loop
|
83
|
-
|
84
|
+
logger.info { 'Starting event loop' }
|
84
85
|
start_event_loop
|
85
86
|
|
86
87
|
at_exit do
|
@@ -90,13 +91,13 @@ class PartyGoerClient
|
|
90
91
|
|
91
92
|
def stop
|
92
93
|
return unless @event_loop
|
93
|
-
|
94
|
+
logger.info { 'Stopping event loop' }
|
94
95
|
EM.stop_event_loop
|
95
96
|
@event_loop.kill
|
96
97
|
@event_loop = nil
|
97
98
|
end
|
98
99
|
|
99
|
-
#
|
100
|
+
# Aliases
|
100
101
|
def now_playing
|
101
102
|
playing
|
102
103
|
end
|
@@ -109,6 +110,10 @@ class PartyGoerClient
|
|
109
110
|
played
|
110
111
|
end
|
111
112
|
|
113
|
+
def logger
|
114
|
+
@@logger
|
115
|
+
end
|
116
|
+
|
112
117
|
private
|
113
118
|
def start_event_loop
|
114
119
|
@event_loop = Thread.new do
|
@@ -129,13 +134,13 @@ class PartyGoerClient
|
|
129
134
|
end
|
130
135
|
end
|
131
136
|
rescue
|
132
|
-
|
137
|
+
logger.critical { "Could not start event loop:\n\t#{$!}\n\t#{$@.join("\n\t")}" }
|
133
138
|
stop
|
134
139
|
raise $!
|
135
140
|
end
|
136
141
|
end
|
137
142
|
rescue
|
138
|
-
|
143
|
+
logger.critical { "Could not start event loop:\n\t#{$!}\n\t#{$@.join("\n\t")}" }
|
139
144
|
stop
|
140
145
|
raise $!
|
141
146
|
end
|
@@ -143,7 +148,7 @@ class PartyGoerClient
|
|
143
148
|
|
144
149
|
def on_voted(track)
|
145
150
|
proc {
|
146
|
-
|
151
|
+
logger.debug { "Track voted on: #{track.inspect}" }
|
147
152
|
begin
|
148
153
|
@queued_lock.synchronize{
|
149
154
|
index = @queued.find_index {
|
@@ -152,7 +157,7 @@ class PartyGoerClient
|
|
152
157
|
@queued[index] = track
|
153
158
|
}
|
154
159
|
rescue
|
155
|
-
|
160
|
+
logger.error { "Error in on_voted:\n\t#{$!}\n\t#{$@.join("\n\t")}" }
|
156
161
|
ensure
|
157
162
|
sort!
|
158
163
|
end
|
@@ -161,13 +166,13 @@ class PartyGoerClient
|
|
161
166
|
|
162
167
|
def on_created(track)
|
163
168
|
proc {
|
164
|
-
|
169
|
+
logger.debug { "Track created: #{track.inspect}" }
|
165
170
|
begin
|
166
171
|
@queued_lock.synchronize{
|
167
172
|
@queued << track
|
168
173
|
}
|
169
174
|
rescue
|
170
|
-
|
175
|
+
logger.error { "Error in on_created:\n\t#{$!}\n\t#{$@.join("\n\t")}" }
|
171
176
|
ensure
|
172
177
|
sort!
|
173
178
|
end
|
@@ -176,7 +181,7 @@ class PartyGoerClient
|
|
176
181
|
|
177
182
|
def on_next(track)
|
178
183
|
proc {
|
179
|
-
|
184
|
+
logger.debug { "Next track called: #{track.inspect}" }
|
180
185
|
begin
|
181
186
|
@playing_lock.synchronize {
|
182
187
|
@playing['playing'] = false
|
@@ -193,7 +198,7 @@ class PartyGoerClient
|
|
193
198
|
@playing = track
|
194
199
|
}
|
195
200
|
rescue
|
196
|
-
|
201
|
+
logger.error { "Error in on_next:\n\t#{$!}\n\t#{$@.join("\n\t")}" }
|
197
202
|
ensure
|
198
203
|
sort!
|
199
204
|
end
|
@@ -201,24 +206,24 @@ class PartyGoerClient
|
|
201
206
|
end
|
202
207
|
|
203
208
|
def pull_update
|
204
|
-
|
209
|
+
logger.info { "Polling for update" }
|
205
210
|
begin
|
206
211
|
body = JSON.parse(@api['/recently_played'].get.body)
|
207
212
|
@played_lock.synchronize { @played = body }
|
208
213
|
rescue
|
209
|
-
|
214
|
+
logger.error { "Could not fetch recently played:\n\t#{$!}\n\t#{$@.join("\n\t")}" }
|
210
215
|
end
|
211
216
|
begin
|
212
217
|
body = JSON.parse(@api['/tracks'].get.body)
|
213
218
|
@queued_lock.synchronize { @queued = body }
|
214
219
|
rescue
|
215
|
-
|
220
|
+
logger.error { "Could not fetch queue:\n\t#{$!}\n\t#{$@.join("\n\t")}" }
|
216
221
|
end
|
217
222
|
begin
|
218
223
|
body = JSON.parse(@api['/playing'].get.body)
|
219
224
|
@playing_lock.synchronize { @playing = body }
|
220
225
|
rescue
|
221
|
-
|
226
|
+
logger.error { "Could not fetch now playing:\n\t#{$!}\n\t#{$@.join("\n\t")}" }
|
222
227
|
end
|
223
228
|
sort!
|
224
229
|
end
|
@@ -228,9 +233,9 @@ class PartyGoerClient
|
|
228
233
|
@played_lock.synchronize{
|
229
234
|
@played.sort_by! { |track| track['id'] }
|
230
235
|
}
|
231
|
-
|
236
|
+
logger.debug { 'Sorted recently played' }
|
232
237
|
rescue
|
233
|
-
|
238
|
+
logger.error { "Could not sort recently played:\n\t#{$!}\n\t#{$@.join("\n\t")}" }
|
234
239
|
end
|
235
240
|
begin
|
236
241
|
@queued_lock.synchronize{
|
@@ -239,17 +244,17 @@ class PartyGoerClient
|
|
239
244
|
[i, -1 * track['score'], track['id']]
|
240
245
|
}
|
241
246
|
}
|
242
|
-
|
247
|
+
logger.debug { 'Sorted queued' }
|
243
248
|
rescue
|
244
|
-
|
249
|
+
logger.error { "Could not sort the queue:\n\t#{$!}\n\t#{$@.join("\n\t")}" }
|
245
250
|
end
|
246
251
|
begin
|
247
252
|
@playing_lock.synchronize{
|
248
253
|
@playing = @queued.select { |track| track['playing'] }.first
|
249
254
|
}
|
250
|
-
|
255
|
+
logger.debug { 'Updated now playing' }
|
251
256
|
rescue
|
252
|
-
|
257
|
+
logger.error { "Could not update now playing:\n\t#{$!}\n\t#{$@.join("\n\t")}" }
|
253
258
|
end
|
254
259
|
end
|
255
260
|
end
|