Class: Net::DAAP::Client
- Inherits:
-
Object
- Object
- Net::DAAP::Client
- Defined in:
- lib/net/daap.rb
Overview
Synopsis
The Client class interacts with the iTunes server to fetch lists of songs, databases, and playlists. Each Client class can have many Database, and each Database can have many Playlist, and many Song. See DAAP for a code example.
Instance Attribute Summary collapse
-
#dmap ⇒ Object
readonly
Returns the value of attribute dmap.
Instance Method Summary collapse
-
#connect ⇒ Object
Connects to the iTunes server.
-
#databases ⇒ Object
Returns the databases found on the iTunes server.
-
#disconnect ⇒ Object
Disconnects from the DAAP server.
- #do_get(request) ⇒ Object
- #get_song(request) ⇒ Object
-
#initialize(server_host) ⇒ Client
constructor
Create a new Client and pass in the host where the client will connect.
- #unpack_listing(listing, &func) ⇒ Object
Constructor Details
#initialize(server_host) ⇒ Client
Create a new Client and pass in the host where the client will connect.
52 53 54 55 56 |
# File 'lib/net/daap.rb', line 52 def initialize(server_host) @server_host = server_host @server_port = 3689 @debug = 0 end |
Instance Attribute Details
#dmap ⇒ Object (readonly)
Returns the value of attribute dmap.
49 50 51 |
# File 'lib/net/daap.rb', line 49 def dmap @dmap end |
Instance Method Details
#connect ⇒ Object
Connects to the iTunes server. This method should be called right after construction. See DAAP for an example.
60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/net/daap.rb', line 60 def connect @http_client = Net::HTTP.start(@server_host, @server_port) find_validator @dmap = Net::DAAP::DMAP.new(:daap => self) load_server_info @connected = 1 if block_given? yield @dsn disconnect @connected = 0 end @dsn end |
#databases ⇒ Object
Returns the databases found on the iTunes server.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/net/daap.rb', line 75 def databases return error("Not connected, can't fetch databases") unless @connected listings = @dmap.find(do_get("databases"), "daap.serverdatabases/dmap.listing") # FIXME check the value of listing @databases = [] unpack_listing(listings) do |value| db = Database.new( :db_info => value, :daap => self ) if block_given? yield db else @databases << db end end @databases end |
#disconnect ⇒ Object
Disconnects from the DAAP server
134 135 136 |
# File 'lib/net/daap.rb', line 134 def disconnect do_get("logout") end |
#do_get(request) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/net/daap.rb', line 94 def do_get(request) debug("do_get") url = String.new('/' + request) if @session_id url += url =~ /\?/ ? "&" : "?" url += "session-id=#{@session_id}" end if @revision && request != "logout" url += "&revision-number=#{@revision}" end debug(url) res = @http_client.get(url, request_headers(url)) content_type = res.header['content-type'] if request !~ /(?:\/items\/\d+\.|logout)/ && content_type !~ /dmap/ raise "Broken response" end res.body end |
#get_song(request) ⇒ Object
117 118 119 120 121 |
# File 'lib/net/daap.rb', line 117 def get_song(request) @request_id = 1 unless @request_id @request_id += 1 if @request_id do_get(request) end |
#unpack_listing(listing, &func) ⇒ Object
123 124 125 126 127 128 129 130 131 |
# File 'lib/net/daap.rb', line 123 def unpack_listing(listing, &func) listing.each do |item| record = Hash.new item[1].each do |pair_ref| record[pair_ref[0]] = pair_ref[1] end yield record end end |