kodi_client 0.6.3 → 0.6.4

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.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -0
  3. data/kodi_client.gemspec +1 -1
  4. data/lib/kodi_client/extensions/chainable.rb +71 -0
  5. data/lib/kodi_client/extensions/comparable.rb +29 -0
  6. data/lib/kodi_client/extensions/creatable.rb +137 -0
  7. data/lib/kodi_client/extensions/iterable.rb +14 -0
  8. data/lib/kodi_client/kodi_error.rb +14 -0
  9. data/lib/kodi_client/kodi_method.rb +34 -0
  10. data/lib/kodi_client/{options.rb → kodi_options.rb} +1 -1
  11. data/lib/kodi_client/kodi_request.rb +16 -0
  12. data/lib/kodi_client/kodi_response.rb +21 -0
  13. data/lib/kodi_client/{method → methods}/addons.rb +4 -4
  14. data/lib/kodi_client/{method → methods}/application.rb +2 -2
  15. data/lib/kodi_client/{method → methods}/audio_library.rb +2 -2
  16. data/lib/kodi_client/{method → methods}/favourites.rb +2 -2
  17. data/lib/kodi_client/{method → methods}/files.rb +2 -2
  18. data/lib/kodi_client/{method → methods}/gui.rb +2 -2
  19. data/lib/kodi_client/{method → methods}/input.rb +2 -2
  20. data/lib/kodi_client/{method → methods}/player.rb +2 -2
  21. data/lib/kodi_client/{method → methods}/profiles.rb +2 -2
  22. data/lib/kodi_client/{method → methods}/system.rb +2 -2
  23. data/lib/kodi_client/types/addons/addon_content_type.rb +18 -0
  24. data/lib/kodi_client/types/addons/addon_dependency_type.rb +21 -0
  25. data/lib/kodi_client/types/addons/addon_details_type.rb +44 -0
  26. data/lib/kodi_client/types/addons/addon_extra_info_type.rb +20 -0
  27. data/lib/kodi_client/types/addons/addon_fields_type.rb +28 -0
  28. data/lib/kodi_client/types/addons/addon_types_type.rb +48 -0
  29. data/lib/kodi_client/types/addons/get_addon_returned_type.rb +21 -0
  30. data/lib/kodi_client/types/addons/get_addons_returned_type.rb +22 -0
  31. data/lib/kodi_client/types/application/property_name_type.rb +19 -0
  32. data/lib/kodi_client/types/application/property_value_type.rb +24 -0
  33. data/lib/kodi_client/types/application/version_type.rb +22 -0
  34. data/lib/kodi_client/types/audio/audio_album_release_type_type.rb +15 -0
  35. data/lib/kodi_client/types/audio/audio_contributor_type.rb +22 -0
  36. data/lib/kodi_client/types/audio/audio_details_base_type.rb +31 -0
  37. data/lib/kodi_client/types/audio/audio_details_media_type.rb +45 -0
  38. data/lib/kodi_client/types/audio/audio_fields_album_type.rb +51 -0
  39. data/lib/kodi_client/types/audio/details_album_type.rb +58 -0
  40. data/lib/kodi_client/types/audio/genre_type.rb +20 -0
  41. data/lib/kodi_client/types/audio/get_albums_returned_type.rb +22 -0
  42. data/lib/kodi_client/types/favourites/details_favourite_type.rb +24 -0
  43. data/lib/kodi_client/types/favourites/fields_favourite_type.rb +17 -0
  44. data/lib/kodi_client/types/favourites/get_favourite_returned_type.rb +22 -0
  45. data/lib/kodi_client/types/favourites/type_type.rb +18 -0
  46. data/lib/kodi_client/types/files/file_label_type.rb +20 -0
  47. data/lib/kodi_client/types/files/get_directory_returned_type.rb +22 -0
  48. data/lib/kodi_client/types/files/get_sources_returned_type.rb +22 -0
  49. data/lib/kodi_client/types/files/media_type.rb +18 -0
  50. data/lib/kodi_client/types/files/prepare_download_returned_type.rb +21 -0
  51. data/lib/kodi_client/types/global/direction_type.rb +17 -0
  52. data/lib/kodi_client/types/global/global_time_type.rb +22 -0
  53. data/lib/kodi_client/types/global/id_label_type.rb +20 -0
  54. data/lib/kodi_client/types/global/id_name_type.rb +20 -0
  55. data/lib/kodi_client/types/global/increment_decrement_type.rb +15 -0
  56. data/lib/kodi_client/types/global/next_prev_type.rb +17 -0
  57. data/lib/kodi_client/types/global/password_encryption_type.rb +16 -0
  58. data/lib/kodi_client/types/global/rotate_type.rb +15 -0
  59. data/lib/kodi_client/types/global/toggle_type.rb +16 -0
  60. data/lib/kodi_client/types/gui/gui_window_type.rb +124 -0
  61. data/lib/kodi_client/types/gui/property_name_type.rb +18 -0
  62. data/lib/kodi_client/types/gui/property_value_type.rb +26 -0
  63. data/lib/kodi_client/types/gui/stereoscopy_mode_type.rb +31 -0
  64. data/lib/kodi_client/types/input/input_action_type.rb +212 -0
  65. data/lib/kodi_client/types/{item_types.rb → items/item_details_base_type.rb} +1 -3
  66. data/lib/kodi_client/types/list/list_field_files_type.rb +83 -0
  67. data/lib/kodi_client/types/list/list_fields_all_type.rb +96 -0
  68. data/lib/kodi_client/types/list/list_item_all_type.rb +73 -0
  69. data/lib/kodi_client/types/list/list_item_base_type.rb +138 -0
  70. data/lib/kodi_client/types/list/list_item_file_type.rb +68 -0
  71. data/lib/kodi_client/types/list/list_limits_returned_type.rb +23 -0
  72. data/lib/kodi_client/types/list/list_limits_type.rb +19 -0
  73. data/lib/kodi_client/types/list/list_sort_method_type.rb +54 -0
  74. data/lib/kodi_client/types/list/list_sort_type.rb +22 -0
  75. data/lib/kodi_client/types/list/sort_order_type.rb +15 -0
  76. data/lib/kodi_client/types/media/media_artwork_type.rb +22 -0
  77. data/lib/kodi_client/types/media/media_details_base_type.rb +28 -0
  78. data/lib/kodi_client/types/media/media_type_type.rb +16 -0
  79. data/lib/kodi_client/types/player/audio_stream_type.rb +29 -0
  80. data/lib/kodi_client/types/player/player_position_time_type.rb +22 -0
  81. data/lib/kodi_client/types/player/player_repeat_type.rb +17 -0
  82. data/lib/kodi_client/types/player/player_speed_type.rb +26 -0
  83. data/lib/kodi_client/types/player/player_type.rb +24 -0
  84. data/lib/kodi_client/types/player/player_type_type.rb +16 -0
  85. data/lib/kodi_client/types/player/player_view_mode_type.rb +23 -0
  86. data/lib/kodi_client/types/player/player_visibility_type.rb +16 -0
  87. data/lib/kodi_client/types/player/property_name_type.rb +38 -0
  88. data/lib/kodi_client/types/player/property_value_type.rb +60 -0
  89. data/lib/kodi_client/types/player/seek_jump_type.rb +17 -0
  90. data/lib/kodi_client/types/player/seek_returned_type.rb +23 -0
  91. data/lib/kodi_client/types/player/subtitle_type.rb +24 -0
  92. data/lib/kodi_client/types/player/video_stream_type.rb +26 -0
  93. data/lib/kodi_client/types/player/view_mode_type.rb +22 -0
  94. data/lib/kodi_client/types/player/zoom_type.rb +15 -0
  95. data/lib/kodi_client/types/profiles/details_profile_type.rb +24 -0
  96. data/lib/kodi_client/types/profiles/fields_profile_type.rb +15 -0
  97. data/lib/kodi_client/types/profiles/get_profiles_returned_type.rb +22 -0
  98. data/lib/kodi_client/types/profiles/profile_password_type.rb +20 -0
  99. data/lib/kodi_client/types/{pvr_type.rb → pvr/channel_type_type.rb} +2 -4
  100. data/lib/kodi_client/types/system/property_name_type.rb +17 -0
  101. data/lib/kodi_client/types/{system_types.rb → system/property_value_type.rb} +2 -13
  102. data/lib/kodi_client/types/video/stream_details_type.rb +24 -0
  103. data/lib/kodi_client/types/video/video_cast_type.rb +22 -0
  104. data/lib/kodi_client/types/video/video_details_base_type.rb +29 -0
  105. data/lib/kodi_client/types/video/video_details_file_type.rb +37 -0
  106. data/lib/kodi_client/types/video/video_details_item_type.rb +32 -0
  107. data/lib/kodi_client/types/video/video_details_media_type.rb +28 -0
  108. data/lib/kodi_client/types/video/video_resume_type.rb +20 -0
  109. data/lib/kodi_client.rb +137 -49
  110. metadata +107 -34
  111. data/lib/kodi_client/Chainable.rb +0 -48
  112. data/lib/kodi_client/kodi_module.rb +0 -80
  113. data/lib/kodi_client/types/addon_types.rb +0 -177
  114. data/lib/kodi_client/types/application_types.rb +0 -52
  115. data/lib/kodi_client/types/audio_types.rb +0 -221
  116. data/lib/kodi_client/types/favourites_types.rb +0 -61
  117. data/lib/kodi_client/types/files_types.rb +0 -63
  118. data/lib/kodi_client/types/global_types.rb +0 -102
  119. data/lib/kodi_client/types/gui_types.rb +0 -179
  120. data/lib/kodi_client/types/input_types.rb +0 -214
  121. data/lib/kodi_client/types/list_types.rb +0 -542
  122. data/lib/kodi_client/types/media_types.rb +0 -53
  123. data/lib/kodi_client/types/player_type.rb +0 -294
  124. data/lib/kodi_client/types/profiles_types.rb +0 -65
  125. data/lib/kodi_client/types/video_types.rb +0 -150
  126. data/lib/kodi_client/util/comparable.rb +0 -20
  127. data/lib/kodi_client/util/creatable.rb +0 -106
  128. data/lib/kodi_client/util/iterable.rb +0 -11
@@ -1,294 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module KodiClient
4
- module Types
5
- module Player
6
-
7
- # enum for in/out zoom
8
- module Zoom
9
- extend Iterable
10
-
11
- IN = 'in'
12
- OUT = 'out'
13
- end
14
-
15
- # Player.ViewMode https://kodi.wiki/view/JSON-RPC_API/v12#Player.ViewMode
16
- module ViewMode
17
- extend Iterable
18
-
19
- NORMAL = 'normal'
20
- ZOOM = 'zoom'
21
- STRETCH_4x3 = 'strech4x3'
22
- WIDE_ZOOM = 'widezoom'
23
- STRETCH_16x9 = 'stretch16x9'
24
- ORIGINAL = 'original'
25
- STRETCH_16x9_NONLIN = 'stretch16x9nonline'
26
- ZOOM_120_WIDTH = 'zoom120width'
27
- ZOOM_110_WIDTH = 'zoom110width'
28
- end
29
-
30
- # player types
31
- module PlayerVisibilityType
32
- extend Iterable
33
-
34
- INTERNAL = 'internal'
35
- EXTERNAL = 'external'
36
- REMOTE = 'remote'
37
- end
38
-
39
- # Player.Type https://kodi.wiki/view/JSON-RPC_API/v12#Player.Type
40
- module PlayerType
41
- extend Iterable
42
-
43
- VIDEO = 'video'
44
- AUDIO = 'audio'
45
- PICTURE = 'picture'
46
- end
47
-
48
- # Player.Repeat https://kodi.wiki/view/JSON-RPC_API/v12#Player.Repeat
49
- module PlayerRepeat
50
- extend Iterable
51
-
52
- OFF = 'off'
53
- ONE = 'one'
54
- ALL = 'all'
55
- CYCLE = 'cycle'
56
- end
57
-
58
- # player speed enum, -32 to 32
59
- module PlayerSpeed
60
- extend Iterable
61
-
62
- MINUS_32 = -32
63
- MINUS_16 = -16
64
- MINUS_8 = -8
65
- MINUS_4 = -4
66
- MINUS_2 = -2
67
- MINUS_1 = -1
68
- NEUTRAL = 0
69
- PLUS_1 = 1
70
- PLUS_2 = 2
71
- PLUS_4 = 4
72
- PLUS_8 = 8
73
- PLUS_16 = 16
74
- PLUS_32 = 32
75
- end
76
-
77
- # player id and type
78
- class Player
79
- include Comparable
80
- extend Creatable
81
-
82
- attr_reader :player_id, :player_type, :type, :name, :plays_audio, :plays_video
83
-
84
- def initialize(player_id, player_type, type, name, plays_audio, plays_video)
85
- @player_id = player_id
86
- @player_type = player_type
87
- @type = type
88
- @name = name
89
- @plays_audio = plays_audio
90
- @plays_video = plays_video
91
- end
92
- end
93
-
94
- # Player Subtitle https://kodi.wiki/view/JSON-RPC_API/v12#Player.Subtitle
95
- class Subtitle
96
- include Comparable
97
- extend Creatable
98
-
99
- attr_reader :index, :is_default, :is_forced, :is_impaired, :language, :name
100
-
101
- def initialize(index, is_default, is_forced, is_impaired, language, name)
102
- @index = index
103
- @is_default = is_default
104
- @is_forced = is_forced
105
- @is_impaired = is_impaired
106
- @language = language
107
- @name = name
108
- end
109
- end
110
-
111
- # Player.Audio.Stream https://kodi.wiki/view/JSON-RPC_API/v12#Player.Audio.Stream
112
- class AudioStream
113
- include Comparable
114
- extend Creatable
115
-
116
- attr_reader :bitrate, :channels, :codec, :index, :is_default, :is_forced, :is_original, :language,
117
- :name, :sample_rate
118
-
119
- def initialize(bitrate, channels, codec, index, is_default, is_forced, is_original, language, name, sample_rate)
120
- @bitrate = bitrate
121
- @channels = channels
122
- @codec = codec
123
- @index = index
124
- @is_default = is_default
125
- @is_forced = is_forced
126
- @is_original = is_original
127
- @language = language
128
- @name = name
129
- @sample_rate = sample_rate
130
- end
131
- end
132
-
133
- # Player.Video.Stream https://kodi.wiki/view/JSON-RPC_API/v12#Player.Video.Stream
134
- class VideoStream
135
- include Comparable
136
- extend Creatable
137
-
138
- attr_reader :codec, :height, :index, :language, :name, :width, :duration, :aspect
139
-
140
- def initialize(codec, height, index, language, name, width, duration, aspect)
141
- @codec = codec
142
- @height = height
143
- @index = index
144
- @language = language
145
- @name = name
146
- @width = width
147
- @duration = duration
148
- @aspect = aspect
149
- end
150
- end
151
-
152
- # Player.Property.Name https://kodi.wiki/view/JSON-RPC_API/v12#Player.Property.Name
153
- module PropertyName
154
- extend Iterable
155
-
156
- AUDIOSTREAMS = 'audiostreams'
157
- CANCHANGESPEED = 'canchangespeed'
158
- CANMOVE = 'canmove'
159
- CANREPEAT = 'canrepeat'
160
- CANROTATE = 'canrotate'
161
- CANSEEK = 'canseek'
162
- CANSHUFFLE = 'canshuffle'
163
- CANZOOM = 'canzoom'
164
- CURRENTAUDIOSTREAM = 'currentaudiostream'
165
- CURRENTSUBTITLE = 'currentsubtitle'
166
- CURRENTVIDEOSTREAM = 'currentvideostream'
167
- LIVE = 'live'
168
- PARTYMODE = 'partymode'
169
- PERCENTAGE = 'percentage'
170
- PLAYLISTID = 'playlistid'
171
- POSITION = 'position'
172
- REPEAT = 'repeat'
173
- SHUFFLED = 'shuffled'
174
- SPEED = 'speed'
175
- SUBTITLEENABLED = 'subtitleenabled'
176
- SUBTITLES = 'subtitles'
177
- TIME = 'time'
178
- TOTALTIME = 'totaltime'
179
- TYPE = 'type'
180
- VIDEOSTREAMS = 'videostreams'
181
- end
182
-
183
- # Player.Property.Value https://kodi.wiki/view/JSON-RPC_API/v12#Player.Property.Name
184
- class PropertyValue
185
- include Comparable
186
- extend Creatable
187
-
188
- attr_reader :audio_streams, :cache_percentage, :can_change_speed, :can_move, :can_repeat, :can_rotate,
189
- :can_seek, :can_shuffle, :can_zoom, :current_audio_stream, :current_subtitle, :current_video_stream,
190
- :live, :party_mode, :percentage, :playlist_id, :position, :repeat, :shuffled, :speed,
191
- :subtitle_enabled, :subtitles, :time, :total_time, :type, :video_streams
192
-
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]
197
-
198
- def initialize(audio_streams, cache_percentage, can_change_speed, can_move, can_repeat, can_rotate, can_seek,
199
- can_shuffle, can_zoom, current_audio_stream, current_subtitle, current_video_stream, live,
200
- party_mode, percentage, playlist_id, position, repeat, shuffled, speed,
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
-
207
- @audio_streams = audio_streams
208
- @cache_percentage = cache_percentage
209
- @can_change_speed = can_change_speed
210
- @can_move = can_move
211
- @can_repeat = can_repeat
212
- @can_rotate = can_rotate
213
- @can_seek = can_seek
214
- @can_shuffle = can_shuffle
215
- @can_zoom = can_zoom
216
- @current_audio_stream = current_audio_stream
217
- @current_subtitle = current_subtitle
218
- @current_video_stream = current_video_stream
219
- @live = live
220
- @party_mode = party_mode
221
- @percentage = percentage
222
- @playlist_id = playlist_id
223
- @position = position
224
- @repeat = repeat
225
- @shuffled = shuffled
226
- @speed = speed
227
- @subtitle_enabled = subtitle_enabled
228
- @subtitles = subtitles
229
- @time = time
230
- @total_time = total_time
231
- @type = type
232
- @video_streams = video_streams
233
- end
234
- end
235
-
236
- # return value for Player.GetViewMode
237
- class PlayerViewMode
238
- include Comparable
239
- extend Creatable
240
-
241
- attr_reader :nonlinear_stretch, :pixel_ratio, :vertical_shift, :view_mode, :zoom
242
-
243
- def initialize(nonlinear_stretch, pixel_ratio, vertical_shift, view_mode, zoom)
244
- @nonlinear_stretch = nonlinear_stretch
245
- @pixel_ratio = pixel_ratio
246
- @vertical_shift = vertical_shift
247
- @view_mode = view_mode
248
- @zoom = zoom
249
- end
250
- end
251
-
252
- # Player.Position.Time https://kodi.wiki/view/JSON-RPC_API/v12#Player.Position.Time
253
- class PlayerPositionTime
254
- include Comparable
255
- extend Creatable
256
-
257
- attr_reader :hours, :minutes, :seconds, :milliseconds
258
-
259
- def initialize(hours, minutes, seconds, milliseconds)
260
- @hours = hours
261
- @minutes = minutes
262
- @seconds = seconds
263
- @milliseconds = milliseconds
264
- end
265
- end
266
-
267
- # defines the jump size for seek
268
- module SeekJump
269
- include Iterable
270
-
271
- SMALL_FORWARD = 'smallforward'
272
- SMALL_BACKWARD = 'smallbackward'
273
- BIG_FORWARD = 'bigforward'
274
- BIG_BACKWARD = 'bigbackward'
275
- end
276
-
277
- # return value of Player.Seek
278
- class SeekReturned
279
- include Comparable
280
- extend Creatable
281
-
282
- attr_reader :percentage, :time, :total_time
283
-
284
- type_mapping ['time', Global::GlobalTime], ['totaltime', Global::GlobalTime]
285
-
286
- def initialize(percentage, time, total_time)
287
- @percentage = percentage
288
- @time = time
289
- @total_time = total_time
290
- end
291
- end
292
- end
293
- end
294
- end
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module KodiClient
4
- module Types
5
- module Profiles
6
-
7
- # Profiles.Fields.Profile https://kodi.wiki/view/JSON-RPC_API/v12#Profiles.Fields.Profile
8
- module FieldsProfile
9
- extend Iterable
10
-
11
- LOCK_MODE = 'lockmode'
12
- THUMBNAIL = 'thumbnail'
13
- end
14
-
15
- # Profiles.Details.Profile https://kodi.wiki/view/JSON-RPC_API/v12#Profiles.Details.Profile
16
- class DetailsProfile
17
- include Comparable
18
- include Items::ItemDetailsBase
19
- extend Creatable
20
-
21
- attr_reader :lock_mode, :thumbnail
22
-
23
- fields_to_map %w[lock_mode thumbnail label]
24
-
25
- def initialize(lock_mode, thumbnail, label)
26
- @lock_mode = lock_mode
27
- @thumbnail = thumbnail
28
- item_details_base(label)
29
- end
30
-
31
- def ==(other)
32
- compare(self, other)
33
- end
34
- end
35
-
36
- # return type for Profiles.GetProfiles
37
- class GetProfilesReturned
38
- include Comparable
39
- extend Creatable
40
-
41
- attr_reader :limits, :profiles
42
-
43
- type_mapping ['limits', List::ListLimitsReturned], ['profiles', DetailsProfile, true]
44
-
45
- def initialize(limits, profiles)
46
- @limits = limits
47
- @profiles = profiles
48
- end
49
- end
50
-
51
- # Profiles.Password https://kodi.wiki/view/JSON-RPC_API/v12#Profiles.Password
52
- class ProfilePassword
53
- include Comparable
54
- extend Creatable
55
-
56
- attr_reader :value, :encryption
57
-
58
- def initialize(value, encryption = Types::Global::PasswordEncryption::MD5)
59
- @value = value
60
- @encryption = encryption
61
- end
62
- end
63
- end
64
- end
65
- end
@@ -1,150 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module KodiClient
4
- module Types
5
- module Video
6
- # Video.Details.Base https://kodi.wiki/view/JSON-RPC_API/v12#Video.Details.Base
7
- module VideoDetailsBase
8
- include Media::MediaDetailsBase
9
-
10
- attr_reader :art, :play_count
11
-
12
- def video_details_base_mappings
13
- media_details_base_mappings
14
- end
15
-
16
- def video_details_base_by_hash(hash)
17
- video_details_base(*Creatable.hash_to_arr(hash, %w[art play_count fan_art thumbnail label],
18
- video_details_base_mappings))
19
- end
20
-
21
- def video_details_base(art, play_count, fan_art, thumbnail, label)
22
- @art = art
23
- @play_count = play_count
24
- media_details_base(fan_art, thumbnail, label)
25
- end
26
- end
27
-
28
- # Video.Cast https://kodi.wiki/view/JSON-RPC_API/v12#Video.Cast
29
- class VideoCast
30
- include Comparable
31
- extend Creatable
32
-
33
- attr_reader :name, :order, :role, :thumbnail
34
-
35
- def initialize(name, order, role, thumbnail)
36
- @name = name
37
- @order = order
38
- @role = role
39
- @thumbnail = thumbnail
40
- end
41
- end
42
-
43
- # Video.Details.Media https://kodi.wiki/view/JSON-RPC_API/v12#Video.Details.Media
44
- module VideoDetailsMedia
45
- include VideoDetailsBase
46
-
47
- attr_reader :title
48
-
49
- def video_details_media_mappings
50
- video_details_base_mappings
51
- end
52
-
53
- def video_details_media_by_hash(hash)
54
- video_details_media(*Creatable.hash_to_arr(hash, %w[title art play_count fan_art thumbnail label]),
55
- video_details_base_mappings)
56
- end
57
-
58
- def video_details_media(title, art, play_count, fan_art, thumbnail, label)
59
- @title = title
60
- video_details_base(art, play_count, fan_art, thumbnail, label)
61
- end
62
- end
63
-
64
- # Video.Details.Item https://kodi.wiki/view/JSON-RPC_API/v12#Video.Details.Item
65
- module VideoDetailsItem
66
- include VideoDetailsMedia
67
-
68
- attr_reader :date_added, :file, :last_played, :plot
69
-
70
- def video_details_item_mappings
71
- video_details_media_mappings
72
- end
73
-
74
- def video_details_item_by_hash(hash)
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))
78
- end
79
-
80
- def video_details_item(date_added, file, last_played, plot, title, art, play_count, fan_art, thumbnail, label)
81
- @date_added = date_added
82
- @file = file
83
- @last_played = last_played
84
- @plot = plot
85
- video_details_media(title, art, play_count, fan_art, thumbnail, label)
86
- end
87
- end
88
-
89
- # Video.Details.File https://kodi.wiki/view/JSON-RPC_API/v12#Video.Details.File
90
- module VideoDetailsFile
91
- include VideoDetailsItem
92
-
93
- attr_reader :director, :resume, :runtime, :stream_details
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
-
103
- def video_details_file_by_hash(hash)
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))
107
- end
108
-
109
- def video_details_file(director, resume, runtime, stream_details, date_added, file, last_played, plot, title,
110
- art, play_count, fan_art, thumbnail, label)
111
- @director = director
112
- @resume = resume
113
- @runtime = runtime
114
- @stream_details = stream_details
115
- video_details_item(date_added, file, last_played, plot, title, art, play_count, fan_art, thumbnail, label)
116
- end
117
- end
118
-
119
- # Video.Resume https://kodi.wiki/view/JSON-RPC_API/v12#Video.Resume
120
- class VideoResume
121
- include Comparable
122
- extend Creatable
123
-
124
- attr_reader :position, :total
125
-
126
- def initialize(position, total)
127
- @position = position
128
- @total = total
129
- end
130
- end
131
-
132
- # Video.Streams https://kodi.wiki/view/JSON-RPC_API/v12#Video.Streams
133
- class Streams
134
- include Comparable
135
- extend Creatable
136
-
137
- attr_reader :audio, :subtitle, :video
138
-
139
- type_mapping ['audio', Player::AudioStream, true], ['subtitle', Player::Subtitle, true],
140
- ['video', Player::VideoStream, true]
141
-
142
- def initialize(audio, subtitle, video)
143
- @audio = audio
144
- @subtitle = subtitle
145
- @video = video
146
- end
147
- end
148
- end
149
- end
150
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module KodiClient
4
-
5
- # offers compare methods
6
- module Comparable
7
- def compare(obj1, obj2)
8
- is_same = true
9
- obj1.instance_variables.each do |it|
10
- is_same = false if obj1.instance_variable_get(it) != obj2.instance_variable_get(it)
11
- end
12
-
13
- is_same
14
- end
15
-
16
- def ==(other)
17
- compare(self, other)
18
- end
19
- end
20
- end
@@ -1,106 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module KodiClient
4
-
5
- # creates a create and create_list method by hash
6
- module Creatable
7
-
8
- def fields_to_map(fields)
9
- @fields_to_map = fields
10
- end
11
-
12
- def type_mapping(*args)
13
- return if args.nil?
14
-
15
- @type_mapping = {}
16
- args.map { |it| @type_mapping[it[0]] = Creatable::CreateMap.new(it[1], it[2].nil? ? false : it[2]) }
17
- end
18
-
19
- def lazy_type_mapping
20
- {}
21
- end
22
-
23
- def create_list(hash)
24
- hash.nil? ? [] : hash.map { |it| create(it) }.reject(&:nil?)
25
- end
26
-
27
- def create(hash)
28
- return nil if hash.nil?
29
-
30
- if @fields_to_map.nil? || @fields_to_map.empty?
31
- fields = @kodi_fields
32
- return nil if @kodi_fields.none? { |it| !hash[it.to_s.gsub('_', '')].nil? }
33
- else
34
- fields = @fields_to_map
35
- end
36
-
37
- mapping = @type_mapping.nil? ? lazy_type_mapping : @type_mapping
38
- args = fields.map do |it|
39
- field = it.to_s.gsub('_', '')
40
- Creatable.extract_field_from_hash(field, hash, mapping)
41
- end
42
-
43
- new(*args)
44
- end
45
-
46
- def self.hash_to_arr(hash, fields, mapping = {})
47
- return nil if hash.nil?
48
-
49
- fields.map do |it|
50
- field = it.to_s.gsub('_', '')
51
- extract_field_from_hash(field, hash, mapping)
52
- end
53
- end
54
-
55
- def hash_to_arr(hash, fields)
56
- Creatable.hash_to_arr(hash, fields, @type_mapping.nil? ? {} : @type_mapping)
57
- end
58
-
59
- def self.extract_field_from_hash(field, hash, mapping)
60
- map = mapping[field]
61
- return nil if hash[field].nil? && map.nil?
62
-
63
- return hash[field] if map.nil?
64
-
65
- return map.type.create_list(hash[field]) if map.is_list
66
-
67
- map.type.create(hash[field])
68
- end
69
-
70
- def attr_accessor(*args)
71
- attr_reader(*args)
72
- attr_writer(*args)
73
- end
74
-
75
- def attr_reader(*args)
76
- @kodi_fields = args.map { |it| it.to_s.gsub('_', '') }
77
-
78
- args.each do |it|
79
- inst_variable_name = "@#{it}".to_sym
80
- define_method it do
81
- instance_variable_get(inst_variable_name)
82
- end
83
- end
84
- end
85
-
86
- def attr_writer(*args)
87
- args.each do |it|
88
- inst_variable_name = "@#{it}".to_sym
89
- define_method "#{it}=" do |new_value|
90
- instance_variable_set(inst_variable_name, new_value)
91
- end
92
- end
93
- end
94
-
95
- # mapping class with the type and if it is a list field or not
96
- class CreateMap
97
-
98
- attr_reader :type, :is_list
99
-
100
- def initialize(type, is_list = false)
101
- @type = type
102
- @is_list = is_list
103
- end
104
- end
105
- end
106
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module KodiClient
4
-
5
- # offers iterable methods
6
- module Iterable
7
- def all_properties
8
- constants.map { |it| const_get(it) }.sort!
9
- end
10
- end
11
- end