dacpclient 0.3.2 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75fdfc2a63bf7ff3c54194931d3a8475ad297f44
4
- data.tar.gz: b3a5fe9f909c13a9ef96d7e8b6dd97d40db0d682
3
+ metadata.gz: d3655dc2c114e8a4aa0e4526ec54497b5369feb1
4
+ data.tar.gz: d0cba7a839a858361f9f6e253c03c129667bca1b
5
5
  SHA512:
6
- metadata.gz: ca6dee63a426109a45be94fa670ef322d2f7623576157727fba03fb056829f94f0bc731c9b216dc4480552743d76ef2dc13dec8259582f6196ef1fef328440d2
7
- data.tar.gz: e1a8d069672cd29e0546cdfb8c3b766244ac0880fc8e627f857a89667936c6cdb18821ceb6b38560d89d26fdc43987bbd092f3740a7901d80bcadd00e147efd6
6
+ metadata.gz: 99a79a86d06f1ff9594c4e97fd9ba77d9fba3432378a2a27315fc1e3d647af2eeba56751c3bd78740ef8e90482c33d1a438be7b667ec6c008389b6ce756f7a7d
7
+ data.tar.gz: e8b30bce34c24e55b82c78c4abad57b05aa0103b4f82202f7789f483f7962b04b7de82702b8675ed18c72c16ec47626f396093ca86c8bb6f298ce2d747cb7c22
data/Gemfile CHANGED
@@ -2,5 +2,3 @@ gemspec
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
- gem 'minitest', '~> 5.4.0'
6
- gem 'rubocop', '~> 0.24.1'
data/bin/dacpclient CHANGED
@@ -40,7 +40,7 @@ class CLIClient < Thor
40
40
  sleep 0.5
41
41
  end
42
42
 
43
- pin = @config['pin'].to_s.chars.map { |num| num.to_i }
43
+ pin = @config['pin'].to_s.chars.map(&:to_i)
44
44
 
45
45
  unless database
46
46
  pin = 4.times.map { Random.rand(10) } if pin.empty?
@@ -131,6 +131,38 @@ class CLIClient < Thor
131
131
  puts
132
132
  end
133
133
 
134
+ desc :artists, 'Show the artists'
135
+ def artists
136
+ login
137
+ artists = @client.artists
138
+ puts 'Artists:'
139
+ puts '----------'
140
+ count = 0
141
+ num = Math.log10(artists.length).floor + 1
142
+ artists.each do |artist|
143
+ printf("%#{num}d. ", count += 1)
144
+
145
+ puts "#{artist.name} (#{artist.count} songs, #{artist.album_count} albums)"
146
+ end
147
+ puts
148
+ end
149
+
150
+ desc :albums, 'Show the albums'
151
+ def albums
152
+ login
153
+ albums = @client.albums
154
+ puts 'Albums:'
155
+ puts '----------'
156
+ count = 0
157
+ num = Math.log10(albums.length).floor + 1
158
+ albums.each do |album|
159
+ printf("%#{num}d. ", count += 1)
160
+
161
+ puts "#{album.name} [#{album.album_artist}] (#{album.count} songs)"
162
+ end
163
+ puts
164
+ end
165
+
134
166
  desc :play_playlist, 'Plays a playlist'
135
167
  def play_playlist(playlist)
136
168
  login
data/dacpclient.gemspec CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency 'faraday', '~> 0.9.0'
23
23
  spec.add_runtime_dependency 'dnssd', '~> 2.0'
24
24
  spec.add_runtime_dependency 'plist', '~> 3.1.0'
25
- spec.add_runtime_dependency 'dmapparser', '~> 0.1.0'
25
+ spec.add_runtime_dependency 'dmapparser', '~> 0.2.0'
26
26
  spec.add_runtime_dependency 'thor', '~> 0.19.1'
27
27
  spec.add_runtime_dependency 'fuzzy_match', '~> 2.1.0'
28
28
 
@@ -30,6 +30,8 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency 'redcarpet'
31
31
  spec.add_development_dependency 'github-markup'
32
32
  spec.add_development_dependency 'rake'
33
+ spec.add_development_dependency 'rubocop', '~> 0.27.1'
34
+ spec.add_development_dependency 'minitest', '~> 5.4.0'
33
35
 
34
36
  spec.required_ruby_version = '>= 2.0.0'
35
37
  end
@@ -15,6 +15,10 @@ require 'dacpclient/models/database'
15
15
  require 'dacpclient/models/databases'
16
16
  require 'dacpclient/models/playlist'
17
17
  require 'dacpclient/models/playlists'
18
+ require 'dacpclient/models/artist'
19
+ require 'dacpclient/models/artists'
20
+ require 'dacpclient/models/album'
21
+ require 'dacpclient/models/albums'
18
22
  require 'dacpclient/models/play_queue_item'
19
23
  require 'dacpclient/models/play_queue'
20
24
 
@@ -219,7 +223,7 @@ module DACPClient
219
223
  end
220
224
 
221
225
  def default_playlist(db = default_db)
222
- playlists(db).find { |item| item.base_playlist? }
226
+ playlists(db).find(&:base_playlist?)
223
227
  end
224
228
 
225
229
  def artwork(database, id, width = 320, height = 320)
@@ -259,9 +263,23 @@ module DACPClient
259
263
  com.apple.itunes.content-rating daap.songdatereleased
260
264
  com.apple.itunes.movie-info-xml daap.songalbumartist
261
265
  com.apple.itunes.extended-media-kind).join(',')
262
- url = "databases/#{db.miid}/containers/#{container.miid}/items"
263
- do_action(url, { query: q, type: 'music', sort: 'album', meta: meta,
264
- :'include-sort-headers' => 1 }, clean_url: true)
266
+ url = "databases/#{db.item_id}/containers/#{container.item_id}/items"
267
+ do_action(url, query: q, type: 'music', sort: 'album', meta: meta,
268
+ :'include-sort-headers' => 1, clean_url: true)
269
+ end
270
+
271
+ def artists(db = default_db)
272
+ url = "databases/#{db.item_id}/groups"
273
+ meta = 'dmap.itemname,dmap.itemid,dmap.persistentid,daap.songartist,daap.groupalbumcount,daap.songartistid'
274
+ query = "('daap.songartist!:'+('com.apple.itunes.extended-media-kind:1','com.apple.itunes.extended-media-kind:32'))"
275
+ do_action(url, meta: meta, type: 'music', :'group-type' => 'artists', sort: 'album', :'include-sort-headers' => 1, query: query, clean_url: true, model: Artists).items
276
+ end
277
+
278
+ def albums(db = default_db)
279
+ url = "databases/#{db.item_id}/groups"
280
+ meta = 'dmap.itemname,dmap.itemid,dmap.persistentid,daap.songartist,daap.songalbumartist'
281
+ query = "('daap.songartist!:'+('com.apple.itunes.extended-media-kind:1','com.apple.itunes.extended-media-kind:32'))"
282
+ do_action(url, meta: meta, type: 'music', :'group-type' => 'albums', sort: 'artist', :'include-sort-headers' => 1, query: query, clean_url: true, model: Albums).items
265
283
  end
266
284
 
267
285
  private
@@ -286,6 +304,7 @@ module DACPClient
286
304
  params['session-id'] = @session_id.to_s
287
305
  action = '/ctrl-int/1' + action unless clean_url
288
306
  end
307
+
289
308
  params['hsgid'] = @hsgid unless @hsgid.nil?
290
309
  params = filter_param_keys(params)
291
310
  result = @client.get do |request|
@@ -299,13 +318,13 @@ module DACPClient
299
318
  end
300
319
 
301
320
  def filter_param_keys(params)
302
- Hash[ params.map { |k, v| [k.to_s.tr('_', '-'), v] }]
321
+ Hash[params.map { |k, v| [k.to_s.tr('_', '-'), v] }]
303
322
  end
304
323
 
305
324
  def parse_result(result, model)
306
325
  if !result.success?
307
326
  fail DACPForbiddenError, result
308
- elsif result.headers['Content-Type'] == 'application/x-dmap-tagged'
327
+ elsif result.headers['Content-Type'] == 'application/x-dmap-tagged' && result.body.length > 0
309
328
  res = DMAPParser::Parser.parse(result.body)
310
329
  model ? model.new(res) : res
311
330
  else
@@ -0,0 +1,10 @@
1
+ module DACPClient
2
+ class Album < Model
3
+ dmap_tag :mlit
4
+ dmap_attribute :item_id, :miid
5
+ dmap_attribute :name, :minm
6
+ dmap_attribute :count, :mimc
7
+ dmap_attribute :album_artist, :asaa
8
+ dmap_attribute :persistent_id, :mper
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module DACPClient
2
+ class Albums < Model
3
+ dmap_tag :agal
4
+ dmap_attribute :status, :mstt
5
+ dmap_attribute :update_type, :muty
6
+ dmap_attribute :container_count, :mtco
7
+ dmap_attribute :returned_count, :mrco
8
+ dmap_container :items, :mlcl, DACPClient::Album
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ module DACPClient
2
+ class Artist < Model
3
+ dmap_tag :mlit
4
+ dmap_attribute :item_id, :miid
5
+ dmap_attribute :name, :minm
6
+ dmap_attribute :count, :mimc
7
+ dmap_attribute :album_count, :agac
8
+ dmap_attribute :song_artist_id, :asri
9
+ dmap_attribute :persistent_id, :mper
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ module DACPClient
2
+ class Artists < Model
3
+ dmap_tag :agar
4
+ dmap_attribute :status, :mstt
5
+ dmap_attribute :update_type, :muty
6
+ dmap_attribute :container_count, :mtco
7
+ dmap_attribute :returned_count, :mrco
8
+ dmap_container :items, :mlcl, DACPClient::Artist
9
+ end
10
+ end
@@ -1,4 +1,4 @@
1
1
  # The DACPClient module
2
2
  module DACPClient
3
- VERSION = '0.3.2'
3
+ VERSION = '0.3.4'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dacpclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jurriaan Pruis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-07 00:00:00.000000000 Z
11
+ date: 2014-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.1.0
61
+ version: 0.2.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.1.0
68
+ version: 0.2.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: thor
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +150,34 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 0.27.1
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 0.27.1
167
+ - !ruby/object:Gem::Dependency
168
+ name: minitest
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 5.4.0
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 5.4.0
153
181
  description: A DACP (iTunes Remote protocol) client
154
182
  email:
155
183
  - email@jurriaanpruis.nl
@@ -174,6 +202,10 @@ files:
174
202
  - lib/dacpclient/faraday/flatter_params_encoder.rb
175
203
  - lib/dacpclient/faraday/gzip.rb
176
204
  - lib/dacpclient/model.rb
205
+ - lib/dacpclient/models/album.rb
206
+ - lib/dacpclient/models/albums.rb
207
+ - lib/dacpclient/models/artist.rb
208
+ - lib/dacpclient/models/artists.rb
177
209
  - lib/dacpclient/models/database.rb
178
210
  - lib/dacpclient/models/databases.rb
179
211
  - lib/dacpclient/models/pair_info.rb
@@ -204,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
236
  version: '0'
205
237
  requirements: []
206
238
  rubyforge_project:
207
- rubygems_version: 2.2.2
239
+ rubygems_version: 2.4.4
208
240
  signing_key:
209
241
  specification_version: 4
210
242
  summary: A DACP (iTunes Remote protocol) client