kodi_client 0.6.4 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/kodi_client.gemspec +2 -2
  4. data/lib/kodi_client/extensions/creatable.rb +2 -2
  5. data/lib/kodi_client/methods/addons.rb +2 -2
  6. data/lib/kodi_client/methods/audio_library.rb +292 -4
  7. data/lib/kodi_client/methods/files.rb +4 -8
  8. data/lib/kodi_client/methods/profiles.rb +3 -5
  9. data/lib/kodi_client/types/audio/audio_artist_role_type.rb +21 -0
  10. data/lib/kodi_client/types/audio/{details_album_type.rb → audio_details_album_type.rb} +1 -1
  11. data/lib/kodi_client/types/audio/audio_details_artist_type.rb +54 -0
  12. data/lib/kodi_client/types/audio/audio_details_media_type.rb +4 -3
  13. data/lib/kodi_client/types/audio/audio_details_role_type.rb +25 -0
  14. data/lib/kodi_client/types/audio/audio_details_song_type.rb +76 -0
  15. data/lib/kodi_client/types/audio/audio_fields_album_type.rb +0 -1
  16. data/lib/kodi_client/types/audio/audio_fields_artist_type.rb +39 -0
  17. data/lib/kodi_client/types/audio/audio_fields_role_type.rb +15 -0
  18. data/lib/kodi_client/types/audio/audio_fields_song_type.rb +61 -0
  19. data/lib/kodi_client/types/audio/available_art_type.rb +21 -0
  20. data/lib/kodi_client/types/audio/get_albums_returned_type.rb +1 -1
  21. data/lib/kodi_client/types/audio/get_artists_returned_type.rb +23 -0
  22. data/lib/kodi_client/types/audio/get_genres_returned_type.rb +24 -0
  23. data/lib/kodi_client/types/audio/get_roles_returned_type.rb +25 -0
  24. data/lib/kodi_client/types/audio/get_songs_returned_type.rb +25 -0
  25. data/lib/kodi_client/types/audio/get_sources_return_type.rb +25 -0
  26. data/lib/kodi_client/types/audio/property_name_type.rb +25 -0
  27. data/lib/kodi_client/types/audio/property_value_type.rb +33 -0
  28. data/lib/kodi_client/types/library/library_details_genre_type.rb +27 -0
  29. data/lib/kodi_client/types/library/library_details_source_type.rb +26 -0
  30. data/lib/kodi_client/types/library/library_fields_genre_type.rb +17 -0
  31. data/lib/kodi_client/types/library/library_fields_source_type.rb +17 -0
  32. data/lib/kodi_client/types/list/list_limits_type.rb +4 -0
  33. data/lib/kodi_client/types/list/list_sort_type.rb +6 -0
  34. data/lib/kodi_client/types/media/media_artwork_type.rb +4 -0
  35. data/lib/kodi_client.rb +21 -1
  36. metadata +25 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3459e42458d3c4ec86456bd1e5ab18261a636ca9a61a48b6d2db3dbb0706b72
4
- data.tar.gz: a1c20cd980f8c5c63fe69652e737495313110268b184cf2b58cf88ff850908b4
3
+ metadata.gz: 7bbe8ae31b1c2f5092c6e6fa02a4641d3a73393dcedb44cd08e75f977b85b19b
4
+ data.tar.gz: 2d5362b89b5ef4e02542a2fcf9e548a8d33f38575496bbcd48a2b40c1c378003
5
5
  SHA512:
6
- metadata.gz: 707936b7399a44bb81e2a8efe79700c4267f74ed9f1307503d7f073ac1111b929169cb90bf412cfd615881cd0d92e06e044d4acb09930a059d3b09cfcfd3b215
7
- data.tar.gz: 0c5779c4534c5b8a65d571764d0ecfb4cfb1defbc868c499cc977a98783f095fcd96ecf2a829e0fa278565c46e91eb312647b2ab5933f92e4fe19d4a257f7898
6
+ metadata.gz: 89796e76db1800a22e165a2bec14b2c3365318f87d7f57cf2861cdf2646ff0ca1e1108b47f0399782f4491fa9c2604e8fadec6f83f878b15e420bd74901510e8
7
+ data.tar.gz: f42bf33a0651081ec388e7bf5142d5284e00cd5d8e8d0b07d5766c05ea18197f7c523b97642fe993e6e789576c677945b1949764d592bdecab0d635d661d7edc
data/README.md CHANGED
@@ -5,6 +5,7 @@ RubyKodiClient is a work-in-progress client for [Kodi JSON API v12](https://kodi
5
5
  Currently implemented are the following Methods:
6
6
  * Addons
7
7
  * Application
8
+ * AudioLibrary
8
9
  * Favourites
9
10
  * Files
10
11
  * GUI
data/kodi_client.gemspec CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'kodi_client'
5
- spec.version = '0.6.4'
5
+ spec.version = '0.7.0'
6
6
  spec.authors = ['Christian Feier']
7
7
  spec.email = ['christian.feier@gmail.com']
8
8
 
9
9
  spec.summary = 'A work-in-progress client for Kodi JSON API v2.'
10
- spec.description = 'A client for the Kodi JSON API v12, currently implemented methods are Addons, Application, '\
10
+ spec.description = 'A client for the Kodi JSON API v12, currently implemented methods are Addons, Application, AudioLibrary '\
11
11
  'Favourites, Files, GUI, Input, Player, Profiles and System (more will be added with the time). '\
12
12
  'For more information how to use it and how to activate Remote Control in Kodi, '\
13
13
  'please check the github page https://github.com/cfe86/RubyKodiClient'
@@ -39,7 +39,7 @@ module KodiClient
39
39
  # creates a Creatable using the provided hash and the attr_reader fields, or if given #fields_to_map instead
40
40
  # The parameters will be passed to initialize the object in the same order as they are passed to attr_reader
41
41
  # or #fields_to_map
42
- # @param hash [Hash] the given hash to convert to an object
42
+ # @param hash [Hash, nil] the given hash to convert to an object
43
43
  # @return the created object, or nil if the given hash is nil
44
44
  def create(hash)
45
45
  return nil if hash.nil?
@@ -83,7 +83,7 @@ module KodiClient
83
83
 
84
84
  # extracts the given field from the given hash and optionally applies mapping if given
85
85
  # @param field [String] the field name
86
- # @param hash [Hash] the hash where to extract the field from
86
+ # @param hash [Hash, nil] the hash where to extract the field from
87
87
  # @param mapping [Hash<String, CreateMap>] optional mapping for complex types
88
88
  # @return the extracted object or nil, if the hash is empty, or [] if the expected value was a list and was nil
89
89
  def self.extract_field_from_hash(field, hash, mapping)
@@ -13,14 +13,14 @@ module KodiClient
13
13
  def get_addons(type = Types::Addons::AddonTypes::UNKNOWN,
14
14
  content = Types::Addons::AddonContent::UNKNOWN,
15
15
  enabled = nil, properties = [],
16
- limit = Types::List::ListLimits.new(0, 50), installed = nil, kodi_id = 1)
16
+ limits = Types::List::ListLimits.new(0, 50), installed = nil, kodi_id = 1)
17
17
  request = KodiRequest.new(kodi_id, GET_ADDONS,
18
18
  {
19
19
  'type' => type,
20
20
  'content' => content,
21
21
  'enabled' => enabled.nil? || !enabled ? 'all' : 'enabled',
22
22
  'properties' => properties,
23
- 'limits' => { 'start' => limit.list_start, 'end' => limit.list_end },
23
+ 'limits' => limits.to_h,
24
24
  'installed' => installed.nil? || !installed ? 'all' : 'installed'
25
25
  })
26
26
  json = invoke_api(request)
@@ -9,6 +9,24 @@ module KodiClient
9
9
  EXPORT = 'AudioLibrary.Export'
10
10
  GET_ALBUM_DETAILS = 'AudioLibrary.GetAlbumDetails'
11
11
  GET_ALBUMS = 'AudioLibrary.GetAlbums'
12
+ GET_ARTIST_DETAILS = 'AudioLibrary.GetArtistDetails'
13
+ GET_ARTISTS = 'AudioLibrary.GetArtists'
14
+ GET_AVAILABLE_ART = 'AudioLibrary.GetAvailableArt'
15
+ GET_AVAILABLE_ART_TYPES = 'AudioLibrary.GetAvailableArtTypes'
16
+ GET_GENRES = 'AudioLibrary.GetGenres'
17
+ GET_PROPERTIES = 'AudioLibrary.GetProperties'
18
+ GET_RECENTLY_ADDED_ALBUMS = 'AudioLibrary.GetRecentlyAddedAlbums'
19
+ GET_RECENTLY_ADDED_SONGS = 'AudioLibrary.GetRecentlyAddedSongs'
20
+ GET_RECENTLY_PLAYED_ALBUMS = 'AudioLibrary.GetRecentlyPlayedAlbums'
21
+ GET_RECENTLY_PLAYED_SONGS = 'AudioLibrary.GetRecentlyPlayedSongs'
22
+ GET_ROLES = 'AudioLibrary.GetRoles'
23
+ GET_SONG_DETAILS = 'AudioLibrary.GetSongDetails'
24
+ GET_SOURCES = 'AudioLibrary.GetSources'
25
+ GET_SONGS = 'AudioLibrary.GetSongs'
26
+ SCAN = 'AudioLibrary.Scan'
27
+ SET_ALBUM_DETAILS = 'AudioLibrary.SetAlbumDetails'
28
+ SET_ARTIST_DETAILS = 'AudioLibrary.SetArtistDetails'
29
+ SET_SONG_DETAILS = 'AudioLibrary.SetSongDetails'
12
30
 
13
31
  def clean(show_dialogs = true, kodi_id = 1)
14
32
  request = KodiRequest.new(kodi_id, CLEAN, { 'showdialogs' => show_dialogs })
@@ -16,6 +34,12 @@ module KodiClient
16
34
  KodiResponse.new(json)
17
35
  end
18
36
 
37
+ def scan(show_dialogs = true, kodi_id = 1)
38
+ request = KodiRequest.new(kodi_id, SCAN, { 'showdialogs' => show_dialogs })
39
+ json = invoke_api(request)
40
+ KodiResponse.new(json)
41
+ end
42
+
19
43
  def export(path, kodi_id = 1)
20
44
  request = KodiRequest.new(kodi_id, EXPORT, { 'options' => { 'path' => path } })
21
45
  json = invoke_api(request)
@@ -25,6 +49,8 @@ module KodiClient
25
49
  def get_album_details(album_id, properties = Types::Audio::AudioFieldsAlbum.all_properties, kodi_id = 1)
26
50
  request = KodiRequest.new(kodi_id, GET_ALBUM_DETAILS, { 'albumid' => album_id, 'properties' => properties })
27
51
  json = invoke_api(request)
52
+ album_details = json['result'].nil? ? nil : json['result']['albumdetails']
53
+ json['result'] = Types::Audio::AudioDetailsAlbum.create(album_details)
28
54
  KodiResponse.new(json)
29
55
  end
30
56
 
@@ -33,14 +59,276 @@ module KodiClient
33
59
  sort = Types::List::ListSort.new, include_singles = false, all_roles = false, kodi_id = 1)
34
60
  request = KodiRequest.new(kodi_id, GET_ALBUMS,
35
61
  { 'properties' => properties,
36
- 'limits' => { 'start' => limits.list_start, 'end' => limits.list_end },
37
- 'sort' => { 'ignorearticle' => sort.ignore_article, 'method' => sort.method,
38
- 'order' => sort.order,
39
- 'useartistsortname' => sort.use_artist_sort_name },
62
+ 'limits' => limits.to_h,
63
+ 'sort' => sort.to_h,
40
64
  'includesingles' => include_singles, 'allroles' => all_roles })
41
65
  json = invoke_api(request)
66
+ json['result'] = Types::Audio::GetAlbumsReturned.create(json['result'])
67
+ KodiResponse.new(json)
68
+ end
69
+
70
+ def get_artist_details(artist_id, properties = Types::Audio::AudioFieldsArtist.all_properties, kodi_id = 1)
71
+ request = KodiRequest.new(kodi_id, GET_ARTIST_DETAILS, { 'artistid' => artist_id, 'properties' => properties })
72
+ json = invoke_api(request)
73
+ artist_details = json['result'].nil? ? nil : json['result']['artistdetails']
74
+ json['result'] = Types::Audio::AudioDetailsArtist.create(artist_details)
75
+ KodiResponse.new(json)
76
+ end
77
+
78
+ def get_artists(album_artists_only = nil, properties = Types::Audio::AudioFieldsArtist.all_properties,
79
+ limits = Types::List::ListLimits.new(0, 50),
80
+ sort = Types::List::ListSort.new, all_roles = false, kodi_id = 1)
81
+ params = { 'albumartistsonly' => album_artists_only, 'properties' => properties,
82
+ 'limits' => limits.to_h, 'sort' => sort.to_h, 'allroles' => all_roles }
83
+ params['albumartistsonly'] = album_artists_only unless album_artists_only.nil?
84
+ request = KodiRequest.new(kodi_id, GET_ARTISTS, params)
85
+ json = invoke_api(request)
86
+ json['result'] = Types::Audio::GetArtistsReturned.create(json['result'])
87
+ KodiResponse.new(json)
88
+ end
89
+
90
+ def get_available_art_for_artist(artist_id, art_type = '', kodi_id = 1)
91
+ get_available_art({ 'artistid' => artist_id }, art_type, kodi_id)
92
+ end
93
+
94
+ def get_available_art_for_album(artist_id, art_type = '', kodi_id = 1)
95
+ get_available_art({ 'albumid' => artist_id }, art_type, kodi_id)
96
+ end
97
+
98
+ def get_available_art(id, art_type = '', kodi_id = 1)
99
+ request = KodiRequest.new(kodi_id, GET_AVAILABLE_ART, { 'item' => id, 'arttype' => art_type })
100
+ json = invoke_api(request)
101
+ available_arts = json['result'].nil? ? nil : json['result']['availableart']
102
+ json['result'] = Types::Audio::AvailableArt.create_list(available_arts)
103
+ KodiResponse.new(json)
104
+ end
105
+
106
+ def get_available_art_types_for_artist(artist_id, kodi_id = 1)
107
+ get_available_art_types({ 'artistid' => artist_id }, kodi_id)
108
+ end
109
+
110
+ def get_available_art_types_for_album(album_id, kodi_id = 1)
111
+ get_available_art_types({ 'albumid' => album_id }, kodi_id)
112
+ end
113
+
114
+ def get_available_art_types(id, kodi_id = 1)
115
+ request = KodiRequest.new(kodi_id, GET_AVAILABLE_ART_TYPES, { 'item' => id })
116
+ json = invoke_api(request)
117
+ available_arts = json['result'].nil? ? [] : json['result']['availablearttypes']
118
+ json['result'] = available_arts
119
+ KodiResponse.new(json)
120
+ end
121
+
122
+ def get_genres(properties = Types::Library::LibraryFieldsGenre.all_properties,
123
+ limits = Types::List::ListLimits.new(0, 50),
124
+ sort = Types::List::ListSort.new, kodi_id = 1)
125
+ request = KodiRequest.new(kodi_id, GET_GENRES, { 'properties' => properties,
126
+ 'limits' => limits.to_h,
127
+ 'sort' => sort.to_h })
128
+ json = invoke_api(request)
129
+ json['result'] = Types::Audio::GetGenresReturned.create(json['result'])
130
+ KodiResponse.new(json)
131
+ end
132
+
133
+ def get_properties(properties = Types::Audio::PropertyName.all_properties, kodi_id = 1)
134
+ request = KodiRequest.new(kodi_id, GET_PROPERTIES, { 'properties' => properties, })
135
+ json = invoke_api(request)
136
+ json['result'] = Types::Audio::PropertyValue.create(json['result'])
137
+ KodiResponse.new(json)
138
+ end
139
+
140
+ def get_recently_added_albums(properties = Types::Audio::AudioFieldsAlbum.all_properties,
141
+ limits = Types::List::ListLimits.new(0, 50),
142
+ sort = Types::List::ListSort.new, kodi_id = 1)
143
+ request = KodiRequest.new(kodi_id, GET_RECENTLY_ADDED_ALBUMS,
144
+ { 'properties' => properties,
145
+ 'limits' => limits.to_h,
146
+ 'sort' => sort.to_h })
147
+ json = invoke_api(request)
148
+ json['result'] = Types::Audio::GetAlbumsReturned.create(json['result'])
149
+ KodiResponse.new(json)
150
+ end
151
+
152
+ def get_recently_added_songs(album_limit = 100, properties = Types::Audio::AudioFieldsSong.all_properties,
153
+ limits = Types::List::ListLimits.new(0, 50),
154
+ sort = Types::List::ListSort.new, kodi_id = 1)
155
+ request = KodiRequest.new(kodi_id, GET_RECENTLY_ADDED_SONGS,
156
+ { 'albumlimit' => album_limit,
157
+ 'properties' => properties,
158
+ 'limits' => limits.to_h,
159
+ 'sort' => sort.to_h })
160
+ json = invoke_api(request)
161
+ json['result'] = Types::Audio::GetSongsReturned.create(json['result'])
162
+ KodiResponse.new(json)
163
+ end
164
+
165
+ def get_recently_played_albums(properties = Types::Audio::AudioFieldsAlbum.all_properties,
166
+ limits = Types::List::ListLimits.new(0, 50),
167
+ sort = Types::List::ListSort.new, kodi_id = 1)
168
+ request = KodiRequest.new(kodi_id, GET_RECENTLY_PLAYED_ALBUMS,
169
+ { 'properties' => properties,
170
+ 'limits' => limits.to_h,
171
+ 'sort' => sort.to_h })
172
+ json = invoke_api(request)
173
+ json['result'] = Types::Audio::GetAlbumsReturned.create(json['result'])
174
+ KodiResponse.new(json)
175
+ end
176
+
177
+ def get_recently_played_songs(album_limit = 100, properties = Types::Audio::AudioFieldsSong.all_properties,
178
+ limits = Types::List::ListLimits.new(0, 50),
179
+ sort = Types::List::ListSort.new, kodi_id = 1)
180
+ request = KodiRequest.new(kodi_id, GET_RECENTLY_PLAYED_SONGS,
181
+ { 'albumlimit' => album_limit,
182
+ 'properties' => properties,
183
+ 'limits' => limits.to_h,
184
+ 'sort' => sort.to_h })
185
+ json = invoke_api(request)
186
+ json['result'] = Types::Audio::GetSongsReturned.create(json['result'])
187
+ KodiResponse.new(json)
188
+ end
189
+
190
+ def get_roles(properties = Types::Audio::AudioFieldsRole.all_properties,
191
+ limits = Types::List::ListLimits.new(0, 50),
192
+ sort = Types::List::ListSort.new, kodi_id = 1)
193
+ request = KodiRequest.new(kodi_id, GET_ROLES, { 'properties' => properties,
194
+ 'limits' => limits.to_h,
195
+ 'sort' => sort.to_h })
196
+ json = invoke_api(request)
197
+ json['result'] = Types::Audio::GetRolesReturned.create(json['result'])
198
+ KodiResponse.new(json)
199
+ end
200
+
201
+ def get_song_details(song_id, properties = Types::Audio::AudioFieldsSong.all_properties, kodi_id = 1)
202
+ request = KodiRequest.new(kodi_id, GET_SONG_DETAILS, { 'songid' => song_id, 'properties' => properties })
203
+ json = invoke_api(request)
204
+ song_details = json['result'].nil? ? nil : json['result']['songdetails']
205
+ json['result'] = Types::Audio::AudioDetailsSong.create(song_details)
206
+ KodiResponse.new(json)
207
+ end
208
+
209
+ def get_sources(properties = Types::Library::LibraryFieldsSource.all_properties,
210
+ limits = Types::List::ListLimits.new(0, 50),
211
+ sort = Types::List::ListSort.new, kodi_id = 1)
212
+ request = KodiRequest.new(kodi_id, GET_SOURCES,
213
+ { 'properties' => properties,
214
+ 'limits' => limits.to_h,
215
+ 'sort' => sort.to_h })
216
+ json = invoke_api(request)
217
+ json['result'] = Types::Audio::GetSourcesReturned.create(json['result'])
218
+ KodiResponse.new(json)
219
+ end
220
+
221
+ def get_songs(properties = Types::Audio::AudioFieldsSong.all_properties,
222
+ limits = Types::List::ListLimits.new(0, 50),
223
+ sort = Types::List::ListSort.new, include_singles = true, all_roles = true,
224
+ singles_only = false, kodi_id = 1)
225
+ request = KodiRequest.new(kodi_id, GET_SONGS,
226
+ { 'properties' => properties,
227
+ 'limits' => limits.to_h,
228
+ 'sort' => sort.to_h, 'includesingles' => include_singles, 'allroles' => all_roles,
229
+ 'singlesonly' => singles_only })
230
+ json = invoke_api(request)
231
+ json['result'] = Types::Audio::GetSongsReturned.create(json['result'])
232
+ KodiResponse.new(json)
233
+ end
234
+
235
+ def set_album_details(album_id, title = nil, artist = nil, description = nil, genre = nil, theme = nil,
236
+ mood = nil, style = nil, type = nil, album_label = nil, rating = nil, year = nil,
237
+ user_rating = nil, votes = nil, musicbrainz_album_id = nil,
238
+ musicbrainz_release_group_id = nil, sort_artist = nil, display_artist = nil,
239
+ musicbrainz_album_artist_id = nil, art = nil, is_box_set = nil, release_date = nil,
240
+ original_date = nil, kodi_id = 1)
241
+ params = { 'albumid' => album_id }
242
+ params['title'] = title unless title.nil?
243
+ params['artist'] = artist unless artist.nil?
244
+ params['description'] = description unless description.nil?
245
+ params['genre'] = genre unless genre.nil?
246
+ params['theme'] = theme unless theme.nil?
247
+ params['mood'] = mood unless mood.nil?
248
+ params['style'] = style unless style.nil?
249
+ params['type'] = type unless type.nil?
250
+ params['albumlabel'] = album_label unless album_label.nil?
251
+ params['rating'] = rating unless rating.nil?
252
+ params['year'] = year unless year.nil?
253
+ params['userrating'] = user_rating unless user_rating.nil?
254
+ params['votes'] = votes unless votes.nil?
255
+ params['musicbrainzalbumid'] = musicbrainz_album_id unless musicbrainz_album_id.nil?
256
+ params['musicbrainzreleasegroupid'] = musicbrainz_release_group_id unless musicbrainz_release_group_id.nil?
257
+ params['sortartist'] = sort_artist unless sort_artist.nil?
258
+ params['displayartist'] = display_artist unless display_artist.nil?
259
+ params['musicbrainzalbumartistid'] = musicbrainz_album_artist_id unless musicbrainz_album_artist_id.nil?
260
+ params['art'] = art.to_h unless art.nil?
261
+ params['isboxset'] = is_box_set unless is_box_set.nil?
262
+ params['releasedate'] = release_date unless release_date.nil?
263
+ params['originaldate'] = original_date unless original_date.nil?
264
+
265
+ request = KodiRequest.new(kodi_id, SET_ALBUM_DETAILS, params)
266
+ json = invoke_api(request)
267
+ KodiResponse.new(json)
268
+ end
269
+
270
+ def set_artist_details(artist_id, artist = nil, instrument = nil, style = nil, mood = nil, born = nil,
271
+ formed = nil, description = nil, genre = nil, died = nil, disbanded = nil,
272
+ years_active = nil, musicbrainz_artist_id = nil, sort_name = nil, type = nil,
273
+ gender = nil, disambiguation = nil, art = nil, kodi_id = 1)
274
+ params = { 'artistid' => artist_id }
275
+ params['artist'] = artist unless artist.nil?
276
+ params['instrument'] = instrument unless instrument.nil?
277
+ params['style'] = style unless style.nil?
278
+ params['mood'] = mood unless mood.nil?
279
+ params['born'] = born unless born.nil?
280
+ params['formed'] = formed unless formed.nil?
281
+ params['description'] = description unless description.nil?
282
+ params['genre'] = genre unless genre.nil?
283
+ params['died'] = died unless died.nil?
284
+ params['disbanded'] = disbanded unless disbanded.nil?
285
+ params['yearsactive'] = years_active unless years_active.nil?
286
+ params['musicbrainzartistid'] = musicbrainz_artist_id unless musicbrainz_artist_id.nil?
287
+ params['sortname'] = sort_name unless sort_name.nil?
288
+ params['type'] = type unless type.nil?
289
+ params['gender'] = gender unless gender.nil?
290
+ params['disambiguation'] = disambiguation unless disambiguation.nil?
291
+ params['art'] = art.to_h unless art.nil?
292
+ request = KodiRequest.new(kodi_id, SET_ARTIST_DETAILS, params)
293
+ json = invoke_api(request)
42
294
  KodiResponse.new(json)
43
295
  end
296
+
297
+ def set_song_details(song_id, title = nil, artist = nil, genre = nil, year = nil, rating = nil, track = nil,
298
+ disc = nil, duration = nil, comment = nil, musicbrainz_track_id = nil,
299
+ musicbrainz_artist_id = nil, play_count = nil, last_played = nil, user_rating = nil,
300
+ votes = nil, display_artist = nil, sort_artist = nil, mood = nil, art = nil,
301
+ release_date = nil, original_date = nil, bpm = nil, kodi_id = 1)
302
+ params = { 'songid' => song_id }
303
+ params['title'] = title unless title.nil?
304
+ params['artist'] = artist unless artist.nil?
305
+ params['genre'] = genre unless genre.nil?
306
+ params['year'] = year unless year.nil?
307
+ params['rating'] = rating unless rating.nil?
308
+ params['track'] = track unless track.nil?
309
+ params['disc'] = disc unless disc.nil?
310
+ params['duration'] = duration unless duration.nil?
311
+ params['comment'] = comment unless comment.nil?
312
+ params['musicbrainztrackid'] = musicbrainz_track_id unless musicbrainz_track_id.nil?
313
+ params['musicbrainzartistid'] = musicbrainz_artist_id unless musicbrainz_artist_id.nil?
314
+ params['playcount'] = play_count unless play_count.nil?
315
+ params['lastplayed'] = last_played unless last_played.nil?
316
+ params['userrating'] = user_rating unless user_rating.nil?
317
+ params['votes'] = votes unless votes.nil?
318
+ params['displayartist'] = display_artist unless display_artist.nil?
319
+ params['sortartist'] = sort_artist unless sort_artist.nil?
320
+ params['mood'] = mood unless mood.nil?
321
+ params['art'] = art.to_h unless art.nil?
322
+ params['releasedate'] = release_date unless release_date.nil?
323
+ params['originaldate'] = original_date unless original_date.nil?
324
+ params['bpm'] = bpm unless bpm.nil?
325
+
326
+ request = KodiRequest.new(kodi_id, SET_SONG_DETAILS, params)
327
+ json = invoke_api(request)
328
+ KodiResponse.new(json)
329
+ end
330
+
331
+ private :get_available_art, :get_available_art_types
44
332
  end
45
333
  end
46
334
  end
@@ -20,10 +20,8 @@ module KodiClient
20
20
  'directory' => directory,
21
21
  'media' => media,
22
22
  'properties' => properties,
23
- 'sort' => { 'ignorearticle' => sort.ignore_article, 'method' => sort.method,
24
- 'order' => sort.order,
25
- 'useartistsortname' => sort.use_artist_sort_name },
26
- 'limits' => { 'start' => limits.list_start, 'end' => limits.list_end }
23
+ 'sort' => sort.to_h,
24
+ 'limits' => limits.to_h
27
25
  })
28
26
  json = invoke_api(request)
29
27
  result = KodiClient::Types::Files::GetDirectoryReturned.create(json['result'])
@@ -51,10 +49,8 @@ module KodiClient
51
49
  request = KodiRequest.new(kodi_id, GET_SOURCES,
52
50
  {
53
51
  'media' => media,
54
- 'sort' => { 'ignorearticle' => sort.ignore_article, 'method' => sort.method,
55
- 'order' => sort.order,
56
- 'useartistsortname' => sort.use_artist_sort_name },
57
- 'limits' => { 'start' => limits.list_start, 'end' => limits.list_end }
52
+ 'sort' => sort.to_h,
53
+ 'limits' => limits.to_h
58
54
  })
59
55
  json = invoke_api(request)
60
56
  result = KodiClient::Types::Files::GetSourcesReturned.create(json['result'])
@@ -18,14 +18,12 @@ module KodiClient
18
18
  end
19
19
 
20
20
  def get_profiles(properties = Types::Profiles::FieldsProfile.all_properties,
21
- limit = Types::List::ListLimits.new(0, 50),
21
+ limits = Types::List::ListLimits.new(0, 50),
22
22
  sort = Types::List::ListSort.new, kodi_id = 1)
23
23
  request = KodiRequest.new(kodi_id, GET_PROFILES,
24
24
  { 'properties' => properties,
25
- 'limits' => { 'start' => limit.list_start, 'end' => limit.list_end },
26
- 'sort' => { 'ignorearticle' => sort.ignore_article, 'method' => sort.method,
27
- 'order' => sort.order,
28
- 'useartistsortname' => sort.use_artist_sort_name } })
25
+ 'limits' => limits.to_h,
26
+ 'sort' => sort.to_h })
29
27
  json = invoke_api(request)
30
28
  result = Types::Profiles::GetProfilesReturned.create(json['result'])
31
29
  json['result'] = result
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+
7
+ # Audio.Artist.Roles https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Artist.Roles
8
+ class AudioArtistRole
9
+ include Extensions::Comparable
10
+ extend Extensions::Creatable
11
+
12
+ attr_reader :role, :role_id
13
+
14
+ def initialize(role, role_id)
15
+ @role = role
16
+ @role_id = role_id
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -4,7 +4,7 @@ module KodiClient
4
4
  module Types
5
5
  module Audio
6
6
  # Audio.Details.Album https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Album
7
- class DetailsAlbum
7
+ class AudioDetailsAlbum
8
8
  include AudioDetailsMedia
9
9
  include Extensions::Comparable
10
10
  extend Extensions::Creatable
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Details.Artist https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Artist
7
+ class AudioDetailsArtist
8
+ include AudioDetailsBase
9
+ include Extensions::Comparable
10
+ extend Extensions::Creatable
11
+
12
+ attr_reader :artist, :artist_id, :born, :compilation_artist, :description, :died, :disambiguation, :disbanded,
13
+ :formed, :gender, :instrument, :is_album_artist, :mood, :musicbrainz_artist_id, :roles, :song_genres,
14
+ :sort_name, :source_id, :style, :type, :years_active
15
+
16
+ fields_to_map %w[artist artist_id born compilation_artist description died disambiguation disbanded
17
+ formed gender instrument is_album_artist mood musicbrainz_artist_id roles song_genres
18
+ sort_name source_id style type years_active art date_added genre fan_art thumbnail
19
+ label]
20
+
21
+ type_mapping ['songgenres', Genre, true], ['art', Types::Media::MediaArtwork],
22
+ ['roles', AudioArtistRole, true]
23
+
24
+ def initialize(artist, artist_id, born, compilation_artist, description, died, disambiguation, disbanded,
25
+ formed, gender, instrument, is_album_artist, mood, musicbrainz_artist_id, roles, song_genres,
26
+ sort_name, source_id, style, type, years_active, art, date_added, genre, fan_art, thumbnail,
27
+ label)
28
+ @artist = artist
29
+ @artist_id = artist_id
30
+ @born = born
31
+ @compilation_artist = compilation_artist
32
+ @description = description
33
+ @died = died
34
+ @disambiguation = disambiguation
35
+ @disbanded = disbanded
36
+ @formed = formed
37
+ @gender = gender
38
+ @instrument = instrument
39
+ @is_album_artist = is_album_artist
40
+ @mood = mood
41
+ @musicbrainz_artist_id = musicbrainz_artist_id
42
+ @roles = roles
43
+ @song_genres = song_genres
44
+ @sort_name = sort_name
45
+ @source_id = source_id
46
+ @style = style
47
+ @type = type
48
+ @years_active = years_active
49
+ audio_details_base(art, date_added, genre, fan_art, thumbnail, label)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -16,9 +16,10 @@ module KodiClient
16
16
 
17
17
  def audio_details_media_by_hash(hash)
18
18
  audio_details_media(*Extensions::Creatable.hash_to_arr(hash, %w[artist artist_id display_artist
19
- musicbrainz_album_artist_id original_date rating
20
- release_date sort_artist title user_rating votes year art
21
- date_added genre fan_art thumbnail label],
19
+ musicbrainz_album_artist_id original_date
20
+ rating release_date sort_artist title
21
+ user_rating votes year art date_added
22
+ genre fan_art thumbnail label],
22
23
  audio_details_base_mappings))
23
24
  end
24
25
 
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Details.Role https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Role
7
+ class AudioDetailsRole
8
+ include Items::ItemDetailsBase
9
+ include Extensions::Comparable
10
+ extend Extensions::Creatable
11
+
12
+ attr_reader :role_id, :title
13
+
14
+ fields_to_map %w[role_id title label]
15
+
16
+ def initialize(role_id, title, label)
17
+ @role_id = role_id
18
+ @title = title
19
+ item_details_base(label)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Details.Song https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Song
7
+ class AudioDetailsSong
8
+ include AudioDetailsMedia
9
+ include Extensions::Comparable
10
+ extend Extensions::Creatable
11
+ extend AudioDetailsMedia
12
+
13
+ attr_reader :album, :album_artist, :album_artist_id, :album_id, :album_release_type, :bitrate, :bpm, :channels,
14
+ :comment, :contributors, :disc, :disc_title, :display_composer, :display_conductor,
15
+ :display_lyricist, :display_orchestra, :duration, :file, :genre_id, :last_played, :lyrics, :mood,
16
+ :musicbrainz_artist_id, :musicbrainz_track_id, :play_count, :sample_rate, :song_id, :source_id,
17
+ :track
18
+
19
+ fields_to_map %w[album album_artist album_artist_id album_id album_release_type bitrate bpm channels
20
+ comment contributors disc disc_title display_composer display_conductor display_lyricist
21
+ display_orchestra duration file genre_id last_played lyrics mood musicbrainz_artist_id
22
+ musicbrainz_track_id play_count sample_rate song_id source_id track
23
+ artist artist_id display_artist musicbrainz_album_artist_id original_date
24
+ rating release_date sort_artist title user_rating votes year
25
+ art date_added genre fan_art thumbnail label]
26
+
27
+ def self.lazy_type_mapping
28
+ mapping = { 'contributors' => Extensions::Creatable::CreateMap.new(Types::Audio::AudioContributor, true) }
29
+ mapping.merge(audio_details_media_mappings)
30
+ end
31
+
32
+ def initialize(album, album_artist, album_artist_id, album_id, album_release_type, bitrate, bpm, channels,
33
+ comment, contributors, disc, disc_title, display_composer, display_conductor, display_lyricist,
34
+ display_orchestra, duration, file, genre_id, last_played, lyrics, mood, musicbrainz_artist_id,
35
+ musicbrainz_track_id, play_count, sample_rate, song_id, source_id, track,
36
+ artist, artist_id, display_artist, musicbrainz_album_artist_id, original_date,
37
+ rating, release_date, sort_artist, title, user_rating, votes, year,
38
+ art, date_added, genre, fan_art, thumbnail, label)
39
+ @album = album
40
+ @album_artist = album_artist
41
+ @album_artist_id = album_artist_id
42
+ @album_id = album_id
43
+ @album_release_type = album_release_type
44
+ @bitrate = bitrate
45
+ @bpm = bpm
46
+ @channels = channels
47
+ @comment = comment
48
+ @contributors = contributors
49
+ @disc = disc
50
+ @disc_title = disc_title
51
+ @display_composer = display_composer
52
+ @display_conductor = display_conductor
53
+ @display_lyricist = display_lyricist
54
+ @display_orchestra = display_orchestra
55
+ @duration = duration
56
+ @file = file
57
+ @genre_id = genre_id
58
+ @last_played = last_played
59
+ @lyrics = lyrics
60
+ @mood = mood
61
+ @musicbrainz_artist_id = musicbrainz_artist_id
62
+ @musicbrainz_track_id = musicbrainz_track_id
63
+ @play_count = play_count
64
+ @sample_rate = sample_rate
65
+ @song_id = song_id
66
+ @source_id = source_id
67
+ @track = track
68
+ audio_details_media(artist, artist_id, display_artist, musicbrainz_album_artist_id, original_date,
69
+ rating, release_date, sort_artist, title, user_rating, votes, year,
70
+ art, date_added, genre, fan_art, thumbnail, label)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+
@@ -7,7 +7,6 @@ module KodiClient
7
7
  module AudioFieldsAlbum
8
8
  extend Extensions::Iterable
9
9
 
10
- #album id
11
10
  ALBUM_DURATION = 'albumduration'
12
11
  ALBUM_LABEL = 'albumlabel'
13
12
  ALBUM_STATUS = 'albumstatus'
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Fields.Artist https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Fields.Artist
7
+ module AudioFieldsArtist
8
+ extend Extensions::Iterable
9
+
10
+ INSTRUMENT = 'instrument'
11
+ STYLE = 'style'
12
+ MOOD = 'mood'
13
+ BORN = 'born'
14
+ FORMED = 'formed'
15
+ DESCRIPTION = 'description'
16
+ GENRE = 'genre'
17
+ DIED = 'died'
18
+ DISBANDED = 'disbanded'
19
+ YEARS_ACTIVE = 'yearsactive'
20
+ MUSICBRAINZ_ARTIST_ID = 'musicbrainzartistid'
21
+ FAN_ART = 'fanart'
22
+ THUMBNAIL = 'thumbnail'
23
+ COMPILATION_ARTIST = 'compilationartist'
24
+ DATE_ADDED = 'dateadded'
25
+ ROLES = 'roles'
26
+ SONG_GENRES = 'songgenres'
27
+ IS_ALBUM_ARTIST = 'isalbumartist'
28
+ SORT_NAME = 'sortname'
29
+ TYPE = 'type'
30
+ GENDER = 'gender'
31
+ DISAMBIGUATION = 'disambiguation'
32
+ ART = 'art'
33
+ SOURCE_ID = 'sourceid'
34
+ DATE_MODIFIED = 'datemodified'
35
+ DATE_NEW = 'datenew'
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Fields.Role https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Fields.Role
7
+ module AudioFieldsRole
8
+ extend Extensions::Iterable
9
+
10
+ TITLE = 'title'
11
+ end
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Fields.Song https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Fields.Song
7
+ module AudioFieldsSong
8
+ extend Extensions::Iterable
9
+
10
+ TITLE = 'title'
11
+ ARTIST = 'artist'
12
+ ALBUM_ARTIST = 'albumartist'
13
+ GENRE = 'genre'
14
+ YEAR = 'year'
15
+ RATING = 'rating'
16
+ ALBUM = 'album'
17
+ TRACK = 'track'
18
+ DURATION = 'duration'
19
+ COMMENT = 'comment'
20
+ LYRICS = 'lyrics'
21
+ MUSICBRAINZ_TRACK_ID = 'musicbrainztrackid'
22
+ MUSICBRAINZ_ARTIST_ID = 'musicbrainzartistid'
23
+ MUSICBRAINZ_ALBUM_ID = 'musicbrainzalbumid'
24
+ MUSICBRAINZ_ALBUM_ARTIST_ID = 'musicbrainzalbumartistid'
25
+ PLAY_COUNT = 'playcount'
26
+ FAN_ART = 'fanart'
27
+ THUMBNAIL = 'thumbnail'
28
+ FILE = 'file'
29
+ ALBUM_ID = 'albumid'
30
+ LAST_PLAYED = 'lastplayed'
31
+ DISC = 'disc'
32
+ GENRE_ID = 'genreid'
33
+ ARTIST_ID = 'artistid'
34
+ DISPLAY_ARTIST = 'displayartist'
35
+ ALBUM_ARTIST_ID = 'albumartistid'
36
+ ALBUM_RELEASE_TYPE = 'albumreleasetype'
37
+ DATE_ADDED = 'dateadded'
38
+ VOTES = 'votes'
39
+ USER_RATING = 'userrating'
40
+ MOOD = 'mood'
41
+ CONTRIBUTORS = 'contributors'
42
+ DISPLAY_COMPOSER = 'displaycomposer'
43
+ DISPLAY_CONDUCTOR = 'displayconductor'
44
+ DISPLAY_ORCHESTRA = 'displayorchestra'
45
+ DISPLAY_LYRICIST = 'displaylyricist'
46
+ SORT_ARTIST = 'sortartist'
47
+ ART = 'art'
48
+ SOURCE_ID = 'sourceid'
49
+ DISC_TITLE = 'disctitle'
50
+ RELEASE_DATE = 'releasedate'
51
+ ORIGINAL_DATE = 'originaldate'
52
+ BPM = 'bpm'
53
+ SAMPLE_RATE = 'samplerate'
54
+ BITRATE = 'bitrate'
55
+ CHANNELS = 'channels'
56
+ DATE_MODIFIED = 'datemodified'
57
+ DATE_NEW = 'datenew'
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # AudioLibrary.GetAvailableArt https://kodi.wiki/view/JSON-RPC_API/v12#AudioLibrary.GetAvailableArt
7
+ class AvailableArt
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :art_type, :preview_url, :url
12
+
13
+ def initialize(art_type, preview_url, url)
14
+ @art_type = art_type
15
+ @preview_url = preview_url
16
+ @url = url
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -10,7 +10,7 @@ module KodiClient
10
10
 
11
11
  attr_reader :albums, :limits
12
12
 
13
- type_mapping ['albums', DetailsAlbum, true], ['limits', List::ListLimitsReturned]
13
+ type_mapping ['albums', AudioDetailsAlbum, true], ['limits', List::ListLimitsReturned]
14
14
 
15
15
  def initialize(albums, limits)
16
16
  @albums = albums
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # return type for AudioLibrary.GetAlbums
7
+ class GetArtistsReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :artists, :limits
12
+
13
+ type_mapping ['artists', AudioDetailsArtist, true], ['limits', List::ListLimitsReturned]
14
+
15
+ def initialize(artists, limits)
16
+ @artists = artists
17
+ @limits = limits
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # return type for AudioLibrary.GetGenres
7
+ class GetGenresReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :genres, :limits
12
+
13
+ type_mapping ['genres', Library::LibraryDetailsGenre, true], ['limits', List::ListLimitsReturned]
14
+
15
+ def initialize(genres, limits)
16
+ @genres = genres
17
+ @limits = limits
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # return type for AudioLibrary.GetRoles
7
+ class GetRolesReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :roles, :limits
12
+
13
+ type_mapping ['roles', AudioDetailsRole, true], ['limits', List::ListLimitsReturned]
14
+
15
+ def initialize(roles, limits)
16
+ @roles = roles
17
+ @limits = limits
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+
25
+
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # return type for AudioLibrary.GetSongs
7
+ class GetSongsReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :songs, :limits
12
+
13
+ type_mapping ['songs', Audio::AudioDetailsSong, true], ['limits', List::ListLimitsReturned]
14
+
15
+ def initialize(songs, limits)
16
+ @songs = songs
17
+ @limits = limits
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+
25
+
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # return type for AudioLibrary.GetSources
7
+ class GetSourcesReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :sources, :limits
12
+
13
+ type_mapping ['sources', Library::AudioDetailsSource, true], ['limits', List::ListLimitsReturned]
14
+
15
+ def initialize(sources, limits)
16
+ @sources = sources
17
+ @limits = limits
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+
25
+
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Property.Name https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Property.Name
7
+ module PropertyName
8
+ extend Extensions::Iterable
9
+
10
+ MISSING_ARTIST_ID = 'missingartistid'
11
+ LIBRARY_LAST_UPDATED ='librarylastupdated'
12
+ LIBRARY_LAST_CLEANED = 'librarylastcleaned'
13
+ ARTIST_LINKS_UPDATED = 'artistlinksupdated'
14
+ SONGS_LAST_ADDED = 'songslastadded'
15
+ ALBUMS_LAST_ADDED = 'albumslastadded'
16
+ ARTISTS_LAST_ADDED = 'artistslastadded'
17
+ GENRES_LAST_ADDED = 'genreslastadded'
18
+ SONGS_MODIFIED = 'songsmodified'
19
+ ALBUMS_MODIFIED = 'albumsmodified'
20
+ ARTISTS_MODIFIED = 'artistsmodified'
21
+ end
22
+ end
23
+ end
24
+ end
25
+
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Property.Value https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Property.Value
7
+ class PropertyValue
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :albums_last_added, :albums_modified, :artist_links_updated, :artists_last_added,
12
+ :artists_modified, :genres_last_added, :library_last_cleaned, :library_last_updated,
13
+ :missing_artist_id, :songs_last_added, :songs_modified
14
+
15
+ def initialize(albums_last_added, albums_modified, artist_links_updated, artists_last_added, artists_modified,
16
+ genres_last_added, library_last_cleaned, library_last_updated, missing_artist_id,
17
+ songs_last_added, songs_modified)
18
+ @albums_last_added = albums_last_added
19
+ @albums_modified = albums_modified
20
+ @artist_links_updated = artist_links_updated
21
+ @artists_last_added = artists_last_added
22
+ @artists_modified = artists_modified
23
+ @genres_last_added = genres_last_added
24
+ @library_last_cleaned = library_last_cleaned
25
+ @library_last_updated = library_last_updated
26
+ @missing_artist_id = missing_artist_id
27
+ @songs_last_added = songs_last_added
28
+ @songs_modified = songs_modified
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Library
6
+ # Library.Details.Genre https://kodi.wiki/view/JSON-RPC_API/v12#Library.Details.Genre
7
+ class LibraryDetailsGenre
8
+ include Items::ItemDetailsBase
9
+ include Extensions::Comparable
10
+ extend Extensions::Creatable
11
+
12
+ attr_reader :title, :thumbnail, :source_id
13
+
14
+ fields_to_map %w[genre_id source_id thumbnail title label]
15
+
16
+ def initialize(genre_id, source_id, thumbnail, title, label)
17
+ @genre_id = genre_id
18
+ @title = title
19
+ @thumbnail = thumbnail
20
+ @source_id = source_id
21
+ item_details_base(label)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Library
6
+ # Library.Details.Source https://kodi.wiki/view/JSON-RPC_API/v12#Library.Details.Source
7
+ class AudioDetailsSource
8
+ include Items::ItemDetailsBase
9
+ include Extensions::Comparable
10
+ extend Extensions::Creatable
11
+
12
+ attr_reader :file, :paths, :source_id
13
+
14
+ fields_to_map %w[file paths source_id label]
15
+
16
+ def initialize(file, paths, source_id, label)
17
+ @file = file
18
+ @paths = paths
19
+ @source_id = source_id
20
+ item_details_base(label)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Library
6
+ # Library.Fields.Genre https://kodi.wiki/view/JSON-RPC_API/v12#Library.Fields.Genre
7
+ module LibraryFieldsGenre
8
+ extend Extensions::Iterable
9
+
10
+ TITLE = 'title'
11
+ THUMBNAIL = 'thumbnail'
12
+ SOURCE_ID = 'sourceid'
13
+ end
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Library
6
+ # Library.Fields.Source https://kodi.wiki/view/JSON-RPC_API/v12#Library.Fields.Source
7
+ module LibraryFieldsSource
8
+ extend Extensions::Iterable
9
+
10
+ FILE = 'file'
11
+ PATHS = 'paths'
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+
@@ -13,6 +13,10 @@ module KodiClient
13
13
  @list_start = list_start
14
14
  @list_end = list_end
15
15
  end
16
+
17
+ def to_h
18
+ { 'start' => @list_start, 'end' => @list_end }
19
+ end
16
20
  end
17
21
  end
18
22
  end
@@ -16,6 +16,12 @@ module KodiClient
16
16
  @order = sort_order
17
17
  @use_artist_sort_name = use_artist_sort_name
18
18
  end
19
+
20
+ def to_h
21
+ { 'ignorearticle' => @ignore_article, 'method' => @method,
22
+ 'order' => @order,
23
+ 'useartistsortname' => @use_artist_sort_name }
24
+ end
19
25
  end
20
26
  end
21
27
  end
@@ -16,6 +16,10 @@ module KodiClient
16
16
  @poster = poster
17
17
  @thumb = thumb
18
18
  end
19
+
20
+ def to_h
21
+ { 'banner' => @banner, 'fanart' => @fan_art, 'poster' => @poster, 'thumb' => @thumb }
22
+ end
19
23
  end
20
24
  end
21
25
  end
data/lib/kodi_client.rb CHANGED
@@ -70,14 +70,34 @@ require 'kodi_client/types/player/player_position_time_type'
70
70
  require 'kodi_client/types/player/seek_jump_type'
71
71
  require 'kodi_client/types/player/seek_returned_type'
72
72
 
73
+ require 'kodi_client/types/library/library_fields_genre_type'
74
+ require 'kodi_client/types/library/library_details_genre_type'
75
+ require 'kodi_client/types/library/library_fields_source_type'
76
+ require 'kodi_client/types/library/library_details_source_type'
77
+
73
78
  require 'kodi_client/types/audio/audio_contributor_type'
74
79
  require 'kodi_client/types/audio/audio_album_release_type_type'
75
80
  require 'kodi_client/types/audio/audio_details_base_type'
76
81
  require 'kodi_client/types/audio/audio_details_media_type'
77
82
  require 'kodi_client/types/audio/audio_fields_album_type'
78
83
  require 'kodi_client/types/audio/genre_type'
79
- require 'kodi_client/types/audio/details_album_type'
84
+ require 'kodi_client/types/audio/audio_details_album_type'
80
85
  require 'kodi_client/types/audio/get_albums_returned_type'
86
+ require 'kodi_client/types/audio/audio_artist_role_type'
87
+ require 'kodi_client/types/audio/audio_fields_artist_type'
88
+ require 'kodi_client/types/audio/audio_details_artist_type'
89
+ require 'kodi_client/types/audio/get_artists_returned_type'
90
+ require 'kodi_client/types/audio/available_art_type'
91
+ require 'kodi_client/types/audio/get_genres_returned_type'
92
+ require 'kodi_client/types/audio/property_name_type'
93
+ require 'kodi_client/types/audio/property_value_type'
94
+ require 'kodi_client/types/audio/audio_fields_song_type'
95
+ require 'kodi_client/types/audio/audio_details_song_type'
96
+ require 'kodi_client/types/audio/get_songs_returned_type'
97
+ require 'kodi_client/types/audio/audio_fields_role_type'
98
+ require 'kodi_client/types/audio/audio_details_role_type'
99
+ require 'kodi_client/types/audio/get_roles_returned_type'
100
+ require 'kodi_client/types/audio/get_sources_return_type'
81
101
 
82
102
  require 'kodi_client/types/video/video_details_base_type'
83
103
  require 'kodi_client/types/video/video_cast_type'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kodi_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Feier
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-19 00:00:00.000000000 Z
11
+ date: 2021-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -25,9 +25,9 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 5.0.4
27
27
  description: A client for the Kodi JSON API v12, currently implemented methods are
28
- Addons, Application, Favourites, Files, GUI, Input, Player, Profiles and System
29
- (more will be added with the time). For more information how to use it and how to
30
- activate Remote Control in Kodi, please check the github page https://github.com/cfe86/RubyKodiClient
28
+ Addons, Application, AudioLibrary Favourites, Files, GUI, Input, Player, Profiles
29
+ and System (more will be added with the time). For more information how to use it
30
+ and how to activate Remote Control in Kodi, please check the github page https://github.com/cfe86/RubyKodiClient
31
31
  email:
32
32
  - christian.feier@gmail.com
33
33
  executables: []
@@ -73,13 +73,28 @@ files:
73
73
  - lib/kodi_client/types/application/property_value_type.rb
74
74
  - lib/kodi_client/types/application/version_type.rb
75
75
  - lib/kodi_client/types/audio/audio_album_release_type_type.rb
76
+ - lib/kodi_client/types/audio/audio_artist_role_type.rb
76
77
  - lib/kodi_client/types/audio/audio_contributor_type.rb
78
+ - lib/kodi_client/types/audio/audio_details_album_type.rb
79
+ - lib/kodi_client/types/audio/audio_details_artist_type.rb
77
80
  - lib/kodi_client/types/audio/audio_details_base_type.rb
78
81
  - lib/kodi_client/types/audio/audio_details_media_type.rb
82
+ - lib/kodi_client/types/audio/audio_details_role_type.rb
83
+ - lib/kodi_client/types/audio/audio_details_song_type.rb
79
84
  - lib/kodi_client/types/audio/audio_fields_album_type.rb
80
- - lib/kodi_client/types/audio/details_album_type.rb
85
+ - lib/kodi_client/types/audio/audio_fields_artist_type.rb
86
+ - lib/kodi_client/types/audio/audio_fields_role_type.rb
87
+ - lib/kodi_client/types/audio/audio_fields_song_type.rb
88
+ - lib/kodi_client/types/audio/available_art_type.rb
81
89
  - lib/kodi_client/types/audio/genre_type.rb
82
90
  - lib/kodi_client/types/audio/get_albums_returned_type.rb
91
+ - lib/kodi_client/types/audio/get_artists_returned_type.rb
92
+ - lib/kodi_client/types/audio/get_genres_returned_type.rb
93
+ - lib/kodi_client/types/audio/get_roles_returned_type.rb
94
+ - lib/kodi_client/types/audio/get_songs_returned_type.rb
95
+ - lib/kodi_client/types/audio/get_sources_return_type.rb
96
+ - lib/kodi_client/types/audio/property_name_type.rb
97
+ - lib/kodi_client/types/audio/property_value_type.rb
83
98
  - lib/kodi_client/types/favourites/details_favourite_type.rb
84
99
  - lib/kodi_client/types/favourites/fields_favourite_type.rb
85
100
  - lib/kodi_client/types/favourites/get_favourite_returned_type.rb
@@ -104,6 +119,10 @@ files:
104
119
  - lib/kodi_client/types/gui/stereoscopy_mode_type.rb
105
120
  - lib/kodi_client/types/input/input_action_type.rb
106
121
  - lib/kodi_client/types/items/item_details_base_type.rb
122
+ - lib/kodi_client/types/library/library_details_genre_type.rb
123
+ - lib/kodi_client/types/library/library_details_source_type.rb
124
+ - lib/kodi_client/types/library/library_fields_genre_type.rb
125
+ - lib/kodi_client/types/library/library_fields_source_type.rb
107
126
  - lib/kodi_client/types/list/list_field_files_type.rb
108
127
  - lib/kodi_client/types/list/list_fields_all_type.rb
109
128
  - lib/kodi_client/types/list/list_item_all_type.rb