kodi_client 0.5.7 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/kodi_client.gemspec +3 -3
- data/lib/kodi_client/Chainable.rb +1 -2
- data/lib/kodi_client/kodi_module.rb +0 -7
- data/lib/kodi_client/method/addons.rb +6 -21
- data/lib/kodi_client/method/application.rb +1 -4
- data/lib/kodi_client/method/audio_library.rb +46 -0
- data/lib/kodi_client/method/favourites.rb +1 -4
- data/lib/kodi_client/method/files.rb +85 -0
- data/lib/kodi_client/method/gui.rb +1 -4
- data/lib/kodi_client/method/input.rb +1 -5
- data/lib/kodi_client/method/player.rb +1 -6
- data/lib/kodi_client/method/profiles.rb +1 -4
- data/lib/kodi_client/method/system.rb +1 -5
- data/lib/kodi_client/{global_types → types}/addon_types.rb +9 -26
- data/lib/kodi_client/{global_types → types}/application_types.rb +16 -25
- data/lib/kodi_client/types/audio_types.rb +221 -0
- data/lib/kodi_client/{global_types → types}/favourites_types.rb +1 -10
- data/lib/kodi_client/types/files_types.rb +63 -0
- data/lib/kodi_client/{global_types → types}/global_types.rb +0 -4
- data/lib/kodi_client/{global_types → types}/gui_types.rb +2 -14
- data/lib/kodi_client/{global_types → types}/input_types.rb +0 -2
- data/lib/kodi_client/{global_types → types}/item_types.rb +5 -1
- data/lib/kodi_client/{global_types → types}/list_types.rb +193 -64
- data/lib/kodi_client/{global_types → types}/media_types.rb +5 -7
- data/lib/kodi_client/{global_types → types}/player_type.rb +11 -36
- data/lib/kodi_client/{global_types → types}/profiles_types.rb +2 -17
- data/lib/kodi_client/{global_types → types}/pvr_type.rb +0 -2
- data/lib/kodi_client/{global_types → types}/system_types.rb +0 -3
- data/lib/kodi_client/{global_types → types}/video_types.rb +32 -25
- data/lib/kodi_client/util/creatable.rb +69 -15
- data/lib/kodi_client.rb +37 -9
- metadata +23 -20
- data/lib/kodi_client/global_types/audio_types.rb +0 -88
@@ -1,10 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'kodi_client/util/comparable'
|
4
|
-
require 'kodi_client/util/creatable'
|
5
|
-
require 'kodi_client/global_types/video_types'
|
6
|
-
require 'kodi_client/global_types/audio_types'
|
7
|
-
|
8
3
|
module KodiClient
|
9
4
|
module Types
|
10
5
|
module List
|
@@ -28,11 +23,7 @@ module KodiClient
|
|
28
23
|
|
29
24
|
attr_reader :list_start, :list_end, :total
|
30
25
|
|
31
|
-
|
32
|
-
return nil if hash.nil?
|
33
|
-
|
34
|
-
new(hash['start'], hash['end'], hash['total'])
|
35
|
-
end
|
26
|
+
fields_to_map %w[start end total]
|
36
27
|
|
37
28
|
def initialize(list_start, list_end, total)
|
38
29
|
@list_start = list_start
|
@@ -153,6 +144,95 @@ module KodiClient
|
|
153
144
|
YEAR = 'year'
|
154
145
|
end
|
155
146
|
|
147
|
+
# List.Fields.Files https://kodi.wiki/view/JSON-RPC_API/v12#List.Fields.Files
|
148
|
+
module ListFieldFiles
|
149
|
+
extend Iterable
|
150
|
+
|
151
|
+
ALBUM = 'album'
|
152
|
+
ALBUMARTIST = 'albumartist'
|
153
|
+
ALBUMARTISTID = 'albumartistid'
|
154
|
+
ALBUMID = 'albumid'
|
155
|
+
ALBUMLABEL = 'albumlabel'
|
156
|
+
ART = 'art'
|
157
|
+
ARTIST = 'artist'
|
158
|
+
ARTISTID = 'artistid'
|
159
|
+
CAST = 'cast'
|
160
|
+
COMMENT = 'comment'
|
161
|
+
COUNTRY = 'country'
|
162
|
+
DATEADDED = 'dateadded'
|
163
|
+
DESCRIPTION = 'description'
|
164
|
+
DIRECTOR = 'director'
|
165
|
+
DISC = 'disc'
|
166
|
+
DISPLAYARTIST = 'displayartist'
|
167
|
+
DURATION = 'duration'
|
168
|
+
EPISODE = 'episode'
|
169
|
+
EPISODEGUIDE = 'episodeguide'
|
170
|
+
FANART = 'fanart'
|
171
|
+
FILE = 'file'
|
172
|
+
FIRSTAIRED = 'firstaired'
|
173
|
+
GENRE = 'genre'
|
174
|
+
GENREID = 'genreid'
|
175
|
+
IMDBNUMBER = 'imdbnumber'
|
176
|
+
LASTMODIFIED = 'lastmodified'
|
177
|
+
LASTPLAYED = 'lastplayed'
|
178
|
+
LYRICS = 'lyrics'
|
179
|
+
MIMETYPE = 'mimetype'
|
180
|
+
MOOD = 'mood'
|
181
|
+
MPAA = 'mpaa'
|
182
|
+
MUSICBRAINZALBUMARTISTID = 'musicbrainzalbumartistid'
|
183
|
+
MUSICBRAINZALBUMID = 'musicbrainzalbumid'
|
184
|
+
MUSICBRAINZARTISTID = 'musicbrainzartistid'
|
185
|
+
MUSICBRAINZTRACKID = 'musicbrainztrackid'
|
186
|
+
ORIGINALTITLE = 'originaltitle'
|
187
|
+
PLAYCOUNT = 'playcount'
|
188
|
+
PLOT = 'plot'
|
189
|
+
PLOTOUTLINE = 'plotoutline'
|
190
|
+
PREMIERED = 'premiered'
|
191
|
+
PRODUCTIONCODE = 'productioncode'
|
192
|
+
RATING = 'rating'
|
193
|
+
RESUME = 'resume'
|
194
|
+
RUNTIME = 'runtime'
|
195
|
+
SEASON = 'season'
|
196
|
+
SET = 'set'
|
197
|
+
SETID = 'setid'
|
198
|
+
SHOWLINK = 'showlink'
|
199
|
+
SHOWTITLE = 'showtitle'
|
200
|
+
SIZE = 'size'
|
201
|
+
SORTTITLE = 'sorttitle'
|
202
|
+
SPECIALSORTEPISODE = 'specialsortepisode'
|
203
|
+
SPECIALSORTSEASON = 'specialsortseason'
|
204
|
+
STREAMDETAILS = 'streamdetails'
|
205
|
+
STUDIO = 'studio'
|
206
|
+
STYLE = 'style'
|
207
|
+
TAG = 'tag'
|
208
|
+
TAGLINE = 'tagline'
|
209
|
+
THEME = 'theme'
|
210
|
+
THUMBNAIL = 'thumbnail'
|
211
|
+
TITLE = 'title'
|
212
|
+
TOP250 = 'top250'
|
213
|
+
TRACK = 'track'
|
214
|
+
TRAILER = 'trailer'
|
215
|
+
TVSHOWID = 'tvshowid'
|
216
|
+
UNIQUEID = 'uniqueid'
|
217
|
+
VOTES = 'votes'
|
218
|
+
WATCHEDEPISODES = 'watchedepisodes'
|
219
|
+
WRITER = 'writer'
|
220
|
+
YEAR = 'year'
|
221
|
+
end
|
222
|
+
|
223
|
+
# File/Label tuple
|
224
|
+
class FileLabel
|
225
|
+
include Comparable
|
226
|
+
extend Creatable
|
227
|
+
|
228
|
+
attr_reader :file, :label
|
229
|
+
|
230
|
+
def initialize(file, label)
|
231
|
+
@file = file
|
232
|
+
@label = label
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
156
236
|
# List.Item.Base https://kodi.wiki/view/JSON-RPC_API/v12#List.Item.Base
|
157
237
|
module ListItemBase
|
158
238
|
include Video::VideoDetailsFile
|
@@ -168,31 +248,34 @@ module KodiClient
|
|
168
248
|
:special_sort_season, :studio, :style, :tag, :tag_line, :theme, :top250, :total_discs, :track,
|
169
249
|
:trailer, :tv_show_id, :type, :unique_id, :votes, :watched_episodes, :writer
|
170
250
|
|
251
|
+
def list_item_base_mappings
|
252
|
+
mappings = {
|
253
|
+
'cast' => Creatable::CreateMap.new(Video::VideoCast, true),
|
254
|
+
'contributors' => Creatable::CreateMap.new(Audio::AudioContributor, true),
|
255
|
+
'resume' => Creatable::CreateMap.new(Video::VideoResume),
|
256
|
+
'streamdetails' => Creatable::CreateMap.new(Video::Streams),
|
257
|
+
'art' => Creatable::CreateMap.new(Media::MediaArtwork)
|
258
|
+
}
|
259
|
+
mappings.merge(video_details_file_mappings).merge(audio_details_media_mappings)
|
260
|
+
end
|
261
|
+
|
171
262
|
def list_item_base_by_hash(hash)
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
special_sort_episode special_sort_season studio style tag
|
189
|
-
tag_line theme top250 total_discs track trailer tv_show_id
|
190
|
-
type unique_id votes watched_episodes writer director]),
|
191
|
-
resume, hash['runtime'], stream_details,
|
192
|
-
*Creatable.hash_to_arr(hash, %w[date_added file last_played plot title]), art,
|
193
|
-
*Creatable.hash_to_arr(hash, %w[play_count fan_art thumbnail label artist artist_id
|
194
|
-
display_artist musicbrainz_album_artist_id rating sort_artist
|
195
|
-
user_rating year genre]))
|
263
|
+
return nil if hash.nil?
|
264
|
+
|
265
|
+
list_item_base(*Creatable.hash_to_arr(
|
266
|
+
hash, %w[album album_artist album_artist_id album_id album_release_type album_status bit_rate
|
267
|
+
bpm cast channels comment compilation contributors country description disc
|
268
|
+
disc_title display_composer display_conductor display_lyricist display_orchestra
|
269
|
+
duration dyn_path episode episode_guide first_aired id imdb_number is_box_set
|
270
|
+
lyrics media_path mood mpaa musicbrainz_artist_id musicbrainz_track_id original_date
|
271
|
+
original_title plot_outline premiered production_code release_date release_type
|
272
|
+
sample_rate season set set_id show_link show_title sort_title special_sort_episode
|
273
|
+
special_sort_season studio style tag tag_line theme top250 total_discs track
|
274
|
+
trailer tv_show_id type unique_id votes watched_episodes writer director resume
|
275
|
+
runtime stream_details date_added file last_played plot title art play_count
|
276
|
+
fan_art thumbnail label artist artist_id display_artist musicbrainz_album_artist_id
|
277
|
+
rating sort_artist user_rating year genre], list_item_base_mappings
|
278
|
+
))
|
196
279
|
end
|
197
280
|
|
198
281
|
def list_item_base(album, album_artist, album_artist_id, album_id, album_release_type, album_status, bit_rate,
|
@@ -286,38 +369,27 @@ module KodiClient
|
|
286
369
|
include ListItemBase
|
287
370
|
include Comparable
|
288
371
|
extend Creatable
|
372
|
+
extend ListItemBase
|
289
373
|
|
290
374
|
attr_reader :channel, :channel_number, :channel_type, :end_time, :hidden, :locked, :start_time,
|
291
375
|
:sub_channel_number
|
292
376
|
|
293
|
-
|
294
|
-
|
377
|
+
fields_to_map %w[channel channel_number channel_type end_time hidden locked start_time sub_channel_number
|
378
|
+
album album_artist album_artist_id album_id album_release_type album_status bit_rate
|
379
|
+
bpm cast channels comment compilation contributors country description disc
|
380
|
+
disc_title display_composer display_conductor display_lyricist display_orchestra
|
381
|
+
duration dyn_path episode episode_guide first_aired id imdb_number is_box_set
|
382
|
+
lyrics media_path mood mpaa musicbrainz_artist_id musicbrainz_track_id original_date
|
383
|
+
original_title plot_outline premiered production_code release_date release_type
|
384
|
+
sample_rate season set set_id show_link show_title sort_title special_sort_episode
|
385
|
+
special_sort_season studio style tag tag_line theme top250 total_discs track
|
386
|
+
trailer tv_show_id type unique_id votes watched_episodes writer director resume
|
387
|
+
runtime stream_details date_added file last_played plot title art play_count
|
388
|
+
fan_art thumbnail label artist artist_id display_artist musicbrainz_album_artist_id
|
389
|
+
rating sort_artist user_rating year genre]
|
295
390
|
|
296
|
-
|
297
|
-
|
298
|
-
resume = Types::Video::VideoResume.create(hash['resume'])
|
299
|
-
stream_details = Types::Video::Streams.create(hash['streamdetails'])
|
300
|
-
art = Types::Media::MediaArtwork.create(hash['art'])
|
301
|
-
hash['type'] = 'unknown' if hash['type'].nil?
|
302
|
-
new(*Creatable.hash_to_arr(hash, %w[channel channel_number channel_type end_time hidden locked start_time
|
303
|
-
sub_channel_number album album_artist album_artist_id album_id
|
304
|
-
album_release_type album_status bit_rate bpm]), cast,
|
305
|
-
hash['channels'], hash['comment'], hash['compilation'], contributors,
|
306
|
-
*Creatable.hash_to_arr(hash, %w[country description disc disc_title display_composer
|
307
|
-
display_conductor display_lyricist display_orchestra duration
|
308
|
-
dyn_path episode episode_guide first_aired id imdb_number
|
309
|
-
is_box_set lyrics media_path mood mpaa musicbrainz_artist_id
|
310
|
-
musicbrainz_track_id original_date original_title plot_outline
|
311
|
-
premiered production_code release_date release_type sample_rate
|
312
|
-
season set set_id show_link show_title sort_title
|
313
|
-
special_sort_episode special_sort_season studio style tag
|
314
|
-
tag_line theme top250 total_discs track trailer tv_show_id
|
315
|
-
type unique_id votes watched_episodes writer director]),
|
316
|
-
resume, hash['runtime'], stream_details,
|
317
|
-
*Creatable.hash_to_arr(hash, %w[date_added file last_played plot title]), art,
|
318
|
-
*Creatable.hash_to_arr(hash, %w[play_count fan_art thumbnail label artist artist_id
|
319
|
-
display_artist musicbrainz_album_artist_id rating sort_artist
|
320
|
-
user_rating year genre]))
|
391
|
+
def self.lazy_type_mapping
|
392
|
+
list_item_base_mappings
|
321
393
|
end
|
322
394
|
|
323
395
|
def initialize(channel, channel_number, channel_type, end_time, hidden, locked, start_time, sub_channel_number,
|
@@ -333,7 +405,6 @@ module KodiClient
|
|
333
405
|
runtime, stream_details, date_added, file, last_played, plot, title, art, play_count,
|
334
406
|
fan_art, thumbnail, label, artist, artist_id, display_artist, musicbrainz_album_artist_id,
|
335
407
|
rating, sort_artist, user_rating, year, genre)
|
336
|
-
|
337
408
|
@channel = channel
|
338
409
|
@channel_number = channel_number
|
339
410
|
@channel_type = channel_type
|
@@ -342,6 +413,7 @@ module KodiClient
|
|
342
413
|
@locked = locked
|
343
414
|
@start_time = start_time
|
344
415
|
@sub_channel_number = sub_channel_number
|
416
|
+
type = type.nil? ? 'unknown' : type
|
345
417
|
|
346
418
|
list_item_base(album, album_artist, album_artist_id, album_id, album_release_type, album_status, bit_rate,
|
347
419
|
bpm, cast, channels, comment, compilation, contributors, country, description, disc,
|
@@ -356,9 +428,66 @@ module KodiClient
|
|
356
428
|
fan_art, thumbnail, label, artist, artist_id, display_artist, musicbrainz_album_artist_id,
|
357
429
|
rating, sort_artist, user_rating, year, genre)
|
358
430
|
end
|
431
|
+
end
|
359
432
|
|
360
|
-
|
361
|
-
|
433
|
+
# List.Item.File https://kodi.wiki/view/JSON-RPC_API/v12#List.Item.File
|
434
|
+
class ListItemFile
|
435
|
+
include ListItemBase
|
436
|
+
include Comparable
|
437
|
+
extend Creatable
|
438
|
+
extend ListItemBase
|
439
|
+
|
440
|
+
attr_reader :file, :file_type, :last_modified, :mime_type, :size
|
441
|
+
|
442
|
+
fields_to_map %w[file_type last_modified mime_type size
|
443
|
+
album album_artist album_artist_id album_id album_release_type album_status bit_rate
|
444
|
+
bpm cast channels comment compilation contributors country description disc
|
445
|
+
disc_title display_composer display_conductor display_lyricist display_orchestra
|
446
|
+
duration dyn_path episode episode_guide first_aired id imdb_number is_box_set
|
447
|
+
lyrics media_path mood mpaa musicbrainz_artist_id musicbrainz_track_id original_date
|
448
|
+
original_title plot_outline premiered production_code release_date release_type
|
449
|
+
sample_rate season set set_id show_link show_title sort_title special_sort_episode
|
450
|
+
special_sort_season studio style tag tag_line theme top250 total_discs track
|
451
|
+
trailer tv_show_id type unique_id votes watched_episodes writer director resume
|
452
|
+
runtime stream_details date_added file last_played plot title art play_count
|
453
|
+
fan_art thumbnail label artist artist_id display_artist musicbrainz_album_artist_id
|
454
|
+
rating sort_artist user_rating year genre]
|
455
|
+
|
456
|
+
def self.lazy_type_mapping
|
457
|
+
list_item_base_mappings
|
458
|
+
end
|
459
|
+
|
460
|
+
def initialize(file_type, last_modified, mime_type, size,
|
461
|
+
album, album_artist, album_artist_id, album_id, album_release_type, album_status, bit_rate,
|
462
|
+
bpm, cast, channels, comment, compilation, contributors, country, description, disc,
|
463
|
+
disc_title, display_composer, display_conductor, display_lyricist, display_orchestra,
|
464
|
+
duration, dyn_path, episode, episode_guide, first_aired, id, imdb_number, is_box_set,
|
465
|
+
lyrics, media_path, mood, mpaa, musicbrainz_artist_id, musicbrainz_track_id, original_date,
|
466
|
+
original_title, plot_outline, premiered, production_code, release_date, release_type,
|
467
|
+
sample_rate, season, set, set_id, show_link, show_title, sort_title, special_sort_episode,
|
468
|
+
special_sort_season, studio, style, tag, tag_line, theme, top250, total_discs, track,
|
469
|
+
trailer, tv_show_id, type, unique_id, votes, watched_episodes, writer, director, resume,
|
470
|
+
runtime, stream_details, date_added, file, last_played, plot, title, art, play_count,
|
471
|
+
fan_art, thumbnail, label, artist, artist_id, display_artist, musicbrainz_album_artist_id,
|
472
|
+
rating, sort_artist, user_rating, year, genre)
|
473
|
+
@file = file
|
474
|
+
@file_type = file_type
|
475
|
+
@last_modified = last_modified
|
476
|
+
@mime_type = mime_type
|
477
|
+
@size = size
|
478
|
+
type = type.nil? ? 'unknown' : type
|
479
|
+
list_item_base(album, album_artist, album_artist_id, album_id, album_release_type, album_status, bit_rate,
|
480
|
+
bpm, cast, channels, comment, compilation, contributors, country, description, disc,
|
481
|
+
disc_title, display_composer, display_conductor, display_lyricist, display_orchestra,
|
482
|
+
duration, dyn_path, episode, episode_guide, first_aired, id, imdb_number, is_box_set,
|
483
|
+
lyrics, media_path, mood, mpaa, musicbrainz_artist_id, musicbrainz_track_id, original_date,
|
484
|
+
original_title, plot_outline, premiered, production_code, release_date, release_type,
|
485
|
+
sample_rate, season, set, set_id, show_link, show_title, sort_title, special_sort_episode,
|
486
|
+
special_sort_season, studio, style, tag, tag_line, theme, top250, total_discs, track,
|
487
|
+
trailer, tv_show_id, type, unique_id, votes, watched_episodes, writer, director, resume,
|
488
|
+
runtime, stream_details, date_added, file, last_played, plot, title, art, play_count,
|
489
|
+
fan_art, thumbnail, label, artist, artist_id, display_artist, musicbrainz_album_artist_id,
|
490
|
+
rating, sort_artist, user_rating, year, genre)
|
362
491
|
end
|
363
492
|
end
|
364
493
|
|
@@ -1,9 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'kodi_client/global_types/item_types'
|
4
|
-
require 'kodi_client/util/comparable'
|
5
|
-
require 'kodi_client/util/creatable'
|
6
|
-
|
7
3
|
module KodiClient
|
8
4
|
module Types
|
9
5
|
module Media
|
@@ -23,10 +19,12 @@ module KodiClient
|
|
23
19
|
|
24
20
|
attr_reader :fan_art, :thumbnail
|
25
21
|
|
22
|
+
def media_details_base_mappings
|
23
|
+
item_details_base_mappings
|
24
|
+
end
|
25
|
+
|
26
26
|
def media_details_base_by_hash(hash)
|
27
|
-
|
28
|
-
@thumbnail = hash['thumbnail']
|
29
|
-
item_details_base_by_hash(hash)
|
27
|
+
media_details_base(*Creatable.hash_to_arr(hash, %w[fan_art thumbnail label]), media_details_base_mappings)
|
30
28
|
end
|
31
29
|
|
32
30
|
def media_details_base(fan_art, thumbnail, label)
|
@@ -1,10 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'kodi_client/global_types/item_types'
|
4
|
-
require 'kodi_client/global_types/global_types'
|
5
|
-
require 'kodi_client/util/comparable'
|
6
|
-
require 'kodi_client/util/iterable'
|
7
|
-
|
8
3
|
module KodiClient
|
9
4
|
module Types
|
10
5
|
module Player
|
@@ -195,35 +190,20 @@ module KodiClient
|
|
195
190
|
:live, :party_mode, :percentage, :playlist_id, :position, :repeat, :shuffled, :speed,
|
196
191
|
:subtitle_enabled, :subtitles, :time, :total_time, :type, :video_streams
|
197
192
|
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
current_audio_stream = AudioStream.create(hash['currentaudiostream'])
|
203
|
-
current_subtitle = Subtitle.create(hash['currentsubtitle'])
|
204
|
-
current_video_stream = VideoStream.create(hash['currentvideostream'])
|
205
|
-
subtitles = Subtitle.create_list(hash['subtitles'])
|
206
|
-
time = Types::Global::GlobalTime.create(hash['time'])
|
207
|
-
total_time = Types::Global::GlobalTime.create(hash['totaltime'])
|
208
|
-
video_streams = VideoStream.create_list(hash['videostreams'])
|
209
|
-
|
210
|
-
hash['type'] = PlayerType::VIDEO if hash['type'].nil?
|
211
|
-
hash['playlistid'] = -1 if hash['playlistid'].nil?
|
212
|
-
hash['position'] = -1 if hash['position'].nil?
|
213
|
-
hash['repeat'] = PlayerRepeat::OFF if hash['repeat'].nil?
|
214
|
-
|
215
|
-
new(audio_streams, *Creatable.hash_to_arr(hash, %w[cache_percentage can_change_speed can_move
|
216
|
-
can_repeat can_rotate can_seek can_shuffle can_zoom]),
|
217
|
-
current_audio_stream, current_subtitle, current_video_stream,
|
218
|
-
*Creatable.hash_to_arr(hash, %w[live party_mode percentage playlist_id position repeat
|
219
|
-
shuffled speed subtitle_enabled]), subtitles, time, total_time,
|
220
|
-
hash['type'], video_streams)
|
221
|
-
end
|
193
|
+
type_mapping ['audiostreams', AudioStream, true], ['currentaudiostream', AudioStream],
|
194
|
+
['currentsubtitle', Subtitle], ['currentvideostream', VideoStream],
|
195
|
+
['subtitles', Subtitle, true], ['time', Global::GlobalTime],
|
196
|
+
['totaltime', Global::GlobalTime], ['videostreams', VideoStream, true]
|
222
197
|
|
223
198
|
def initialize(audio_streams, cache_percentage, can_change_speed, can_move, can_repeat, can_rotate, can_seek,
|
224
199
|
can_shuffle, can_zoom, current_audio_stream, current_subtitle, current_video_stream, live,
|
225
200
|
party_mode, percentage, playlist_id, position, repeat, shuffled, speed,
|
226
201
|
subtitle_enabled, subtitles, time, total_time, type, video_streams)
|
202
|
+
type = type.nil? ? PlayerType::VIDEO : type
|
203
|
+
playlist_id = playlist_id.nil? ? -1 : playlist_id
|
204
|
+
position = position.nil? ? -1 : position
|
205
|
+
repeat = repeat.nil? ? PlayerRepeat::OFF : repeat
|
206
|
+
|
227
207
|
@audio_streams = audio_streams
|
228
208
|
@cache_percentage = cache_percentage
|
229
209
|
@can_change_speed = can_change_speed
|
@@ -299,14 +279,9 @@ module KodiClient
|
|
299
279
|
include Comparable
|
300
280
|
extend Creatable
|
301
281
|
|
302
|
-
|
303
|
-
return nil if hash.nil?
|
282
|
+
attr_reader :percentage, :time, :total_time
|
304
283
|
|
305
|
-
|
306
|
-
total_time = Types::Global::GlobalTime.create(hash['totaltime'])
|
307
|
-
|
308
|
-
new(hash['percentage'], time, total_time)
|
309
|
-
end
|
284
|
+
type_mapping ['time', Global::GlobalTime], ['totaltime', Global::GlobalTime]
|
310
285
|
|
311
286
|
def initialize(percentage, time, total_time)
|
312
287
|
@percentage = percentage
|
@@ -1,9 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'kodi_client/util/comparable'
|
4
|
-
require 'kodi_client/util/iterable'
|
5
|
-
require 'kodi_client/global_types/item_types'
|
6
|
-
|
7
3
|
module KodiClient
|
8
4
|
module Types
|
9
5
|
module Profiles
|
@@ -24,11 +20,7 @@ module KodiClient
|
|
24
20
|
|
25
21
|
attr_reader :lock_mode, :thumbnail
|
26
22
|
|
27
|
-
|
28
|
-
return nil if hash.nil?
|
29
|
-
|
30
|
-
new(*Creatable.hash_to_arr(hash, %w[lock_mode thumbnail label]))
|
31
|
-
end
|
23
|
+
fields_to_map %w[lock_mode thumbnail label]
|
32
24
|
|
33
25
|
def initialize(lock_mode, thumbnail, label)
|
34
26
|
@lock_mode = lock_mode
|
@@ -48,14 +40,7 @@ module KodiClient
|
|
48
40
|
|
49
41
|
attr_reader :limits, :profiles
|
50
42
|
|
51
|
-
|
52
|
-
return nil if hash.nil?
|
53
|
-
|
54
|
-
limits = Types::List::ListLimitsReturned.create(hash['limits'])
|
55
|
-
profiles = Types::Profiles::DetailsProfile.create_list(hash['profiles'])
|
56
|
-
|
57
|
-
new(limits, profiles)
|
58
|
-
end
|
43
|
+
type_mapping ['limits', List::ListLimitsReturned], ['profiles', DetailsProfile, true]
|
59
44
|
|
60
45
|
def initialize(limits, profiles)
|
61
46
|
@limits = limits
|
@@ -1,23 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'kodi_client/global_types/media_types'
|
4
|
-
require 'kodi_client/global_types/player_type'
|
5
|
-
require 'kodi_client/util/comparable'
|
6
|
-
require 'kodi_client/util/creatable'
|
7
|
-
|
8
3
|
module KodiClient
|
9
4
|
module Types
|
10
5
|
module Video
|
11
|
-
|
12
6
|
# Video.Details.Base https://kodi.wiki/view/JSON-RPC_API/v12#Video.Details.Base
|
13
7
|
module VideoDetailsBase
|
14
8
|
include Media::MediaDetailsBase
|
15
9
|
|
16
10
|
attr_reader :art, :play_count
|
17
11
|
|
12
|
+
def video_details_base_mappings
|
13
|
+
media_details_base_mappings
|
14
|
+
end
|
15
|
+
|
18
16
|
def video_details_base_by_hash(hash)
|
19
|
-
|
20
|
-
|
17
|
+
video_details_base(*Creatable.hash_to_arr(hash, %w[art play_count fan_art thumbnail label],
|
18
|
+
video_details_base_mappings))
|
21
19
|
end
|
22
20
|
|
23
21
|
def video_details_base(art, play_count, fan_art, thumbnail, label)
|
@@ -48,9 +46,13 @@ module KodiClient
|
|
48
46
|
|
49
47
|
attr_reader :title
|
50
48
|
|
49
|
+
def video_details_media_mappings
|
50
|
+
video_details_base_mappings
|
51
|
+
end
|
52
|
+
|
51
53
|
def video_details_media_by_hash(hash)
|
52
|
-
|
53
|
-
|
54
|
+
video_details_media(*Creatable.hash_to_arr(hash, %w[title art play_count fan_art thumbnail label]),
|
55
|
+
video_details_base_mappings)
|
54
56
|
end
|
55
57
|
|
56
58
|
def video_details_media(title, art, play_count, fan_art, thumbnail, label)
|
@@ -65,10 +67,14 @@ module KodiClient
|
|
65
67
|
|
66
68
|
attr_reader :date_added, :file, :last_played, :plot
|
67
69
|
|
70
|
+
def video_details_item_mappings
|
71
|
+
video_details_media_mappings
|
72
|
+
end
|
73
|
+
|
68
74
|
def video_details_item_by_hash(hash)
|
69
|
-
|
70
|
-
|
71
|
-
|
75
|
+
video_details_item(*Creatable.hash_to_arr(hash, %w[date_added file last_played plot title art
|
76
|
+
play_count fan_art thumbnail label],
|
77
|
+
video_details_item_mappings))
|
72
78
|
end
|
73
79
|
|
74
80
|
def video_details_item(date_added, file, last_played, plot, title, art, play_count, fan_art, thumbnail, label)
|
@@ -86,13 +92,18 @@ module KodiClient
|
|
86
92
|
|
87
93
|
attr_reader :director, :resume, :runtime, :stream_details
|
88
94
|
|
95
|
+
def video_details_file_mappings
|
96
|
+
mappings = {
|
97
|
+
'resume' => Creatable::CreateMap.new(VideoResume),
|
98
|
+
'streamdetails' => Creatable::CreateMap.new(Streams)
|
99
|
+
}
|
100
|
+
mappings.merge(video_details_item_mappings)
|
101
|
+
end
|
102
|
+
|
89
103
|
def video_details_file_by_hash(hash)
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
video_details_file(hash['director'], resume, hash['runtime'], stream_details,
|
94
|
-
*Creatable.hash_to_arr(hash, %w[date_added file last_played plot title]), art,
|
95
|
-
*Creatable.hash_to_arr(hash, %w[play_count fan_art thumbnail label]))
|
104
|
+
video_details_file(*Creatable.hash_to_arr(hash, %w[director resume runtime stream_details date_added
|
105
|
+
file last_played plot title art play_count fan_art
|
106
|
+
thumbnail label], video_details_file_mappings))
|
96
107
|
end
|
97
108
|
|
98
109
|
def video_details_file(director, resume, runtime, stream_details, date_added, file, last_played, plot, title,
|
@@ -125,12 +136,8 @@ module KodiClient
|
|
125
136
|
|
126
137
|
attr_reader :audio, :subtitle, :video
|
127
138
|
|
128
|
-
|
129
|
-
|
130
|
-
subtitle = Types::Player::Subtitle.create_list(hash['subtitle'])
|
131
|
-
video = Types::Player::VideoStream.create_list(hash['video'])
|
132
|
-
new(audio, subtitle, video)
|
133
|
-
end
|
139
|
+
type_mapping ['audio', Player::AudioStream, true], ['subtitle', Player::Subtitle, true],
|
140
|
+
['video', Player::VideoStream, true]
|
134
141
|
|
135
142
|
def initialize(audio, subtitle, video)
|
136
143
|
@audio = audio
|