audioscrobbler 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  require 'rubygems'
2
2
  SPEC = Gem::Specification.new do |s|
3
3
  s.name = "audioscrobbler"
4
- s.version = "0.0.2"
4
+ s.version = "0.1.0"
5
5
  s.author = "Daniel Erat"
6
6
  s.email = "dan-ruby@erat.org"
7
7
  s.homepage = "http://www.erat.org/ruby/"
@@ -6,10 +6,11 @@
6
6
  # == Description
7
7
  # This file contains an implementation of the Audioscrobbler plugin
8
8
  # protocol, used to submit playlist history to Last.fm. The protocol
9
- # description is located at http://www.audioscrobbler.net/wiki/Protocol1.1 .
9
+ # description is located at
10
+ # http://www.audioscrobbler.net/development/protocol/ .
10
11
  #
11
12
  # == Version
12
- # 0.0.2
13
+ # 0.1.0
13
14
  #
14
15
  # == Author
15
16
  # Daniel Erat <dan-ruby@erat.org>
@@ -29,6 +30,8 @@
29
30
  # - track numbers can be submitted
30
31
  # Also added a race condition that I haven't bothered fixing (I
31
32
  # think I'm the only person using this library?).
33
+ # 0.1.0 Catch an exception when the server gives us a bogus now-playing
34
+ # URL, as happened to me yesterday. :-P
32
35
 
33
36
  require "cgi"
34
37
  require "md5"
@@ -336,21 +339,27 @@ class Audioscrobbler
336
339
  body = args.collect {|k, v| "#{k}=" + CGI.escape(v.to_s) }.join('&')
337
340
 
338
341
  success = false
339
- url = URI.parse(@now_playing_url)
340
- headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
341
342
  begin
342
- data = Net::HTTP.start(url.host, url.port) do |http|
343
- http.post(url.path, body, headers).body
344
- end
343
+ url = URI.parse(@now_playing_url)
345
344
  rescue Exception
346
- vlog("Submission failed -- couldn't read #@now_playing_url: #{$!}")
345
+ vlog("Submission failed -- couldn't parse now-playing " +
346
+ "URL \"#@now_playing_url\"")
347
347
  else
348
- data.chomp!
349
- if data == "OK"
350
- vlog("Now-playing report was successful")
351
- success = true
348
+ headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
349
+ begin
350
+ data = Net::HTTP.start(url.host, url.port) do |http|
351
+ http.post(url.path, body, headers).body
352
+ end
353
+ rescue Exception
354
+ vlog("Submission failed -- couldn't read #@now_playing_url: #{$!}")
352
355
  else
353
- vlog("Now-playing report failed -- got \"#{data}\"")
356
+ data.chomp!
357
+ if data == "OK"
358
+ vlog("Now-playing report was successful")
359
+ success = true
360
+ else
361
+ vlog("Now-playing report failed -- got \"#{data}\"")
362
+ end
354
363
  end
355
364
  end
356
365
  success
@@ -359,4 +359,39 @@ class TestAudioscrobbler < Test::Unit::TestCase
359
359
  assert_equal(tracks, @submit_status.tracks)
360
360
  assert_equal(now_playing, @now_playing_status.tracks)
361
361
  end # test_audioscrobbler
362
+
363
+ # Test that we don't crash when the handshake returns an unparseable
364
+ # now-playing URL.
365
+ def test_broken_url
366
+ @handshake_status = AudioscrobblerHandshakeStatus.new
367
+ @submit_status = AudioscrobblerSubmitStatus.new
368
+ @now_playing_status = AudioscrobblerSubmitStatus.new
369
+ # FIXME(derat): Quite mortifying that I'm just using a different port
370
+ # from the previous tests instead of killing off the old server.
371
+ @http_port = 16350
372
+
373
+ @server_thread = Thread.new do
374
+ s = WEBrick::HTTPServer.new(:BindAddress => "127.0.0.1",
375
+ :Port => @http_port,
376
+ :Logger => WEBrick::Log.new(
377
+ nil, WEBrick::BasicLog::WARN),
378
+ :AccessLog => [])
379
+ # Use garbage for the submit and now-playing URLs.
380
+ s.mount("/handshake", AudioscrobblerHandshakeServlet, @handshake_status,
381
+ "username", "password", "sessionid",
382
+ "hch094h09h9 htnhstn", # submit
383
+ "gcrlhc g g890") # now-playing
384
+ trap("INT") { s.shutdown }
385
+ s.start
386
+ end
387
+
388
+ a = Audioscrobbler.new("username", "password")
389
+ a.client = "tst"
390
+ a.version = "1.1"
391
+ a.handshake_url = "http://127.0.0.1:#@http_port/handshake"
392
+ a.verbose = false
393
+ a.start_submitter_thread
394
+
395
+ assert(!a.report_now_playing('artist', 'title', 100, 'album', 'mbid', 1))
396
+ end # test_broken_url
362
397
  end # TestAudioscrobbler
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.3
3
3
  specification_version: 1
4
4
  name: audioscrobbler
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.2
7
- date: 2007-08-26 00:00:00 -07:00
6
+ version: 0.1.0
7
+ date: 2007-10-11 00:00:00 -07:00
8
8
  summary: Library to submit music playlists to Last.fm
9
9
  require_paths:
10
10
  - lib