kodi_client 0.6.0 → 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 +9 -24
  14. data/lib/kodi_client/{method → methods}/application.rb +2 -5
  15. data/lib/kodi_client/methods/audio_library.rb +46 -0
  16. data/lib/kodi_client/{method → methods}/favourites.rb +2 -5
  17. data/lib/kodi_client/{method → methods}/files.rb +2 -6
  18. data/lib/kodi_client/{method → methods}/gui.rb +2 -5
  19. data/lib/kodi_client/{method → methods}/input.rb +2 -6
  20. data/lib/kodi_client/{method → methods}/player.rb +2 -7
  21. data/lib/kodi_client/{method → methods}/profiles.rb +2 -5
  22. data/lib/kodi_client/{method → methods}/system.rb +2 -6
  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/{global_types/item_types.rb → types/items/item_details_base_type.rb} +5 -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/{global_types/pvr_type.rb → types/pvr/channel_type_type.rb} +2 -6
  100. data/lib/kodi_client/types/system/property_name_type.rb +17 -0
  101. data/lib/kodi_client/{global_types/system_types.rb → types/system/property_value_type.rb} +2 -16
  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 -23
  110. metadata +107 -33
  111. data/lib/kodi_client/Chainable.rb +0 -49
  112. data/lib/kodi_client/global_types/addon_types.rb +0 -194
  113. data/lib/kodi_client/global_types/application_types.rb +0 -61
  114. data/lib/kodi_client/global_types/audio_types.rb +0 -88
  115. data/lib/kodi_client/global_types/favourites_types.rb +0 -70
  116. data/lib/kodi_client/global_types/files_types.rb +0 -82
  117. data/lib/kodi_client/global_types/global_types.rb +0 -106
  118. data/lib/kodi_client/global_types/gui_types.rb +0 -191
  119. data/lib/kodi_client/global_types/input_types.rb +0 -216
  120. data/lib/kodi_client/global_types/list_types.rb +0 -569
  121. data/lib/kodi_client/global_types/media_types.rb +0 -55
  122. data/lib/kodi_client/global_types/player_type.rb +0 -319
  123. data/lib/kodi_client/global_types/profiles_types.rb +0 -80
  124. data/lib/kodi_client/global_types/video_types.rb +0 -145
  125. data/lib/kodi_client/kodi_module.rb +0 -87
  126. data/lib/kodi_client/util/comparable.rb +0 -20
  127. data/lib/kodi_client/util/creatable.rb +0 -52
  128. data/lib/kodi_client/util/iterable.rb +0 -11
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Addons
6
+ # represents addon details
7
+ class AddonDetails
8
+ include Extensions::Comparable
9
+ include Items::ItemDetailsBase
10
+ extend Extensions::Creatable
11
+
12
+ attr_reader :addon_id, :author, :broken, :dependencies, :description, :disclaimer, :enabled, :extra_info,
13
+ :fan_art, :installed, :name, :path, :rating, :summary, :thumbnail, :type, :version
14
+
15
+ fields_to_map %w[addon_id author broken dependencies description disclaimer enabled extra_info fan_art
16
+ installed name path rating summary thumbnail type version label]
17
+
18
+ type_mapping ['dependencies', AddonDependency, true], ['extrainfo', AddonExtraInfo, true]
19
+
20
+ def initialize(addon_id, author, broken, dependencies, description, disclaimer, enabled, extra_info,
21
+ fan_art, installed, name, path, rating, summary, thumbnail, type, version, label)
22
+ @addon_id = addon_id
23
+ @author = author
24
+ @broken = broken
25
+ @dependencies = dependencies
26
+ @description = description
27
+ @disclaimer = disclaimer
28
+ @enabled = enabled
29
+ @extra_info = extra_info
30
+ @fan_art = fan_art
31
+ @installed = installed
32
+ @name = name
33
+ @path = path
34
+ @rating = rating
35
+ @summary = summary
36
+ @thumbnail = thumbnail
37
+ @type = type
38
+ @version = version
39
+ item_details_base(label)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Addons
6
+ # Addon.Details.extrainfo https://kodi.wiki/view/JSON-RPC_API/v12#Addon.Details
7
+ class AddonExtraInfo
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :key, :value
12
+
13
+ def initialize(key, value)
14
+ @key = key
15
+ @value = value
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Addons
6
+ # Addon.Fields https://kodi.wiki/view/JSON-RPC_API/v12#Addon.Content
7
+ module AddonFields
8
+ extend Extensions::Iterable
9
+
10
+ AUTHOR = 'author'
11
+ BROKEN = 'broken'
12
+ DEPENDENCIES = 'dependencies'
13
+ DESCRIPTION = 'description'
14
+ DISCLAIMER = 'disclaimer'
15
+ ENABLED = 'enabled'
16
+ EXTRAINFO = 'extrainfo'
17
+ FANART = 'fanart'
18
+ INSTALLED = 'installed'
19
+ NAME = 'name'
20
+ PATH = 'path'
21
+ RATING = 'rating'
22
+ SUMMARY = 'summary'
23
+ THUMBNAIL = 'thumbnail'
24
+ VERSION = 'version'
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Addons
6
+ # Addon Types https://kodi.wiki/view/JSON-RPC_API/v12#Addon.Types
7
+ module AddonTypes
8
+ extend Extensions::Iterable
9
+
10
+ UNKNOWN = 'unknown'
11
+ KODI_ADSP = 'kodi.adsp'
12
+ KODI_AUDIO_DECODER = 'kodi.audiodecoder'
13
+ KODI_CONTEXT_ITEM = 'kodi.context.item'
14
+ KODI_GAME_CONTROLLER = 'kodi.game.controller'
15
+ KODI_INPUT_STREAM = 'kodi.inputstream'
16
+ KODI_PERIPHERAL = 'kodi.peripheral'
17
+ KODI_RESOURCE_IMAGES = 'kodi.resource.images'
18
+ KODI_RESOURCE_LANGUAGE = 'kodi.resource.language'
19
+ KODI_RESOURCE_UI_SOUNDS = 'kodi.resource.uisounds'
20
+ XBMC_ADDON_AUDIO = 'xbmc.addon.audio'
21
+ XBMC_ADDON_EXECUTABLE = 'xbmc.addon.executable'
22
+ XBMC_ADDON_IMAGE = 'xbmc.addon.image'
23
+ XBMC_ADDON_REPOSITORY = 'xbmc.addon.repository'
24
+ XBMC_ADDON_VIDEO = 'xbmc.addon.video'
25
+ XBMC_AUDIO_ENCODER = 'xbmc.audioencoder'
26
+ XBMC_GUI_SKIN = 'xbmc.gui.skin'
27
+ XBMC_METADATA_SCRAPER_ALBUMS = 'xbmc.metadata.scraper.albums'
28
+ XBMC_METADATA_SCRAPER_ARTISTS = 'xbmc.metadata.scraper.artists'
29
+ XBMC_METADATA_SCRAPER_LIBRARY = 'xbmc.metadata.scraper.library'
30
+ XBMC_METADATA_SCRAPER_MOVIES = 'xbmc.metadata.scraper.movies'
31
+ XBMC_METADATA_SCRAPER_MUSIC_VIDEOS = 'xbmc.metadata.scraper.musicvideos'
32
+ XBMC_METADATA_SCRAPER_TV_SHOWS = 'xbmc.metadata.scraper.episodes'
33
+ XBMC_PLAYER_MUSIC_VIZ = 'xbmc.player.musicviz'
34
+ XBMC_PVR_CLIENT = 'xbmc.pvrclient'
35
+ XBMC_PYTHON_LIBRARY = 'xbmc.python.library'
36
+ XBMC_PYTHON_LYRICS = 'xbmc.python.lyrics'
37
+ XBMC_PYTHON_MODULE = 'xbmc.python.module'
38
+ XBMC_PYTHON_PLUGIN_SOURCE = 'xbmc.python.pluginsource'
39
+ XBMC_PYTHON_SCRIPT = 'xbmc.python.script'
40
+ XBMC_PYTHON_WEATHER = 'xbmc.python.weather'
41
+ XBMC_SERVICE = 'xbmc.service'
42
+ XBMC_SUBTITLE_MODULE = 'xbmc.subtitle.module'
43
+ XBMC_UI_SCREENSAVER = 'xbmc.ui.screensaver'
44
+ XBMC_WEBINTERFACE = 'xbmc.webinterface'
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Addons
6
+ # getAddon return
7
+ class GetAddonReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :addon
12
+
13
+ type_mapping ['addon', AddonDetails]
14
+
15
+ def initialize(addon)
16
+ @addon = addon
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Addons
6
+ # getAddons return
7
+ class GetAddonsReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :addons, :limits
12
+
13
+ type_mapping ['addons', AddonDetails, true], ['limits', List::ListLimitsReturned]
14
+
15
+ def initialize(addons, limits)
16
+ @addons = addons
17
+ @limits = limits
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Application
6
+ # Application.Property.Name https://kodi.wiki/view/JSON-RPC_API/v12#Application.Property.Name
7
+ module PropertyName
8
+ extend Extensions::Iterable
9
+
10
+ VOLUME = 'volume'
11
+ MUTED = 'muted'
12
+ NAME = 'name'
13
+ VERSION = 'version'
14
+ SORT_TOKENS = 'sorttokens'
15
+ LANGUAGE = 'language'
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Application
6
+ # Application.Property.Value https://kodi.wiki/view/JSON-RPC_API/v12#Application.Property.Value
7
+ class PropertyValue
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :name, :version, :muted, :volume
12
+
13
+ type_mapping ['version', Version]
14
+
15
+ def initialize(name, version, muted, volume)
16
+ @name = name
17
+ @version = version
18
+ @muted = muted
19
+ @volume = volume
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 Application
6
+ # represent application properties version
7
+ class Version
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :major, :minor, :revision, :tag
12
+
13
+ def initialize(major, minor, revision, tag)
14
+ @major = major
15
+ @minor = minor
16
+ @revision = revision
17
+ @tag = tag
18
+ end
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 Audio
6
+ # Audio.Album.ReleaseType https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Album.ReleaseType
7
+ module AudioAlbumReleaseType
8
+ extend Extensions::Iterable
9
+
10
+ ALBUM = 'album'
11
+ SINGLE = 'single'
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 Audio
6
+ # Audio.Contributor https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Contributors
7
+ class AudioContributor
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :artist_id, :name, :role, :role_id
12
+
13
+ def initialize(artist_id, name, role, role_id)
14
+ @artist_id = artist_id
15
+ @name = name
16
+ @role = role
17
+ @role_id = role_id
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Details.Base https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Base
7
+ module AudioDetailsBase
8
+ include Media::MediaDetailsBase
9
+
10
+ attr_reader :art, :date_added, :genre
11
+
12
+ def audio_details_base_mappings
13
+ mappings = { 'art' => Extensions::Creatable::CreateMap.new(Types::Media::MediaArtwork) }
14
+ mappings.merge(media_details_base_mappings)
15
+ end
16
+
17
+ def audio_details_base_by_hash(hash)
18
+ audio_details_base(*Extensions::Creatable.hash_to_arr(hash, %w[art date_added genre fan_art thumbnail label]),
19
+ audio_details_base_mappings)
20
+ end
21
+
22
+ def audio_details_base(art, date_added, genre, fan_art, thumbnail, label)
23
+ @art = art
24
+ @date_added = date_added
25
+ @genre = genre
26
+ media_details_base(fan_art, thumbnail, label)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Details.Media https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Media
7
+ module AudioDetailsMedia
8
+ include AudioDetailsBase
9
+
10
+ attr_reader :artist, :artist_id, :display_artist, :musicbrainz_album_artist_id, :original_date, :rating,
11
+ :release_date, :sort_artist, :title, :user_rating, :votes, :year
12
+
13
+ def audio_details_media_mappings
14
+ audio_details_base_mappings
15
+ end
16
+
17
+ def audio_details_media_by_hash(hash)
18
+ audio_details_media(*Extensions::Creatable.hash_to_arr(hash, %w[artist artist_id display_artist
19
+ musicbrainz_album_artist_id original_date rating
20
+ release_date sort_artist title user_rating votes year art
21
+ date_added genre fan_art thumbnail label],
22
+ audio_details_base_mappings))
23
+ end
24
+
25
+ def audio_details_media(artist, artist_id, display_artist, musicbrainz_album_artist_id, original_date,
26
+ rating, release_date, sort_artist, title, user_rating, votes, year,
27
+ art, date_added, genre, fan_art, thumbnail, label)
28
+ @artist = artist
29
+ @artist_id = artist_id
30
+ @display_artist = display_artist
31
+ @musicbrainz_album_artist_id = musicbrainz_album_artist_id
32
+ @original_date = original_date
33
+ @rating = rating
34
+ @release_date = release_date
35
+ @sort_artist = sort_artist
36
+ @title = title
37
+ @user_rating = user_rating
38
+ @votes = votes
39
+ @year = year
40
+ audio_details_base(art, date_added, genre, fan_art, thumbnail, label)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Fields.Album https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Fields.Album
7
+ module AudioFieldsAlbum
8
+ extend Extensions::Iterable
9
+
10
+ #album id
11
+ ALBUM_DURATION = 'albumduration'
12
+ ALBUM_LABEL = 'albumlabel'
13
+ ALBUM_STATUS = 'albumstatus'
14
+ ART = 'art'
15
+ ARTIST = 'artist'
16
+ ARTIST_ID = 'artistid'
17
+ COMPILATION = 'compilation'
18
+ DATE_ADDED = 'dateadded'
19
+ DATE_MODIFIED = 'datemodified'
20
+ DATE_NEW = 'datenew'
21
+ DESCRIPTION = 'description'
22
+ DISPLAY_ARTIST = 'displayartist'
23
+ FAN_ART = 'fanart'
24
+ GENRE = 'genre'
25
+ IS_BOX_SET = 'isboxset'
26
+ LAST_PLAYED = 'lastplayed'
27
+ MOOD = 'mood'
28
+ MUSICBRAINZ_ALBUM_ARTIST_ID = 'musicbrainzalbumartistid'
29
+ MUSICBRAINZ_ALBUM_ID = 'musicbrainzalbumid'
30
+ MUSICBRAINZ_RELEASE_GROUP_ID = 'musicbrainzreleasegroupid'
31
+ ORIGINAL_DATE = 'originaldate'
32
+ PLAY_COUNT = 'playcount'
33
+ RATING = 'rating'
34
+ RELEASE_DATE = 'releasedate'
35
+ RELEASE_TYPE = 'releasetype'
36
+ SONG_GENRES = 'songgenres'
37
+ SORT_ARTIST = 'sortartist'
38
+ SOURCE_ID = 'sourceid'
39
+ STYLE = 'style'
40
+ THEME = 'theme'
41
+ THUMBNAIL = 'thumbnail'
42
+ TITLE = 'title'
43
+ TOTAL_DISCS = 'totaldiscs'
44
+ TYPE = 'type'
45
+ USER_RATING = 'userrating'
46
+ VOTES = 'votes'
47
+ YEAR = 'year'
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Details.Album https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Album
7
+ class DetailsAlbum
8
+ include AudioDetailsMedia
9
+ include Extensions::Comparable
10
+ extend Extensions::Creatable
11
+
12
+ attr_reader :album_duration, :album_id, :album_label, :album_status, :compilation, :date_modified, :date_new,
13
+ :description, :is_box_set, :last_played, :mood, :musicbrainz_album_id, :musicbrainz_release_group_id,
14
+ :play_count, :release_type, :song_genres, :source_id, :style, :theme, :total_discs, :type
15
+
16
+ fields_to_map %w[album_duration album_id album_label album_status art artist artist_id compilation date_added
17
+ date_modified date_new description display_artist fan_art genre is_box_set label last_played
18
+ mood musicbrainz_album_artist_id musicbrainz_album_id musicbrainz_release_group_id
19
+ original_date play_count rating release_date release_type song_genres sort_artist source_id
20
+ style theme thumbnail title total_discs type user_rating votes year]
21
+
22
+ type_mapping ['songgenres', Genre, true], ['art', Types::Media::MediaArtwork]
23
+
24
+ def initialize(album_duration, album_id, album_label, album_status, art, artist, artist_id, compilation,
25
+ date_added, date_modified, date_new, description, display_artist, fan_art, genre, is_box_set,
26
+ label, last_played, mood, musicbrainz_album_artist_id, musicbrainz_album_id,
27
+ musicbrainz_release_group_id, original_date, play_count, rating, release_date, release_type,
28
+ song_genres, sort_artist, source_id, style, theme, thumbnail, title, total_discs, type,
29
+ user_rating, votes, year)
30
+ @album_duration = album_duration
31
+ @album_id = album_id
32
+ @album_label = album_label
33
+ @album_status = album_status
34
+ @compilation = compilation
35
+ @date_modified = date_modified
36
+ @date_new = date_new
37
+ @description = description
38
+ @is_box_set = is_box_set
39
+ @last_played = last_played
40
+ @mood = mood
41
+ @musicbrainz_album_id = musicbrainz_album_id
42
+ @musicbrainz_release_group_id = musicbrainz_release_group_id
43
+ @play_count = play_count
44
+ @release_type = release_type
45
+ @song_genres = song_genres
46
+ @source_id = source_id
47
+ @style = style
48
+ @theme = theme
49
+ @total_discs = total_discs
50
+ @type = type
51
+ audio_details_media(artist, artist_id, display_artist, musicbrainz_album_artist_id, original_date,
52
+ rating, release_date, sort_artist, title, user_rating, votes, year,
53
+ art, date_added, genre, fan_art, thumbnail, label)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # Audio.Details.Genres https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Genres
7
+ class Genre
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :genre_id, :title
12
+
13
+ def initialize(genre_id, title)
14
+ @genre_id = genre_id
15
+ @title = title
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Audio
6
+ # return type for AudioLibrary.GetAlbums
7
+ class GetAlbumsReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :albums, :limits
12
+
13
+ type_mapping ['albums', DetailsAlbum, true], ['limits', List::ListLimitsReturned]
14
+
15
+ def initialize(albums, limits)
16
+ @albums = albums
17
+ @limits = limits
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Favourites
6
+ # Favourite.Details.Favourite https://kodi.wiki/view/JSON-RPC_API/v12#Favourite.Details.Favourite
7
+ class DetailsFavourite
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :path, :thumbnail, :title, :type, :window, :window_parameter
12
+
13
+ def initialize(path, thumbnail, title, type, window, window_parameter)
14
+ @path = path
15
+ @thumbnail = thumbnail
16
+ @title = title
17
+ @type = type
18
+ @window = window
19
+ @window_parameter = window_parameter
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Favourites
6
+ # Favourite.Fields.Favourite https://kodi.wiki/view/JSON-RPC_API/v12#Favourite.Fields.Favourite
7
+ module FieldsFavourite
8
+ extend Extensions::Iterable
9
+
10
+ WINDOW = 'window'
11
+ WINDOW_PARAMETER = 'windowparameter'
12
+ THUMBNAIL = 'thumbnail'
13
+ PATH = 'path'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Favourites
6
+ # return type for Favourites.GetFavourites
7
+ class GetFavouriteReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :favourites, :limits
12
+
13
+ type_mapping ['favourites', DetailsFavourite, true], ['limits', Types::List::ListLimitsReturned]
14
+
15
+ def initialize(favourites, limits)
16
+ @favourites = favourites
17
+ @limits = limits
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Favourites
6
+ # Favourite.Type https://kodi.wiki/view/JSON-RPC_API/v12#Favourite.Type
7
+ module Type
8
+ extend Extensions::Iterable
9
+
10
+ MEDIA = 'media'
11
+ WINDOW = 'window'
12
+ SCRIPT = 'script'
13
+ ANDROID_APP = 'androidapp'
14
+ UNKNOWN = 'unknown'
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Files
6
+ # File/Label tuple
7
+ class FileLabel
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :file, :label
12
+
13
+ def initialize(file, label)
14
+ @file = file
15
+ @label = label
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+ module Types
5
+ module Files
6
+ # return value for GetDirectory
7
+ class GetDirectoryReturned
8
+ include Extensions::Comparable
9
+ extend Extensions::Creatable
10
+
11
+ attr_reader :files, :limits
12
+
13
+ type_mapping ['files', List::ListItemFile, true], ['limits', List::ListLimitsReturned]
14
+
15
+ def initialize(files, limits)
16
+ @files = files
17
+ @limits = limits
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end