kodi_client 0.6.3 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
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