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
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # player speed enum, -32 to 32
7
+ module PlayerSpeed
8
+ extend Extensions::Iterable
9
+
10
+ MINUS_32 = -32
11
+ MINUS_16 = -16
12
+ MINUS_8 = -8
13
+ MINUS_4 = -4
14
+ MINUS_2 = -2
15
+ MINUS_1 = -1
16
+ NEUTRAL = 0
17
+ PLUS_1 = 1
18
+ PLUS_2 = 2
19
+ PLUS_4 = 4
20
+ PLUS_8 = 8
21
+ PLUS_16 = 16
22
+ PLUS_32 = 32
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # player item
7
+ class Player
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :player_id, :player_type, :type, :name, :plays_audio, :plays_video
12
+
13
+ def initialize(player_id, player_type, type, name, plays_audio, plays_video)
14
+ @player_id = player_id
15
+ @player_type = player_type
16
+ @type = type
17
+ @name = name
18
+ @plays_audio = plays_audio
19
+ @plays_video = plays_video
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # Player.Type https://kodi.wiki/view/JSON-RPC_API/v12#Player.Type
7
+ module PlayerType
8
+ extend Extensions::Iterable
9
+
10
+ VIDEO = 'video'
11
+ AUDIO = 'audio'
12
+ PICTURE = 'picture'
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # return value for Player.GetViewMode
7
+ class PlayerViewMode
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :nonlinear_stretch, :pixel_ratio, :vertical_shift, :view_mode, :zoom
12
+
13
+ def initialize(nonlinear_stretch, pixel_ratio, vertical_shift, view_mode, zoom)
14
+ @nonlinear_stretch = nonlinear_stretch
15
+ @pixel_ratio = pixel_ratio
16
+ @vertical_shift = vertical_shift
17
+ @view_mode = view_mode
18
+ @zoom = zoom
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # player types
7
+ module PlayerVisibility
8
+ extend Extensions::Iterable
9
+
10
+ INTERNAL = 'internal'
11
+ EXTERNAL = 'external'
12
+ REMOTE = 'remote'
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # Player.Property.Name https://kodi.wiki/view/JSON-RPC_API/v12#Player.Property.Name
7
+ module PropertyName
8
+ extend Extensions::Iterable
9
+
10
+ AUDIO_STREAMS = 'audiostreams'
11
+ CAN_CHANGE_SPEED = 'canchangespeed'
12
+ CAN_MOVE = 'canmove'
13
+ CAN_REPEAT = 'canrepeat'
14
+ CAN_ROTATE = 'canrotate'
15
+ CAN_SEEK = 'canseek'
16
+ CAN_SHUFFLE = 'canshuffle'
17
+ CAN_ZOOM = 'canzoom'
18
+ CURRENT_AUDIO_STREAM = 'currentaudiostream'
19
+ CURRENT_SUBTITLE = 'currentsubtitle'
20
+ CURRENT_VIDEO_STREAM = 'currentvideostream'
21
+ LIVE = 'live'
22
+ PARTY_MODE = 'partymode'
23
+ PERCENTAGE = 'percentage'
24
+ PLAYLIST_ID = 'playlistid'
25
+ POSITION = 'position'
26
+ REPEAT = 'repeat'
27
+ SHUFFLED = 'shuffled'
28
+ SPEED = 'speed'
29
+ SUBTITLE_ENABLED = 'subtitleenabled'
30
+ SUBTITLES = 'subtitles'
31
+ TIME = 'time'
32
+ TOTAL_TIME = 'totaltime'
33
+ TYPE = 'type'
34
+ VIDEO_STREAMS = 'videostreams'
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # Player.Property.Value https://kodi.wiki/view/JSON-RPC_API/v12#Player.Property.Name
7
+ class PropertyValue
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :audio_streams, :cache_percentage, :can_change_speed, :can_move, :can_repeat, :can_rotate,
12
+ :can_seek, :can_shuffle, :can_zoom, :current_audio_stream, :current_subtitle, :current_video_stream,
13
+ :live, :party_mode, :percentage, :playlist_id, :position, :repeat, :shuffled, :speed,
14
+ :subtitle_enabled, :subtitles, :time, :total_time, :type, :video_streams
15
+
16
+ type_mapping ['audiostreams', AudioStream, true], ['currentaudiostream', AudioStream],
17
+ ['currentsubtitle', Subtitle], ['currentvideostream', VideoStream],
18
+ ['subtitles', Subtitle, true], ['time', Global::GlobalTime],
19
+ ['totaltime', Global::GlobalTime], ['videostreams', VideoStream, true]
20
+
21
+ def initialize(audio_streams, cache_percentage, can_change_speed, can_move, can_repeat, can_rotate, can_seek,
22
+ can_shuffle, can_zoom, current_audio_stream, current_subtitle, current_video_stream, live,
23
+ party_mode, percentage, playlist_id, position, repeat, shuffled, speed,
24
+ subtitle_enabled, subtitles, time, total_time, type, video_streams)
25
+ type = type.nil? ? PlayerType::VIDEO : type
26
+ playlist_id = playlist_id.nil? ? -1 : playlist_id
27
+ position = position.nil? ? -1 : position
28
+ repeat = repeat.nil? ? PlayerRepeat::OFF : repeat
29
+
30
+ @audio_streams = audio_streams
31
+ @cache_percentage = cache_percentage
32
+ @can_change_speed = can_change_speed
33
+ @can_move = can_move
34
+ @can_repeat = can_repeat
35
+ @can_rotate = can_rotate
36
+ @can_seek = can_seek
37
+ @can_shuffle = can_shuffle
38
+ @can_zoom = can_zoom
39
+ @current_audio_stream = current_audio_stream
40
+ @current_subtitle = current_subtitle
41
+ @current_video_stream = current_video_stream
42
+ @live = live
43
+ @party_mode = party_mode
44
+ @percentage = percentage
45
+ @playlist_id = playlist_id
46
+ @position = position
47
+ @repeat = repeat
48
+ @shuffled = shuffled
49
+ @speed = speed
50
+ @subtitle_enabled = subtitle_enabled
51
+ @subtitles = subtitles
52
+ @time = time
53
+ @total_time = total_time
54
+ @type = type
55
+ @video_streams = video_streams
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # defines the jump size for seek
7
+ module SeekJump
8
+ include Extensions::Iterable
9
+
10
+ SMALL_FORWARD = 'smallforward'
11
+ SMALL_BACKWARD = 'smallbackward'
12
+ BIG_FORWARD = 'bigforward'
13
+ BIG_BACKWARD = 'bigbackward'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # return value of Player.Seek
7
+ class SeekReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :percentage, :time, :total_time
12
+
13
+ type_mapping ['time', Global::GlobalTime], ['totaltime', Global::GlobalTime]
14
+
15
+ def initialize(percentage, time, total_time)
16
+ @percentage = percentage
17
+ @time = time
18
+ @total_time = total_time
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # Player Subtitle https://kodi.wiki/view/JSON-RPC_API/v12#Player.Subtitle
7
+ class Subtitle
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :index, :is_default, :is_forced, :is_impaired, :language, :name
12
+
13
+ def initialize(index, is_default, is_forced, is_impaired, language, name)
14
+ @index = index
15
+ @is_default = is_default
16
+ @is_forced = is_forced
17
+ @is_impaired = is_impaired
18
+ @language = language
19
+ @name = name
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # Player.Video.Stream https://kodi.wiki/view/JSON-RPC_API/v12#Player.Video.Stream
7
+ class VideoStream
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :codec, :height, :index, :language, :name, :width, :duration, :aspect
12
+
13
+ def initialize(codec, height, index, language, name, width, duration, aspect)
14
+ @codec = codec
15
+ @height = height
16
+ @index = index
17
+ @language = language
18
+ @name = name
19
+ @width = width
20
+ @duration = duration
21
+ @aspect = aspect
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # Player.ViewMode https://kodi.wiki/view/JSON-RPC_API/v12#Player.ViewMode
7
+ module ViewMode
8
+ extend Extensions::Iterable
9
+
10
+ NORMAL = 'normal'
11
+ ZOOM = 'zoom'
12
+ STRETCH_4X3 = 'strech4x3'
13
+ WIDE_ZOOM = 'widezoom'
14
+ STRETCH_16X9 = 'stretch16x9'
15
+ ORIGINAL = 'original'
16
+ STRETCH_16X9_NONLIN = 'stretch16x9nonline'
17
+ ZOOM_120_WIDTH = 'zoom120width'
18
+ ZOOM_110_WIDTH = 'zoom110width'
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Player
6
+ # enum for in/out zoom
7
+ module Zoom
8
+ extend Extensions::Iterable
9
+
10
+ IN = 'in'
11
+ OUT = 'out'
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Profiles
6
+ # Profiles.Details.Profile https://kodi.wiki/view/JSON-RPC_API/v12#Profiles.Details.Profile
7
+ class DetailsProfile
8
+ include Extensions::Comparable
9
+ include Items::ItemDetailsBase
10
+ extend Extensions::Creatable
11
+
12
+ attr_reader :lock_mode, :thumbnail
13
+
14
+ fields_to_map %w[lock_mode thumbnail label]
15
+
16
+ def initialize(lock_mode, thumbnail, label)
17
+ @lock_mode = lock_mode
18
+ @thumbnail = thumbnail
19
+ item_details_base(label)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Profiles
6
+ # Profiles.Fields.Profile https://kodi.wiki/view/JSON-RPC_API/v12#Profiles.Fields.Profile
7
+ module FieldsProfile
8
+ extend Extensions::Iterable
9
+
10
+ LOCK_MODE = 'lockmode'
11
+ THUMBNAIL = 'thumbnail'
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Profiles
6
+ # return type for Profiles.GetProfiles
7
+ class GetProfilesReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :limits, :profiles
12
+
13
+ type_mapping ['limits', List::ListLimitsReturned], ['profiles', DetailsProfile, true]
14
+
15
+ def initialize(limits, profiles)
16
+ @limits = limits
17
+ @profiles = profiles
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Profiles
6
+ # Profiles.Password https://kodi.wiki/view/JSON-RPC_API/v12#Profiles.Password
7
+ class ProfilePassword
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :value, :encryption
12
+
13
+ def initialize(value, encryption = Types::Global::PasswordEncryption::MD5)
14
+ @value = value
15
+ @encryption = encryption
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,15 +3,13 @@
3
3
  module KodiClient
4
4
  module Types
5
5
  module PVR
6
-
7
6
  # PVR.Channel.Type https://kodi.wiki/view/JSON-RPC_API/v12#PVR.Channel.Type
8
7
  module ChannelType
9
- extend Iterable
10
-
8
+ extend Extensions::Iterable
9
+
11
10
  TV = 'TV'
12
11
  RADIO = 'Radio'
13
12
  end
14
13
  end
15
14
  end
16
15
  end
17
-
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module System
6
+ # System.Property.Name https://kodi.wiki/view/JSON-RPC_API/v12#System.Property.Name
7
+ module PropertyName
8
+ extend Extensions::Iterable
9
+
10
+ CAN_SHUTDOWN = 'canshutdown'
11
+ CAN_SUSPEND = 'cansuspend'
12
+ CAN_HIBERNATE = 'canhibernate'
13
+ CAN_REBOOT = 'canreboot'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -3,21 +3,10 @@
3
3
  module KodiClient
4
4
  module Types
5
5
  module System
6
-
7
- # System.Property.Name https://kodi.wiki/view/JSON-RPC_API/v12#System.Property.Name
8
- module PropertyName
9
- extend Iterable
10
-
11
- CAN_SHUTDOWN = 'canshutdown'
12
- CAN_SUSPEND = 'cansuspend'
13
- CAN_HIBERNATE = 'canhibernate'
14
- CAN_REBOOT = 'canreboot'
15
- end
16
-
17
6
  # System.Property.Value https://kodi.wiki/view/JSON-RPC_API/v12#System.Property.Value
18
7
  class PropertyValue
19
- include Comparable
20
- extend Creatable
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
21
10
 
22
11
  attr_reader :can_hibernate, :can_reboot, :can_shutdown, :can_suspend
23
12
 
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Video
6
+ # Video.Streams https://kodi.wiki/view/JSON-RPC_API/v12#Video.Streams
7
+ class StreamDetails
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :audio, :subtitle, :video
12
+
13
+ type_mapping ['audio', Player::AudioStream, true], ['subtitle', Player::Subtitle, true],
14
+ ['video', Player::VideoStream, true]
15
+
16
+ def initialize(audio, subtitle, video)
17
+ @audio = audio
18
+ @subtitle = subtitle
19
+ @video = video
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Video
6
+ # Video.Cast https://kodi.wiki/view/JSON-RPC_API/v12#Video.Cast
7
+ class VideoCast
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :name, :order, :role, :thumbnail
12
+
13
+ def initialize(name, order, role, thumbnail)
14
+ @name = name
15
+ @order = order
16
+ @role = role
17
+ @thumbnail = thumbnail
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,29 @@
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(*Extensions::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
+ end
28
+ end
29
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Video
6
+ # Video.Details.File https://kodi.wiki/view/JSON-RPC_API/v12#Video.Details.File
7
+ module VideoDetailsFile
8
+ include VideoDetailsItem
9
+
10
+ attr_reader :director, :resume, :runtime, :stream_details
11
+
12
+ def video_details_file_mappings
13
+ mappings = {
14
+ 'resume' => Extensions::Creatable::CreateMap.new(VideoResume),
15
+ 'streamdetails' => Extensions::Creatable::CreateMap.new(StreamDetails)
16
+ }
17
+ mappings.merge(video_details_item_mappings)
18
+ end
19
+
20
+ def video_details_file_by_hash(hash)
21
+ video_details_file(*Extensions::Creatable.hash_to_arr(hash, %w[director resume runtime stream_details date_added
22
+ file last_played plot title art play_count fan_art
23
+ thumbnail label], video_details_file_mappings))
24
+ end
25
+
26
+ def video_details_file(director, resume, runtime, stream_details, date_added, file, last_played, plot, title,
27
+ art, play_count, fan_art, thumbnail, label)
28
+ @director = director
29
+ @resume = resume
30
+ @runtime = runtime
31
+ @stream_details = stream_details
32
+ video_details_item(date_added, file, last_played, plot, title, art, play_count, fan_art, thumbnail, label)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Video
6
+ # Video.Details.Item https://kodi.wiki/view/JSON-RPC_API/v12#Video.Details.Item
7
+ module VideoDetailsItem
8
+ include VideoDetailsMedia
9
+
10
+ attr_reader :date_added, :file, :last_played, :plot
11
+
12
+ def video_details_item_mappings
13
+ video_details_media_mappings
14
+ end
15
+
16
+ def video_details_item_by_hash(hash)
17
+ video_details_item(*Extensions::Creatable.hash_to_arr(hash, %w[date_added file last_played plot title art
18
+ play_count fan_art thumbnail label],
19
+ video_details_item_mappings))
20
+ end
21
+
22
+ def video_details_item(date_added, file, last_played, plot, title, art, play_count, fan_art, thumbnail, label)
23
+ @date_added = date_added
24
+ @file = file
25
+ @last_played = last_played
26
+ @plot = plot
27
+ video_details_media(title, art, play_count, fan_art, thumbnail, label)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Video
6
+ # Video.Details.Media https://kodi.wiki/view/JSON-RPC_API/v12#Video.Details.Media
7
+ module VideoDetailsMedia
8
+ include VideoDetailsBase
9
+
10
+ attr_reader :title
11
+
12
+ def video_details_media_mappings
13
+ video_details_base_mappings
14
+ end
15
+
16
+ def video_details_media_by_hash(hash)
17
+ video_details_media(*Extensions::Creatable.hash_to_arr(hash, %w[title art play_count fan_art thumbnail label]),
18
+ video_details_base_mappings)
19
+ end
20
+
21
+ def video_details_media(title, art, play_count, fan_art, thumbnail, label)
22
+ @title = title
23
+ video_details_base(art, play_count, fan_art, thumbnail, label)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end