kodi_client 0.6.3 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -0
  3. data/README.md +1 -0
  4. data/kodi_client.gemspec +2 -2
  5. data/lib/kodi_client/extensions/chainable.rb +73 -0
  6. data/lib/kodi_client/extensions/comparable.rb +29 -0
  7. data/lib/kodi_client/extensions/creatable.rb +132 -0
  8. data/lib/kodi_client/extensions/iterable.rb +14 -0
  9. data/lib/kodi_client/kodi_error.rb +14 -0
  10. data/lib/kodi_client/kodi_method.rb +34 -0
  11. data/lib/kodi_client/{options.rb → kodi_options.rb} +1 -1
  12. data/lib/kodi_client/kodi_request.rb +16 -0
  13. data/lib/kodi_client/kodi_response.rb +21 -0
  14. data/lib/kodi_client/{method → methods}/addons.rb +6 -6
  15. data/lib/kodi_client/{method → methods}/application.rb +2 -2
  16. data/lib/kodi_client/methods/audio_library.rb +334 -0
  17. data/lib/kodi_client/{method → methods}/favourites.rb +2 -2
  18. data/lib/kodi_client/{method → methods}/files.rb +6 -10
  19. data/lib/kodi_client/{method → methods}/gui.rb +2 -2
  20. data/lib/kodi_client/{method → methods}/input.rb +2 -2
  21. data/lib/kodi_client/{method → methods}/player.rb +2 -2
  22. data/lib/kodi_client/{method → methods}/profiles.rb +5 -7
  23. data/lib/kodi_client/{method → methods}/system.rb +2 -2
  24. data/lib/kodi_client/methods/video_library.rb +18 -0
  25. data/lib/kodi_client/types/addons/addon_content_type.rb +18 -0
  26. data/lib/kodi_client/types/addons/addon_dependency_type.rb +21 -0
  27. data/lib/kodi_client/types/addons/addon_details_type.rb +44 -0
  28. data/lib/kodi_client/types/addons/addon_extra_info_type.rb +20 -0
  29. data/lib/kodi_client/types/addons/addon_fields_type.rb +28 -0
  30. data/lib/kodi_client/types/addons/addon_types_type.rb +48 -0
  31. data/lib/kodi_client/types/addons/get_addon_returned_type.rb +21 -0
  32. data/lib/kodi_client/types/addons/get_addons_returned_type.rb +22 -0
  33. data/lib/kodi_client/types/application/property_name_type.rb +19 -0
  34. data/lib/kodi_client/types/application/property_value_type.rb +24 -0
  35. data/lib/kodi_client/types/application/version_type.rb +22 -0
  36. data/lib/kodi_client/types/audio/audio_album_release_type_type.rb +15 -0
  37. data/lib/kodi_client/types/audio/audio_artist_role_type.rb +21 -0
  38. data/lib/kodi_client/types/audio/audio_contributor_type.rb +22 -0
  39. data/lib/kodi_client/types/audio/audio_details_album_type.rb +58 -0
  40. data/lib/kodi_client/types/audio/audio_details_artist_type.rb +53 -0
  41. data/lib/kodi_client/types/audio/audio_details_base_type.rb +30 -0
  42. data/lib/kodi_client/types/audio/audio_details_media_type.rb +50 -0
  43. data/lib/kodi_client/types/audio/audio_details_role_type.rb +25 -0
  44. data/lib/kodi_client/types/audio/audio_details_song_type.rb +72 -0
  45. data/lib/kodi_client/types/audio/audio_fields_album_type.rb +50 -0
  46. data/lib/kodi_client/types/audio/audio_fields_artist_type.rb +39 -0
  47. data/lib/kodi_client/types/audio/audio_fields_role_type.rb +15 -0
  48. data/lib/kodi_client/types/audio/audio_fields_song_type.rb +61 -0
  49. data/lib/kodi_client/types/audio/available_art_type.rb +21 -0
  50. data/lib/kodi_client/types/audio/genre_type.rb +20 -0
  51. data/lib/kodi_client/types/audio/get_albums_returned_type.rb +22 -0
  52. data/lib/kodi_client/types/audio/get_artists_returned_type.rb +23 -0
  53. data/lib/kodi_client/types/audio/get_genres_returned_type.rb +24 -0
  54. data/lib/kodi_client/types/audio/get_roles_returned_type.rb +25 -0
  55. data/lib/kodi_client/types/audio/get_songs_returned_type.rb +25 -0
  56. data/lib/kodi_client/types/audio/get_sources_return_type.rb +25 -0
  57. data/lib/kodi_client/types/audio/property_name_type.rb +25 -0
  58. data/lib/kodi_client/types/audio/property_value_type.rb +33 -0
  59. data/lib/kodi_client/types/favourites/details_favourite_type.rb +24 -0
  60. data/lib/kodi_client/types/favourites/fields_favourite_type.rb +17 -0
  61. data/lib/kodi_client/types/favourites/get_favourite_returned_type.rb +22 -0
  62. data/lib/kodi_client/types/favourites/type_type.rb +18 -0
  63. data/lib/kodi_client/types/files/file_label_type.rb +20 -0
  64. data/lib/kodi_client/types/files/get_directory_returned_type.rb +22 -0
  65. data/lib/kodi_client/types/files/get_sources_returned_type.rb +22 -0
  66. data/lib/kodi_client/types/files/media_type.rb +18 -0
  67. data/lib/kodi_client/types/files/prepare_download_returned_type.rb +21 -0
  68. data/lib/kodi_client/types/global/direction_type.rb +17 -0
  69. data/lib/kodi_client/types/global/global_time_type.rb +22 -0
  70. data/lib/kodi_client/types/global/id_label_type.rb +20 -0
  71. data/lib/kodi_client/types/global/id_name_type.rb +20 -0
  72. data/lib/kodi_client/types/global/increment_decrement_type.rb +15 -0
  73. data/lib/kodi_client/types/global/next_prev_type.rb +17 -0
  74. data/lib/kodi_client/types/global/password_encryption_type.rb +16 -0
  75. data/lib/kodi_client/types/global/rotate_type.rb +15 -0
  76. data/lib/kodi_client/types/global/toggle_type.rb +16 -0
  77. data/lib/kodi_client/types/gui/gui_window_type.rb +124 -0
  78. data/lib/kodi_client/types/gui/property_name_type.rb +18 -0
  79. data/lib/kodi_client/types/gui/property_value_type.rb +26 -0
  80. data/lib/kodi_client/types/gui/stereoscopy_mode_type.rb +31 -0
  81. data/lib/kodi_client/types/input/input_action_type.rb +212 -0
  82. data/lib/kodi_client/types/{item_types.rb → items/item_details_base_type.rb} +2 -4
  83. data/lib/kodi_client/types/library/library_details_genre_type.rb +27 -0
  84. data/lib/kodi_client/types/library/library_details_source_type.rb +26 -0
  85. data/lib/kodi_client/types/library/library_fields_genre_type.rb +17 -0
  86. data/lib/kodi_client/types/library/library_fields_source_type.rb +17 -0
  87. data/lib/kodi_client/types/list/list_field_files_type.rb +83 -0
  88. data/lib/kodi_client/types/list/list_fields_all_type.rb +96 -0
  89. data/lib/kodi_client/types/list/list_item_all_type.rb +70 -0
  90. data/lib/kodi_client/types/list/list_item_base_type.rb +141 -0
  91. data/lib/kodi_client/types/list/list_item_file_type.rb +66 -0
  92. data/lib/kodi_client/types/list/list_limits_returned_type.rb +23 -0
  93. data/lib/kodi_client/types/list/list_limits_type.rb +23 -0
  94. data/lib/kodi_client/types/list/list_sort_method_type.rb +54 -0
  95. data/lib/kodi_client/types/list/list_sort_type.rb +28 -0
  96. data/lib/kodi_client/types/list/sort_order_type.rb +15 -0
  97. data/lib/kodi_client/types/media/media_artwork_type.rb +26 -0
  98. data/lib/kodi_client/types/media/media_details_base_type.rb +29 -0
  99. data/lib/kodi_client/types/media/media_type_type.rb +16 -0
  100. data/lib/kodi_client/types/player/audio_stream_type.rb +29 -0
  101. data/lib/kodi_client/types/player/player_position_time_type.rb +22 -0
  102. data/lib/kodi_client/types/player/player_repeat_type.rb +17 -0
  103. data/lib/kodi_client/types/player/player_speed_type.rb +26 -0
  104. data/lib/kodi_client/types/player/player_type.rb +24 -0
  105. data/lib/kodi_client/types/player/player_type_type.rb +16 -0
  106. data/lib/kodi_client/types/player/player_view_mode_type.rb +23 -0
  107. data/lib/kodi_client/types/player/player_visibility_type.rb +16 -0
  108. data/lib/kodi_client/types/player/property_name_type.rb +38 -0
  109. data/lib/kodi_client/types/player/property_value_type.rb +60 -0
  110. data/lib/kodi_client/types/player/seek_jump_type.rb +17 -0
  111. data/lib/kodi_client/types/player/seek_returned_type.rb +23 -0
  112. data/lib/kodi_client/types/player/subtitle_type.rb +24 -0
  113. data/lib/kodi_client/types/player/video_stream_type.rb +26 -0
  114. data/lib/kodi_client/types/player/view_mode_type.rb +22 -0
  115. data/lib/kodi_client/types/player/zoom_type.rb +15 -0
  116. data/lib/kodi_client/types/profiles/details_profile_type.rb +24 -0
  117. data/lib/kodi_client/types/profiles/fields_profile_type.rb +15 -0
  118. data/lib/kodi_client/types/profiles/get_profiles_returned_type.rb +22 -0
  119. data/lib/kodi_client/types/profiles/profile_password_type.rb +20 -0
  120. data/lib/kodi_client/types/{pvr_type.rb → pvr/channel_type_type.rb} +2 -4
  121. data/lib/kodi_client/types/system/property_name_type.rb +17 -0
  122. data/lib/kodi_client/types/{system_types.rb → system/property_value_type.rb} +2 -13
  123. data/lib/kodi_client/types/video/stream_details_type.rb +24 -0
  124. data/lib/kodi_client/types/video/video_cast_type.rb +22 -0
  125. data/lib/kodi_client/types/video/video_content_type_type.rb +18 -0
  126. data/lib/kodi_client/types/video/video_details_base_type.rb +29 -0
  127. data/lib/kodi_client/types/video/video_details_file_type.rb +37 -0
  128. data/lib/kodi_client/types/video/video_details_item_type.rb +32 -0
  129. data/lib/kodi_client/types/video/video_details_media_type.rb +28 -0
  130. data/lib/kodi_client/types/video/video_resume_type.rb +20 -0
  131. data/lib/kodi_client.rb +160 -49
  132. metadata +132 -38
  133. data/lib/kodi_client/Chainable.rb +0 -48
  134. data/lib/kodi_client/kodi_module.rb +0 -80
  135. data/lib/kodi_client/method/audio_library.rb +0 -46
  136. data/lib/kodi_client/types/addon_types.rb +0 -177
  137. data/lib/kodi_client/types/application_types.rb +0 -52
  138. data/lib/kodi_client/types/audio_types.rb +0 -221
  139. data/lib/kodi_client/types/favourites_types.rb +0 -61
  140. data/lib/kodi_client/types/files_types.rb +0 -63
  141. data/lib/kodi_client/types/global_types.rb +0 -102
  142. data/lib/kodi_client/types/gui_types.rb +0 -179
  143. data/lib/kodi_client/types/input_types.rb +0 -214
  144. data/lib/kodi_client/types/list_types.rb +0 -542
  145. data/lib/kodi_client/types/media_types.rb +0 -53
  146. data/lib/kodi_client/types/player_type.rb +0 -294
  147. data/lib/kodi_client/types/profiles_types.rb +0 -65
  148. data/lib/kodi_client/types/video_types.rb +0 -150
  149. data/lib/kodi_client/util/comparable.rb +0 -20
  150. data/lib/kodi_client/util/creatable.rb +0 -106
  151. data/lib/kodi_client/util/iterable.rb +0 -11
@@ -0,0 +1,334 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Methods
5
+ # contains all Kodi Application methods
6
+ class AudioLibrary < KodiMethod
7
+
8
+ CLEAN = 'AudioLibrary.Clean'
9
+ EXPORT = 'AudioLibrary.Export'
10
+ GET_ALBUM_DETAILS = 'AudioLibrary.GetAlbumDetails'
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'
30
+
31
+ def clean(show_dialogs = true, kodi_id = 1)
32
+ request = KodiRequest.new(kodi_id, CLEAN, { 'showdialogs' => show_dialogs })
33
+ json = invoke_api(request)
34
+ KodiResponse.new(json)
35
+ end
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
+
43
+ def export(path, kodi_id = 1)
44
+ request = KodiRequest.new(kodi_id, EXPORT, { 'options' => { 'path' => path } })
45
+ json = invoke_api(request)
46
+ KodiResponse.new(json)
47
+ end
48
+
49
+ def get_album_details(album_id, properties = Types::Audio::AudioFieldsAlbum.all_properties, kodi_id = 1)
50
+ request = KodiRequest.new(kodi_id, GET_ALBUM_DETAILS, { 'albumid' => album_id, 'properties' => properties })
51
+ json = invoke_api(request)
52
+ album_details = json['result'].nil? ? nil : json['result']['albumdetails']
53
+ json['result'] = Types::Audio::AudioDetailsAlbum.create(album_details)
54
+ KodiResponse.new(json)
55
+ end
56
+
57
+ def get_albums(properties = Types::Audio::AudioFieldsAlbum.all_properties,
58
+ limits = Types::List::ListLimits.new(0, 50),
59
+ sort = Types::List::ListSort.new, include_singles = false, all_roles = false, kodi_id = 1)
60
+ request = KodiRequest.new(kodi_id, GET_ALBUMS,
61
+ { 'properties' => properties,
62
+ 'limits' => limits.to_h,
63
+ 'sort' => sort.to_h,
64
+ 'includesingles' => include_singles, 'allroles' => all_roles })
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)
294
+ KodiResponse.new(json)
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
332
+ end
333
+ end
334
+ end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KodiClient
4
- module Method
4
+ module Methods
5
5
  # contains all Kodi Application methods
6
- class Favourites < KodiModule
6
+ class Favourites < KodiMethod
7
7
 
8
8
  ADD_FAVOURITE = 'Favourites.AddFavourite'
9
9
  GET_FAVOURITES = 'Favourites.GetFavourites'
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KodiClient
4
- module Method
4
+ module Methods
5
5
  # contains all Kodi Application methods
6
- class Files < KodiModule
6
+ class Files < KodiMethod
7
7
 
8
8
  GET_DIRECTORY = 'Files.GetDirectory'
9
9
  GET_FILE_DETAILS = 'Files.GetFileDetails'
@@ -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'])
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KodiClient
4
- module Method
4
+ module Methods
5
5
  # contains all Kodi GUI methods
6
- class GUI < KodiModule
6
+ class GUI < KodiMethod
7
7
 
8
8
  ACTIVATE_WINDOW = 'GUI.ActivateWindow'
9
9
  GET_PROPERTIES = 'GUI.GetProperties'
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KodiClient
4
- module Method
4
+ module Methods
5
5
  # contains all Kodi Input methods
6
- class Input < KodiModule
6
+ class Input < KodiMethod
7
7
 
8
8
  BACK = 'Input.Back'
9
9
  CONTEXT_MENU = 'Input.ContextMenu'
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KodiClient
4
- module Method
4
+ module Methods
5
5
  # contains all Kodi Application methods
6
- class Player < KodiModule
6
+ class Player < KodiMethod
7
7
 
8
8
  ADD_SUBTITLE = 'Player.AddSubtitle'
9
9
  OPEN = 'Player.Open'
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KodiClient
4
- module Method
4
+ module Methods
5
5
  # contains all Kodi Application methods
6
- class Profiles < KodiModule
6
+ class Profiles < KodiMethod
7
7
 
8
8
  GET_CURRENT_PROFILE = 'Profiles.GetCurrentProfile'
9
9
  GET_PROFILES = 'Profiles.GetProfiles'
@@ -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
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KodiClient
4
- module Method
4
+ module Methods
5
5
  # contains all Kodi System methods
6
- class System < KodiModule
6
+ class System < KodiMethod
7
7
 
8
8
  EJECT_OPTICAL_DRIVE = 'System.EjectOpticalDrive'
9
9
  GET_PROPERTIES = 'System.GetProperties'
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Methods
5
+ # contains all Kodi System methods
6
+ class VideoLibrary < KodiMethod
7
+
8
+ CLEAN = 'clean'
9
+
10
+ def clean(show_dialogs = true, content = Types::Video::VideoContentType::VIDEO, directory = '', kodi_id = 1)
11
+ request = KodiRequest.new(kodi_id, CLEAN, { 'showdialogs' => show_dialogs, 'content' => content,
12
+ 'directory' => directory })
13
+ json = invoke_api(request)
14
+ KodiResponse.new(json)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Addons
6
+ # Addon.Content https://kodi.wiki/view/JSON-RPC_API/v12#Addon.Content
7
+ module AddonContent
8
+ extend Extensions::Iterable
9
+
10
+ UNKNOWN = 'unknown'
11
+ AUDIO = 'audio'
12
+ EXECUTABLE = 'executable'
13
+ IMAGE = 'image'
14
+ VIDEO = 'video'
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Addons
6
+ # Addon.Details.dependencies https://kodi.wiki/view/JSON-RPC_API/v12#Addon.Details
7
+ class AddonDependency
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :addon_id, :optional, :version
12
+
13
+ def initialize(addon_id, optional, version)
14
+ @addon_id = addon_id
15
+ @optional = optional
16
+ @version = version
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Addons
6
+ # represents addon details
7
+ class AddonDetails
8
+ include Extensions::Comparable
9
+ include Items::ItemDetailsBase
10
+ extend Extensions::Creatable
11
+
12
+ attr_reader :addon_id, :author, :broken, :dependencies, :description, :disclaimer, :enabled, :extra_info,
13
+ :fan_art, :installed, :name, :path, :rating, :summary, :thumbnail, :type, :version
14
+
15
+ fields_to_map %w[addon_id author broken dependencies description disclaimer enabled extra_info fan_art
16
+ installed name path rating summary thumbnail type version label]
17
+
18
+ type_mapping ['dependencies', AddonDependency, true], ['extrainfo', AddonExtraInfo, true]
19
+
20
+ def initialize(addon_id, author, broken, dependencies, description, disclaimer, enabled, extra_info,
21
+ fan_art, installed, name, path, rating, summary, thumbnail, type, version, label)
22
+ @addon_id = addon_id
23
+ @author = author
24
+ @broken = broken
25
+ @dependencies = dependencies
26
+ @description = description
27
+ @disclaimer = disclaimer
28
+ @enabled = enabled
29
+ @extra_info = extra_info
30
+ @fan_art = fan_art
31
+ @installed = installed
32
+ @name = name
33
+ @path = path
34
+ @rating = rating
35
+ @summary = summary
36
+ @thumbnail = thumbnail
37
+ @type = type
38
+ @version = version
39
+ item_details_base(label)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Addons
6
+ # Addon.Details.extrainfo https://kodi.wiki/view/JSON-RPC_API/v12#Addon.Details
7
+ class AddonExtraInfo
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :key, :value
12
+
13
+ def initialize(key, value)
14
+ @key = key
15
+ @value = value
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Addons
6
+ # Addon.Fields https://kodi.wiki/view/JSON-RPC_API/v12#Addon.Content
7
+ module AddonFields
8
+ extend Extensions::Iterable
9
+
10
+ AUTHOR = 'author'
11
+ BROKEN = 'broken'
12
+ DEPENDENCIES = 'dependencies'
13
+ DESCRIPTION = 'description'
14
+ DISCLAIMER = 'disclaimer'
15
+ ENABLED = 'enabled'
16
+ EXTRAINFO = 'extrainfo'
17
+ FANART = 'fanart'
18
+ INSTALLED = 'installed'
19
+ NAME = 'name'
20
+ PATH = 'path'
21
+ RATING = 'rating'
22
+ SUMMARY = 'summary'
23
+ THUMBNAIL = 'thumbnail'
24
+ VERSION = 'version'
25
+ end
26
+ end
27
+ end
28
+ end