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.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/kodi_client.gemspec +1 -1
- data/lib/kodi_client/extensions/chainable.rb +71 -0
- data/lib/kodi_client/extensions/comparable.rb +29 -0
- data/lib/kodi_client/extensions/creatable.rb +137 -0
- data/lib/kodi_client/extensions/iterable.rb +14 -0
- data/lib/kodi_client/kodi_error.rb +14 -0
- data/lib/kodi_client/kodi_method.rb +34 -0
- data/lib/kodi_client/{options.rb → kodi_options.rb} +1 -1
- data/lib/kodi_client/kodi_request.rb +16 -0
- data/lib/kodi_client/kodi_response.rb +21 -0
- data/lib/kodi_client/{method → methods}/addons.rb +4 -4
- data/lib/kodi_client/{method → methods}/application.rb +2 -2
- data/lib/kodi_client/{method → methods}/audio_library.rb +2 -2
- data/lib/kodi_client/{method → methods}/favourites.rb +2 -2
- data/lib/kodi_client/{method → methods}/files.rb +2 -2
- data/lib/kodi_client/{method → methods}/gui.rb +2 -2
- data/lib/kodi_client/{method → methods}/input.rb +2 -2
- data/lib/kodi_client/{method → methods}/player.rb +2 -2
- data/lib/kodi_client/{method → methods}/profiles.rb +2 -2
- data/lib/kodi_client/{method → methods}/system.rb +2 -2
- data/lib/kodi_client/types/addons/addon_content_type.rb +18 -0
- data/lib/kodi_client/types/addons/addon_dependency_type.rb +21 -0
- data/lib/kodi_client/types/addons/addon_details_type.rb +44 -0
- data/lib/kodi_client/types/addons/addon_extra_info_type.rb +20 -0
- data/lib/kodi_client/types/addons/addon_fields_type.rb +28 -0
- data/lib/kodi_client/types/addons/addon_types_type.rb +48 -0
- data/lib/kodi_client/types/addons/get_addon_returned_type.rb +21 -0
- data/lib/kodi_client/types/addons/get_addons_returned_type.rb +22 -0
- data/lib/kodi_client/types/application/property_name_type.rb +19 -0
- data/lib/kodi_client/types/application/property_value_type.rb +24 -0
- data/lib/kodi_client/types/application/version_type.rb +22 -0
- data/lib/kodi_client/types/audio/audio_album_release_type_type.rb +15 -0
- data/lib/kodi_client/types/audio/audio_contributor_type.rb +22 -0
- data/lib/kodi_client/types/audio/audio_details_base_type.rb +31 -0
- data/lib/kodi_client/types/audio/audio_details_media_type.rb +45 -0
- data/lib/kodi_client/types/audio/audio_fields_album_type.rb +51 -0
- data/lib/kodi_client/types/audio/details_album_type.rb +58 -0
- data/lib/kodi_client/types/audio/genre_type.rb +20 -0
- data/lib/kodi_client/types/audio/get_albums_returned_type.rb +22 -0
- data/lib/kodi_client/types/favourites/details_favourite_type.rb +24 -0
- data/lib/kodi_client/types/favourites/fields_favourite_type.rb +17 -0
- data/lib/kodi_client/types/favourites/get_favourite_returned_type.rb +22 -0
- data/lib/kodi_client/types/favourites/type_type.rb +18 -0
- data/lib/kodi_client/types/files/file_label_type.rb +20 -0
- data/lib/kodi_client/types/files/get_directory_returned_type.rb +22 -0
- data/lib/kodi_client/types/files/get_sources_returned_type.rb +22 -0
- data/lib/kodi_client/types/files/media_type.rb +18 -0
- data/lib/kodi_client/types/files/prepare_download_returned_type.rb +21 -0
- data/lib/kodi_client/types/global/direction_type.rb +17 -0
- data/lib/kodi_client/types/global/global_time_type.rb +22 -0
- data/lib/kodi_client/types/global/id_label_type.rb +20 -0
- data/lib/kodi_client/types/global/id_name_type.rb +20 -0
- data/lib/kodi_client/types/global/increment_decrement_type.rb +15 -0
- data/lib/kodi_client/types/global/next_prev_type.rb +17 -0
- data/lib/kodi_client/types/global/password_encryption_type.rb +16 -0
- data/lib/kodi_client/types/global/rotate_type.rb +15 -0
- data/lib/kodi_client/types/global/toggle_type.rb +16 -0
- data/lib/kodi_client/types/gui/gui_window_type.rb +124 -0
- data/lib/kodi_client/types/gui/property_name_type.rb +18 -0
- data/lib/kodi_client/types/gui/property_value_type.rb +26 -0
- data/lib/kodi_client/types/gui/stereoscopy_mode_type.rb +31 -0
- data/lib/kodi_client/types/input/input_action_type.rb +212 -0
- data/lib/kodi_client/types/{item_types.rb → items/item_details_base_type.rb} +1 -3
- data/lib/kodi_client/types/list/list_field_files_type.rb +83 -0
- data/lib/kodi_client/types/list/list_fields_all_type.rb +96 -0
- data/lib/kodi_client/types/list/list_item_all_type.rb +73 -0
- data/lib/kodi_client/types/list/list_item_base_type.rb +138 -0
- data/lib/kodi_client/types/list/list_item_file_type.rb +68 -0
- data/lib/kodi_client/types/list/list_limits_returned_type.rb +23 -0
- data/lib/kodi_client/types/list/list_limits_type.rb +19 -0
- data/lib/kodi_client/types/list/list_sort_method_type.rb +54 -0
- data/lib/kodi_client/types/list/list_sort_type.rb +22 -0
- data/lib/kodi_client/types/list/sort_order_type.rb +15 -0
- data/lib/kodi_client/types/media/media_artwork_type.rb +22 -0
- data/lib/kodi_client/types/media/media_details_base_type.rb +28 -0
- data/lib/kodi_client/types/media/media_type_type.rb +16 -0
- data/lib/kodi_client/types/player/audio_stream_type.rb +29 -0
- data/lib/kodi_client/types/player/player_position_time_type.rb +22 -0
- data/lib/kodi_client/types/player/player_repeat_type.rb +17 -0
- data/lib/kodi_client/types/player/player_speed_type.rb +26 -0
- data/lib/kodi_client/types/player/player_type.rb +24 -0
- data/lib/kodi_client/types/player/player_type_type.rb +16 -0
- data/lib/kodi_client/types/player/player_view_mode_type.rb +23 -0
- data/lib/kodi_client/types/player/player_visibility_type.rb +16 -0
- data/lib/kodi_client/types/player/property_name_type.rb +38 -0
- data/lib/kodi_client/types/player/property_value_type.rb +60 -0
- data/lib/kodi_client/types/player/seek_jump_type.rb +17 -0
- data/lib/kodi_client/types/player/seek_returned_type.rb +23 -0
- data/lib/kodi_client/types/player/subtitle_type.rb +24 -0
- data/lib/kodi_client/types/player/video_stream_type.rb +26 -0
- data/lib/kodi_client/types/player/view_mode_type.rb +22 -0
- data/lib/kodi_client/types/player/zoom_type.rb +15 -0
- data/lib/kodi_client/types/profiles/details_profile_type.rb +24 -0
- data/lib/kodi_client/types/profiles/fields_profile_type.rb +15 -0
- data/lib/kodi_client/types/profiles/get_profiles_returned_type.rb +22 -0
- data/lib/kodi_client/types/profiles/profile_password_type.rb +20 -0
- data/lib/kodi_client/types/{pvr_type.rb → pvr/channel_type_type.rb} +2 -4
- data/lib/kodi_client/types/system/property_name_type.rb +17 -0
- data/lib/kodi_client/types/{system_types.rb → system/property_value_type.rb} +2 -13
- data/lib/kodi_client/types/video/stream_details_type.rb +24 -0
- data/lib/kodi_client/types/video/video_cast_type.rb +22 -0
- data/lib/kodi_client/types/video/video_details_base_type.rb +29 -0
- data/lib/kodi_client/types/video/video_details_file_type.rb +37 -0
- data/lib/kodi_client/types/video/video_details_item_type.rb +32 -0
- data/lib/kodi_client/types/video/video_details_media_type.rb +28 -0
- data/lib/kodi_client/types/video/video_resume_type.rb +20 -0
- data/lib/kodi_client.rb +137 -49
- metadata +107 -34
- data/lib/kodi_client/Chainable.rb +0 -48
- data/lib/kodi_client/kodi_module.rb +0 -80
- data/lib/kodi_client/types/addon_types.rb +0 -177
- data/lib/kodi_client/types/application_types.rb +0 -52
- data/lib/kodi_client/types/audio_types.rb +0 -221
- data/lib/kodi_client/types/favourites_types.rb +0 -61
- data/lib/kodi_client/types/files_types.rb +0 -63
- data/lib/kodi_client/types/global_types.rb +0 -102
- data/lib/kodi_client/types/gui_types.rb +0 -179
- data/lib/kodi_client/types/input_types.rb +0 -214
- data/lib/kodi_client/types/list_types.rb +0 -542
- data/lib/kodi_client/types/media_types.rb +0 -53
- data/lib/kodi_client/types/player_type.rb +0 -294
- data/lib/kodi_client/types/profiles_types.rb +0 -65
- data/lib/kodi_client/types/video_types.rb +0 -150
- data/lib/kodi_client/util/comparable.rb +0 -20
- data/lib/kodi_client/util/creatable.rb +0 -106
- 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
|