partygoer-client 0.0.2 → 0.0.3
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 +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
|