kodi_client 0.5.7 → 0.6.3
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/README.md +2 -1
- data/kodi_client.gemspec +3 -3
- data/lib/kodi_client/Chainable.rb +1 -2
- data/lib/kodi_client/kodi_module.rb +0 -7
- data/lib/kodi_client/method/addons.rb +6 -21
- data/lib/kodi_client/method/application.rb +1 -4
- data/lib/kodi_client/method/audio_library.rb +46 -0
- data/lib/kodi_client/method/favourites.rb +1 -4
- data/lib/kodi_client/method/files.rb +85 -0
- data/lib/kodi_client/method/gui.rb +1 -4
- data/lib/kodi_client/method/input.rb +1 -5
- data/lib/kodi_client/method/player.rb +1 -6
- data/lib/kodi_client/method/profiles.rb +1 -4
- data/lib/kodi_client/method/system.rb +1 -5
- data/lib/kodi_client/{global_types → types}/addon_types.rb +9 -26
- data/lib/kodi_client/{global_types → types}/application_types.rb +16 -25
- data/lib/kodi_client/types/audio_types.rb +221 -0
- data/lib/kodi_client/{global_types → types}/favourites_types.rb +1 -10
- data/lib/kodi_client/types/files_types.rb +63 -0
- data/lib/kodi_client/{global_types → types}/global_types.rb +0 -4
- data/lib/kodi_client/{global_types → types}/gui_types.rb +2 -14
- data/lib/kodi_client/{global_types → types}/input_types.rb +0 -2
- data/lib/kodi_client/{global_types → types}/item_types.rb +5 -1
- data/lib/kodi_client/{global_types → types}/list_types.rb +193 -64
- data/lib/kodi_client/{global_types → types}/media_types.rb +5 -7
- data/lib/kodi_client/{global_types → types}/player_type.rb +11 -36
- data/lib/kodi_client/{global_types → types}/profiles_types.rb +2 -17
- data/lib/kodi_client/{global_types → types}/pvr_type.rb +0 -2
- data/lib/kodi_client/{global_types → types}/system_types.rb +0 -3
- data/lib/kodi_client/{global_types → types}/video_types.rb +32 -25
- data/lib/kodi_client/util/creatable.rb +69 -15
- data/lib/kodi_client.rb +37 -9
- metadata +23 -20
- data/lib/kodi_client/global_types/audio_types.rb +0 -88
| @@ -1,10 +1,5 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require 'kodi_client/util/comparable'
         | 
| 4 | 
            -
            require 'kodi_client/util/creatable'
         | 
| 5 | 
            -
            require 'kodi_client/global_types/video_types'
         | 
| 6 | 
            -
            require 'kodi_client/global_types/audio_types'
         | 
| 7 | 
            -
             | 
| 8 3 | 
             
            module KodiClient
         | 
| 9 4 | 
             
              module Types
         | 
| 10 5 | 
             
                module List
         | 
| @@ -28,11 +23,7 @@ module KodiClient | |
| 28 23 |  | 
| 29 24 | 
             
                    attr_reader :list_start, :list_end, :total
         | 
| 30 25 |  | 
| 31 | 
            -
                     | 
| 32 | 
            -
                      return nil if hash.nil?
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                      new(hash['start'], hash['end'], hash['total'])
         | 
| 35 | 
            -
                    end
         | 
| 26 | 
            +
                    fields_to_map %w[start end total]
         | 
| 36 27 |  | 
| 37 28 | 
             
                    def initialize(list_start, list_end, total)
         | 
| 38 29 | 
             
                      @list_start = list_start
         | 
| @@ -153,6 +144,95 @@ module KodiClient | |
| 153 144 | 
             
                    YEAR = 'year'
         | 
| 154 145 | 
             
                  end
         | 
| 155 146 |  | 
| 147 | 
            +
                  # List.Fields.Files https://kodi.wiki/view/JSON-RPC_API/v12#List.Fields.Files
         | 
| 148 | 
            +
                  module ListFieldFiles
         | 
| 149 | 
            +
                    extend Iterable
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                    ALBUM = 'album'
         | 
| 152 | 
            +
                    ALBUMARTIST = 'albumartist'
         | 
| 153 | 
            +
                    ALBUMARTISTID = 'albumartistid'
         | 
| 154 | 
            +
                    ALBUMID = 'albumid'
         | 
| 155 | 
            +
                    ALBUMLABEL = 'albumlabel'
         | 
| 156 | 
            +
                    ART = 'art'
         | 
| 157 | 
            +
                    ARTIST = 'artist'
         | 
| 158 | 
            +
                    ARTISTID = 'artistid'
         | 
| 159 | 
            +
                    CAST = 'cast'
         | 
| 160 | 
            +
                    COMMENT = 'comment'
         | 
| 161 | 
            +
                    COUNTRY = 'country'
         | 
| 162 | 
            +
                    DATEADDED = 'dateadded'
         | 
| 163 | 
            +
                    DESCRIPTION = 'description'
         | 
| 164 | 
            +
                    DIRECTOR = 'director'
         | 
| 165 | 
            +
                    DISC = 'disc'
         | 
| 166 | 
            +
                    DISPLAYARTIST = 'displayartist'
         | 
| 167 | 
            +
                    DURATION = 'duration'
         | 
| 168 | 
            +
                    EPISODE = 'episode'
         | 
| 169 | 
            +
                    EPISODEGUIDE = 'episodeguide'
         | 
| 170 | 
            +
                    FANART = 'fanart'
         | 
| 171 | 
            +
                    FILE = 'file'
         | 
| 172 | 
            +
                    FIRSTAIRED = 'firstaired'
         | 
| 173 | 
            +
                    GENRE = 'genre'
         | 
| 174 | 
            +
                    GENREID = 'genreid'
         | 
| 175 | 
            +
                    IMDBNUMBER = 'imdbnumber'
         | 
| 176 | 
            +
                    LASTMODIFIED = 'lastmodified'
         | 
| 177 | 
            +
                    LASTPLAYED = 'lastplayed'
         | 
| 178 | 
            +
                    LYRICS = 'lyrics'
         | 
| 179 | 
            +
                    MIMETYPE = 'mimetype'
         | 
| 180 | 
            +
                    MOOD = 'mood'
         | 
| 181 | 
            +
                    MPAA = 'mpaa'
         | 
| 182 | 
            +
                    MUSICBRAINZALBUMARTISTID = 'musicbrainzalbumartistid'
         | 
| 183 | 
            +
                    MUSICBRAINZALBUMID = 'musicbrainzalbumid'
         | 
| 184 | 
            +
                    MUSICBRAINZARTISTID = 'musicbrainzartistid'
         | 
| 185 | 
            +
                    MUSICBRAINZTRACKID = 'musicbrainztrackid'
         | 
| 186 | 
            +
                    ORIGINALTITLE = 'originaltitle'
         | 
| 187 | 
            +
                    PLAYCOUNT = 'playcount'
         | 
| 188 | 
            +
                    PLOT = 'plot'
         | 
| 189 | 
            +
                    PLOTOUTLINE = 'plotoutline'
         | 
| 190 | 
            +
                    PREMIERED = 'premiered'
         | 
| 191 | 
            +
                    PRODUCTIONCODE = 'productioncode'
         | 
| 192 | 
            +
                    RATING = 'rating'
         | 
| 193 | 
            +
                    RESUME = 'resume'
         | 
| 194 | 
            +
                    RUNTIME = 'runtime'
         | 
| 195 | 
            +
                    SEASON = 'season'
         | 
| 196 | 
            +
                    SET = 'set'
         | 
| 197 | 
            +
                    SETID = 'setid'
         | 
| 198 | 
            +
                    SHOWLINK = 'showlink'
         | 
| 199 | 
            +
                    SHOWTITLE = 'showtitle'
         | 
| 200 | 
            +
                    SIZE = 'size'
         | 
| 201 | 
            +
                    SORTTITLE = 'sorttitle'
         | 
| 202 | 
            +
                    SPECIALSORTEPISODE = 'specialsortepisode'
         | 
| 203 | 
            +
                    SPECIALSORTSEASON = 'specialsortseason'
         | 
| 204 | 
            +
                    STREAMDETAILS = 'streamdetails'
         | 
| 205 | 
            +
                    STUDIO = 'studio'
         | 
| 206 | 
            +
                    STYLE = 'style'
         | 
| 207 | 
            +
                    TAG = 'tag'
         | 
| 208 | 
            +
                    TAGLINE = 'tagline'
         | 
| 209 | 
            +
                    THEME = 'theme'
         | 
| 210 | 
            +
                    THUMBNAIL = 'thumbnail'
         | 
| 211 | 
            +
                    TITLE = 'title'
         | 
| 212 | 
            +
                    TOP250 = 'top250'
         | 
| 213 | 
            +
                    TRACK = 'track'
         | 
| 214 | 
            +
                    TRAILER = 'trailer'
         | 
| 215 | 
            +
                    TVSHOWID = 'tvshowid'
         | 
| 216 | 
            +
                    UNIQUEID = 'uniqueid'
         | 
| 217 | 
            +
                    VOTES = 'votes'
         | 
| 218 | 
            +
                    WATCHEDEPISODES = 'watchedepisodes'
         | 
| 219 | 
            +
                    WRITER = 'writer'
         | 
| 220 | 
            +
                    YEAR = 'year'
         | 
| 221 | 
            +
                  end
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                  # File/Label tuple
         | 
| 224 | 
            +
                  class FileLabel
         | 
| 225 | 
            +
                    include Comparable
         | 
| 226 | 
            +
                    extend Creatable
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                    attr_reader :file, :label
         | 
| 229 | 
            +
             | 
| 230 | 
            +
                    def initialize(file, label)
         | 
| 231 | 
            +
                      @file = file
         | 
| 232 | 
            +
                      @label = label
         | 
| 233 | 
            +
                    end
         | 
| 234 | 
            +
                  end
         | 
| 235 | 
            +
             | 
| 156 236 | 
             
                  # List.Item.Base https://kodi.wiki/view/JSON-RPC_API/v12#List.Item.Base
         | 
| 157 237 | 
             
                  module ListItemBase
         | 
| 158 238 | 
             
                    include Video::VideoDetailsFile
         | 
| @@ -168,31 +248,34 @@ module KodiClient | |
| 168 248 | 
             
                                :special_sort_season, :studio, :style, :tag, :tag_line, :theme, :top250, :total_discs, :track,
         | 
| 169 249 | 
             
                                :trailer, :tv_show_id, :type, :unique_id, :votes, :watched_episodes, :writer
         | 
| 170 250 |  | 
| 251 | 
            +
                    def list_item_base_mappings
         | 
| 252 | 
            +
                      mappings = {
         | 
| 253 | 
            +
                        'cast' => Creatable::CreateMap.new(Video::VideoCast, true),
         | 
| 254 | 
            +
                        'contributors' => Creatable::CreateMap.new(Audio::AudioContributor, true),
         | 
| 255 | 
            +
                        'resume' => Creatable::CreateMap.new(Video::VideoResume),
         | 
| 256 | 
            +
                        'streamdetails' => Creatable::CreateMap.new(Video::Streams),
         | 
| 257 | 
            +
                        'art' => Creatable::CreateMap.new(Media::MediaArtwork)
         | 
| 258 | 
            +
                      }
         | 
| 259 | 
            +
                      mappings.merge(video_details_file_mappings).merge(audio_details_media_mappings)
         | 
| 260 | 
            +
                    end
         | 
| 261 | 
            +
             | 
| 171 262 | 
             
                    def list_item_base_by_hash(hash)
         | 
| 172 | 
            -
                       | 
| 173 | 
            -
             | 
| 174 | 
            -
                       | 
| 175 | 
            -
             | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 180 | 
            -
             | 
| 181 | 
            -
             | 
| 182 | 
            -
             | 
| 183 | 
            -
             | 
| 184 | 
            -
             | 
| 185 | 
            -
             | 
| 186 | 
            -
             | 
| 187 | 
            -
             | 
| 188 | 
            -
                                                                     special_sort_episode special_sort_season studio style tag
         | 
| 189 | 
            -
                                                                     tag_line theme top250 total_discs track trailer tv_show_id
         | 
| 190 | 
            -
                                                                     type unique_id votes watched_episodes writer director]),
         | 
| 191 | 
            -
                                     resume, hash['runtime'], stream_details,
         | 
| 192 | 
            -
                                     *Creatable.hash_to_arr(hash, %w[date_added file last_played plot title]), art,
         | 
| 193 | 
            -
                                     *Creatable.hash_to_arr(hash, %w[play_count fan_art thumbnail label artist artist_id
         | 
| 194 | 
            -
                                                                     display_artist musicbrainz_album_artist_id rating sort_artist
         | 
| 195 | 
            -
                                                                     user_rating year genre]))
         | 
| 263 | 
            +
                      return nil if hash.nil?
         | 
| 264 | 
            +
             | 
| 265 | 
            +
                      list_item_base(*Creatable.hash_to_arr(
         | 
| 266 | 
            +
                        hash, %w[album album_artist album_artist_id album_id album_release_type album_status bit_rate
         | 
| 267 | 
            +
                                 bpm cast channels comment compilation contributors country description disc
         | 
| 268 | 
            +
                                 disc_title display_composer display_conductor display_lyricist display_orchestra
         | 
| 269 | 
            +
                                 duration dyn_path episode episode_guide first_aired id imdb_number is_box_set
         | 
| 270 | 
            +
                                 lyrics media_path mood mpaa musicbrainz_artist_id musicbrainz_track_id original_date
         | 
| 271 | 
            +
                                 original_title plot_outline premiered production_code release_date release_type
         | 
| 272 | 
            +
                                 sample_rate season set set_id show_link show_title sort_title special_sort_episode
         | 
| 273 | 
            +
                                 special_sort_season studio style tag tag_line theme top250 total_discs track
         | 
| 274 | 
            +
                                 trailer tv_show_id type unique_id votes watched_episodes writer director resume
         | 
| 275 | 
            +
                                 runtime stream_details date_added file last_played plot title art play_count
         | 
| 276 | 
            +
                                 fan_art thumbnail label artist artist_id display_artist musicbrainz_album_artist_id
         | 
| 277 | 
            +
                                 rating sort_artist user_rating year genre], list_item_base_mappings
         | 
| 278 | 
            +
                      ))
         | 
| 196 279 | 
             
                    end
         | 
| 197 280 |  | 
| 198 281 | 
             
                    def list_item_base(album, album_artist, album_artist_id, album_id, album_release_type, album_status, bit_rate,
         | 
| @@ -286,38 +369,27 @@ module KodiClient | |
| 286 369 | 
             
                    include ListItemBase
         | 
| 287 370 | 
             
                    include Comparable
         | 
| 288 371 | 
             
                    extend Creatable
         | 
| 372 | 
            +
                    extend ListItemBase
         | 
| 289 373 |  | 
| 290 374 | 
             
                    attr_reader :channel, :channel_number, :channel_type, :end_time, :hidden, :locked, :start_time,
         | 
| 291 375 | 
             
                                :sub_channel_number
         | 
| 292 376 |  | 
| 293 | 
            -
                     | 
| 294 | 
            -
             | 
| 377 | 
            +
                    fields_to_map %w[channel channel_number channel_type end_time hidden locked start_time sub_channel_number
         | 
| 378 | 
            +
                                     album album_artist album_artist_id album_id album_release_type album_status bit_rate
         | 
| 379 | 
            +
                                     bpm cast channels comment compilation contributors country description disc
         | 
| 380 | 
            +
                                     disc_title display_composer display_conductor display_lyricist display_orchestra
         | 
| 381 | 
            +
                                     duration dyn_path episode episode_guide first_aired id imdb_number is_box_set
         | 
| 382 | 
            +
                                     lyrics media_path mood mpaa musicbrainz_artist_id musicbrainz_track_id original_date
         | 
| 383 | 
            +
                                     original_title plot_outline premiered production_code release_date release_type
         | 
| 384 | 
            +
                                     sample_rate season set set_id show_link show_title sort_title special_sort_episode
         | 
| 385 | 
            +
                                     special_sort_season studio style tag tag_line theme top250 total_discs track
         | 
| 386 | 
            +
                                     trailer tv_show_id type unique_id votes watched_episodes writer director resume
         | 
| 387 | 
            +
                                     runtime stream_details date_added file last_played plot title art play_count
         | 
| 388 | 
            +
                                     fan_art thumbnail label artist artist_id display_artist musicbrainz_album_artist_id
         | 
| 389 | 
            +
                                     rating sort_artist user_rating year genre]
         | 
| 295 390 |  | 
| 296 | 
            -
             | 
| 297 | 
            -
                       | 
| 298 | 
            -
                      resume = Types::Video::VideoResume.create(hash['resume'])
         | 
| 299 | 
            -
                      stream_details = Types::Video::Streams.create(hash['streamdetails'])
         | 
| 300 | 
            -
                      art = Types::Media::MediaArtwork.create(hash['art'])
         | 
| 301 | 
            -
                      hash['type'] = 'unknown' if hash['type'].nil?
         | 
| 302 | 
            -
                      new(*Creatable.hash_to_arr(hash, %w[channel channel_number channel_type end_time hidden locked start_time 
         | 
| 303 | 
            -
                                                          sub_channel_number album album_artist album_artist_id album_id
         | 
| 304 | 
            -
                                                          album_release_type album_status bit_rate bpm]), cast,
         | 
| 305 | 
            -
                          hash['channels'], hash['comment'], hash['compilation'], contributors,
         | 
| 306 | 
            -
                          *Creatable.hash_to_arr(hash, %w[country description disc disc_title display_composer
         | 
| 307 | 
            -
                                                          display_conductor display_lyricist display_orchestra duration
         | 
| 308 | 
            -
                                                          dyn_path episode episode_guide first_aired id imdb_number
         | 
| 309 | 
            -
                                                          is_box_set lyrics media_path mood mpaa musicbrainz_artist_id
         | 
| 310 | 
            -
                                                          musicbrainz_track_id original_date original_title plot_outline
         | 
| 311 | 
            -
                                                          premiered production_code release_date release_type sample_rate
         | 
| 312 | 
            -
                                                          season set set_id show_link show_title sort_title
         | 
| 313 | 
            -
                                                          special_sort_episode special_sort_season studio style tag
         | 
| 314 | 
            -
                                                          tag_line theme top250 total_discs track trailer tv_show_id
         | 
| 315 | 
            -
                                                          type unique_id votes watched_episodes writer director]),
         | 
| 316 | 
            -
                          resume, hash['runtime'], stream_details,
         | 
| 317 | 
            -
                          *Creatable.hash_to_arr(hash, %w[date_added file last_played plot title]), art,
         | 
| 318 | 
            -
                          *Creatable.hash_to_arr(hash, %w[play_count fan_art thumbnail label artist artist_id
         | 
| 319 | 
            -
                                                          display_artist musicbrainz_album_artist_id rating sort_artist
         | 
| 320 | 
            -
                                                          user_rating year genre]))
         | 
| 391 | 
            +
                    def self.lazy_type_mapping
         | 
| 392 | 
            +
                      list_item_base_mappings
         | 
| 321 393 | 
             
                    end
         | 
| 322 394 |  | 
| 323 395 | 
             
                    def initialize(channel, channel_number, channel_type, end_time, hidden, locked, start_time, sub_channel_number,
         | 
| @@ -333,7 +405,6 @@ module KodiClient | |
| 333 405 | 
             
                                   runtime, stream_details, date_added, file, last_played, plot, title, art, play_count,
         | 
| 334 406 | 
             
                                   fan_art, thumbnail, label, artist, artist_id, display_artist, musicbrainz_album_artist_id,
         | 
| 335 407 | 
             
                                   rating, sort_artist, user_rating, year, genre)
         | 
| 336 | 
            -
             | 
| 337 408 | 
             
                      @channel = channel
         | 
| 338 409 | 
             
                      @channel_number = channel_number
         | 
| 339 410 | 
             
                      @channel_type = channel_type
         | 
| @@ -342,6 +413,7 @@ module KodiClient | |
| 342 413 | 
             
                      @locked = locked
         | 
| 343 414 | 
             
                      @start_time = start_time
         | 
| 344 415 | 
             
                      @sub_channel_number = sub_channel_number
         | 
| 416 | 
            +
                      type = type.nil? ? 'unknown' : type
         | 
| 345 417 |  | 
| 346 418 | 
             
                      list_item_base(album, album_artist, album_artist_id, album_id, album_release_type, album_status, bit_rate,
         | 
| 347 419 | 
             
                                     bpm, cast, channels, comment, compilation, contributors, country, description, disc,
         | 
| @@ -356,9 +428,66 @@ module KodiClient | |
| 356 428 | 
             
                                     fan_art, thumbnail, label, artist, artist_id, display_artist, musicbrainz_album_artist_id,
         | 
| 357 429 | 
             
                                     rating, sort_artist, user_rating, year, genre)
         | 
| 358 430 | 
             
                    end
         | 
| 431 | 
            +
                  end
         | 
| 359 432 |  | 
| 360 | 
            -
             | 
| 361 | 
            -
             | 
| 433 | 
            +
                  # List.Item.File https://kodi.wiki/view/JSON-RPC_API/v12#List.Item.File
         | 
| 434 | 
            +
                  class ListItemFile
         | 
| 435 | 
            +
                    include ListItemBase
         | 
| 436 | 
            +
                    include Comparable
         | 
| 437 | 
            +
                    extend Creatable
         | 
| 438 | 
            +
                    extend ListItemBase
         | 
| 439 | 
            +
             | 
| 440 | 
            +
                    attr_reader :file, :file_type, :last_modified, :mime_type, :size
         | 
| 441 | 
            +
             | 
| 442 | 
            +
                    fields_to_map %w[file_type last_modified mime_type size
         | 
| 443 | 
            +
                                     album album_artist album_artist_id album_id album_release_type album_status bit_rate
         | 
| 444 | 
            +
                                     bpm cast channels comment compilation contributors country description disc
         | 
| 445 | 
            +
                                     disc_title display_composer display_conductor display_lyricist display_orchestra
         | 
| 446 | 
            +
                                     duration dyn_path episode episode_guide first_aired id imdb_number is_box_set
         | 
| 447 | 
            +
                                     lyrics media_path mood mpaa musicbrainz_artist_id musicbrainz_track_id original_date
         | 
| 448 | 
            +
                                     original_title plot_outline premiered production_code release_date release_type
         | 
| 449 | 
            +
                                     sample_rate season set set_id show_link show_title sort_title special_sort_episode
         | 
| 450 | 
            +
                                     special_sort_season studio style tag tag_line theme top250 total_discs track
         | 
| 451 | 
            +
                                     trailer tv_show_id type unique_id votes watched_episodes writer director resume
         | 
| 452 | 
            +
                                     runtime stream_details date_added file last_played plot title art play_count
         | 
| 453 | 
            +
                                     fan_art thumbnail label artist artist_id display_artist musicbrainz_album_artist_id
         | 
| 454 | 
            +
                                     rating sort_artist user_rating year genre]
         | 
| 455 | 
            +
             | 
| 456 | 
            +
                    def self.lazy_type_mapping
         | 
| 457 | 
            +
                      list_item_base_mappings
         | 
| 458 | 
            +
                    end
         | 
| 459 | 
            +
             | 
| 460 | 
            +
                    def initialize(file_type, last_modified, mime_type, size,
         | 
| 461 | 
            +
                                   album, album_artist, album_artist_id, album_id, album_release_type, album_status, bit_rate,
         | 
| 462 | 
            +
                                   bpm, cast, channels, comment, compilation, contributors, country, description, disc,
         | 
| 463 | 
            +
                                   disc_title, display_composer, display_conductor, display_lyricist, display_orchestra,
         | 
| 464 | 
            +
                                   duration, dyn_path, episode, episode_guide, first_aired, id, imdb_number, is_box_set,
         | 
| 465 | 
            +
                                   lyrics, media_path, mood, mpaa, musicbrainz_artist_id, musicbrainz_track_id, original_date,
         | 
| 466 | 
            +
                                   original_title, plot_outline, premiered, production_code, release_date, release_type,
         | 
| 467 | 
            +
                                   sample_rate, season, set, set_id, show_link, show_title, sort_title, special_sort_episode,
         | 
| 468 | 
            +
                                   special_sort_season, studio, style, tag, tag_line, theme, top250, total_discs, track,
         | 
| 469 | 
            +
                                   trailer, tv_show_id, type, unique_id, votes, watched_episodes, writer, director, resume,
         | 
| 470 | 
            +
                                   runtime, stream_details, date_added, file, last_played, plot, title, art, play_count,
         | 
| 471 | 
            +
                                   fan_art, thumbnail, label, artist, artist_id, display_artist, musicbrainz_album_artist_id,
         | 
| 472 | 
            +
                                   rating, sort_artist, user_rating, year, genre)
         | 
| 473 | 
            +
                      @file = file
         | 
| 474 | 
            +
                      @file_type = file_type
         | 
| 475 | 
            +
                      @last_modified = last_modified
         | 
| 476 | 
            +
                      @mime_type = mime_type
         | 
| 477 | 
            +
                      @size = size
         | 
| 478 | 
            +
                      type = type.nil? ? 'unknown' : type
         | 
| 479 | 
            +
                      list_item_base(album, album_artist, album_artist_id, album_id, album_release_type, album_status, bit_rate,
         | 
| 480 | 
            +
                                     bpm, cast, channels, comment, compilation, contributors, country, description, disc,
         | 
| 481 | 
            +
                                     disc_title, display_composer, display_conductor, display_lyricist, display_orchestra,
         | 
| 482 | 
            +
                                     duration, dyn_path, episode, episode_guide, first_aired, id, imdb_number, is_box_set,
         | 
| 483 | 
            +
                                     lyrics, media_path, mood, mpaa, musicbrainz_artist_id, musicbrainz_track_id, original_date,
         | 
| 484 | 
            +
                                     original_title, plot_outline, premiered, production_code, release_date, release_type,
         | 
| 485 | 
            +
                                     sample_rate, season, set, set_id, show_link, show_title, sort_title, special_sort_episode,
         | 
| 486 | 
            +
                                     special_sort_season, studio, style, tag, tag_line, theme, top250, total_discs, track,
         | 
| 487 | 
            +
                                     trailer, tv_show_id, type, unique_id, votes, watched_episodes, writer, director, resume,
         | 
| 488 | 
            +
                                     runtime, stream_details, date_added, file, last_played, plot, title, art, play_count,
         | 
| 489 | 
            +
                                     fan_art, thumbnail, label, artist, artist_id, display_artist, musicbrainz_album_artist_id,
         | 
| 490 | 
            +
                                     rating, sort_artist, user_rating, year, genre)
         | 
| 362 491 | 
             
                    end
         | 
| 363 492 | 
             
                  end
         | 
| 364 493 |  | 
| @@ -1,9 +1,5 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require 'kodi_client/global_types/item_types'
         | 
| 4 | 
            -
            require 'kodi_client/util/comparable'
         | 
| 5 | 
            -
            require 'kodi_client/util/creatable'
         | 
| 6 | 
            -
             | 
| 7 3 | 
             
            module KodiClient
         | 
| 8 4 | 
             
              module Types
         | 
| 9 5 | 
             
                module Media
         | 
| @@ -23,10 +19,12 @@ module KodiClient | |
| 23 19 |  | 
| 24 20 | 
             
                    attr_reader :fan_art, :thumbnail
         | 
| 25 21 |  | 
| 22 | 
            +
                    def media_details_base_mappings
         | 
| 23 | 
            +
                      item_details_base_mappings
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
             | 
| 26 26 | 
             
                    def media_details_base_by_hash(hash)
         | 
| 27 | 
            -
                       | 
| 28 | 
            -
                      @thumbnail = hash['thumbnail']
         | 
| 29 | 
            -
                      item_details_base_by_hash(hash)
         | 
| 27 | 
            +
                      media_details_base(*Creatable.hash_to_arr(hash, %w[fan_art thumbnail label]), media_details_base_mappings)
         | 
| 30 28 | 
             
                    end
         | 
| 31 29 |  | 
| 32 30 | 
             
                    def media_details_base(fan_art, thumbnail, label)
         | 
| @@ -1,10 +1,5 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require 'kodi_client/global_types/item_types'
         | 
| 4 | 
            -
            require 'kodi_client/global_types/global_types'
         | 
| 5 | 
            -
            require 'kodi_client/util/comparable'
         | 
| 6 | 
            -
            require 'kodi_client/util/iterable'
         | 
| 7 | 
            -
             | 
| 8 3 | 
             
            module KodiClient
         | 
| 9 4 | 
             
              module Types
         | 
| 10 5 | 
             
                module Player
         | 
| @@ -195,35 +190,20 @@ module KodiClient | |
| 195 190 | 
             
                                :live, :party_mode, :percentage, :playlist_id, :position, :repeat, :shuffled, :speed,
         | 
| 196 191 | 
             
                                :subtitle_enabled, :subtitles, :time, :total_time, :type, :video_streams
         | 
| 197 192 |  | 
| 198 | 
            -
                     | 
| 199 | 
            -
             | 
| 200 | 
            -
             | 
| 201 | 
            -
             | 
| 202 | 
            -
                      current_audio_stream = AudioStream.create(hash['currentaudiostream'])
         | 
| 203 | 
            -
                      current_subtitle = Subtitle.create(hash['currentsubtitle'])
         | 
| 204 | 
            -
                      current_video_stream = VideoStream.create(hash['currentvideostream'])
         | 
| 205 | 
            -
                      subtitles = Subtitle.create_list(hash['subtitles'])
         | 
| 206 | 
            -
                      time = Types::Global::GlobalTime.create(hash['time'])
         | 
| 207 | 
            -
                      total_time = Types::Global::GlobalTime.create(hash['totaltime'])
         | 
| 208 | 
            -
                      video_streams = VideoStream.create_list(hash['videostreams'])
         | 
| 209 | 
            -
             | 
| 210 | 
            -
                      hash['type'] = PlayerType::VIDEO if hash['type'].nil?
         | 
| 211 | 
            -
                      hash['playlistid'] = -1 if hash['playlistid'].nil?
         | 
| 212 | 
            -
                      hash['position'] = -1 if hash['position'].nil?
         | 
| 213 | 
            -
                      hash['repeat'] = PlayerRepeat::OFF if hash['repeat'].nil?
         | 
| 214 | 
            -
             | 
| 215 | 
            -
                      new(audio_streams, *Creatable.hash_to_arr(hash, %w[cache_percentage can_change_speed can_move
         | 
| 216 | 
            -
                                                                         can_repeat can_rotate can_seek can_shuffle can_zoom]),
         | 
| 217 | 
            -
                          current_audio_stream, current_subtitle, current_video_stream,
         | 
| 218 | 
            -
                          *Creatable.hash_to_arr(hash, %w[live party_mode percentage playlist_id position repeat
         | 
| 219 | 
            -
                                                          shuffled speed subtitle_enabled]), subtitles, time, total_time,
         | 
| 220 | 
            -
                          hash['type'], video_streams)
         | 
| 221 | 
            -
                    end
         | 
| 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]
         | 
| 222 197 |  | 
| 223 198 | 
             
                    def initialize(audio_streams, cache_percentage, can_change_speed, can_move, can_repeat, can_rotate, can_seek,
         | 
| 224 199 | 
             
                                   can_shuffle, can_zoom, current_audio_stream, current_subtitle, current_video_stream, live,
         | 
| 225 200 | 
             
                                   party_mode, percentage, playlist_id, position, repeat, shuffled, speed,
         | 
| 226 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 | 
            +
             | 
| 227 207 | 
             
                      @audio_streams = audio_streams
         | 
| 228 208 | 
             
                      @cache_percentage = cache_percentage
         | 
| 229 209 | 
             
                      @can_change_speed = can_change_speed
         | 
| @@ -299,14 +279,9 @@ module KodiClient | |
| 299 279 | 
             
                    include Comparable
         | 
| 300 280 | 
             
                    extend Creatable
         | 
| 301 281 |  | 
| 302 | 
            -
                     | 
| 303 | 
            -
                      return nil if hash.nil?
         | 
| 282 | 
            +
                    attr_reader :percentage, :time, :total_time
         | 
| 304 283 |  | 
| 305 | 
            -
             | 
| 306 | 
            -
                      total_time = Types::Global::GlobalTime.create(hash['totaltime'])
         | 
| 307 | 
            -
             | 
| 308 | 
            -
                      new(hash['percentage'], time, total_time)
         | 
| 309 | 
            -
                    end
         | 
| 284 | 
            +
                    type_mapping ['time', Global::GlobalTime], ['totaltime', Global::GlobalTime]
         | 
| 310 285 |  | 
| 311 286 | 
             
                    def initialize(percentage, time, total_time)
         | 
| 312 287 | 
             
                      @percentage = percentage
         | 
| @@ -1,9 +1,5 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require 'kodi_client/util/comparable'
         | 
| 4 | 
            -
            require 'kodi_client/util/iterable'
         | 
| 5 | 
            -
            require 'kodi_client/global_types/item_types'
         | 
| 6 | 
            -
             | 
| 7 3 | 
             
            module KodiClient
         | 
| 8 4 | 
             
              module Types
         | 
| 9 5 | 
             
                module Profiles
         | 
| @@ -24,11 +20,7 @@ module KodiClient | |
| 24 20 |  | 
| 25 21 | 
             
                    attr_reader :lock_mode, :thumbnail
         | 
| 26 22 |  | 
| 27 | 
            -
                     | 
| 28 | 
            -
                      return nil if hash.nil?
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                      new(*Creatable.hash_to_arr(hash, %w[lock_mode thumbnail label]))
         | 
| 31 | 
            -
                    end
         | 
| 23 | 
            +
                    fields_to_map %w[lock_mode thumbnail label]
         | 
| 32 24 |  | 
| 33 25 | 
             
                    def initialize(lock_mode, thumbnail, label)
         | 
| 34 26 | 
             
                      @lock_mode = lock_mode
         | 
| @@ -48,14 +40,7 @@ module KodiClient | |
| 48 40 |  | 
| 49 41 | 
             
                    attr_reader :limits, :profiles
         | 
| 50 42 |  | 
| 51 | 
            -
                     | 
| 52 | 
            -
                      return nil if hash.nil?
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                      limits = Types::List::ListLimitsReturned.create(hash['limits'])
         | 
| 55 | 
            -
                      profiles = Types::Profiles::DetailsProfile.create_list(hash['profiles'])
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                      new(limits, profiles)
         | 
| 58 | 
            -
                    end
         | 
| 43 | 
            +
                    type_mapping ['limits', List::ListLimitsReturned], ['profiles', DetailsProfile, true]
         | 
| 59 44 |  | 
| 60 45 | 
             
                    def initialize(limits, profiles)
         | 
| 61 46 | 
             
                      @limits = limits
         | 
| @@ -1,23 +1,21 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require 'kodi_client/global_types/media_types'
         | 
| 4 | 
            -
            require 'kodi_client/global_types/player_type'
         | 
| 5 | 
            -
            require 'kodi_client/util/comparable'
         | 
| 6 | 
            -
            require 'kodi_client/util/creatable'
         | 
| 7 | 
            -
             | 
| 8 3 | 
             
            module KodiClient
         | 
| 9 4 | 
             
              module Types
         | 
| 10 5 | 
             
                module Video
         | 
| 11 | 
            -
             | 
| 12 6 | 
             
                  # Video.Details.Base https://kodi.wiki/view/JSON-RPC_API/v12#Video.Details.Base
         | 
| 13 7 | 
             
                  module VideoDetailsBase
         | 
| 14 8 | 
             
                    include Media::MediaDetailsBase
         | 
| 15 9 |  | 
| 16 10 | 
             
                    attr_reader :art, :play_count
         | 
| 17 11 |  | 
| 12 | 
            +
                    def video_details_base_mappings
         | 
| 13 | 
            +
                      media_details_base_mappings
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
             | 
| 18 16 | 
             
                    def video_details_base_by_hash(hash)
         | 
| 19 | 
            -
                       | 
| 20 | 
            -
             | 
| 17 | 
            +
                      video_details_base(*Creatable.hash_to_arr(hash, %w[art play_count fan_art thumbnail label],
         | 
| 18 | 
            +
                                                                video_details_base_mappings))
         | 
| 21 19 | 
             
                    end
         | 
| 22 20 |  | 
| 23 21 | 
             
                    def video_details_base(art, play_count, fan_art, thumbnail, label)
         | 
| @@ -48,9 +46,13 @@ module KodiClient | |
| 48 46 |  | 
| 49 47 | 
             
                    attr_reader :title
         | 
| 50 48 |  | 
| 49 | 
            +
                    def video_details_media_mappings
         | 
| 50 | 
            +
                      video_details_base_mappings
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
             | 
| 51 53 | 
             
                    def video_details_media_by_hash(hash)
         | 
| 52 | 
            -
                       | 
| 53 | 
            -
             | 
| 54 | 
            +
                      video_details_media(*Creatable.hash_to_arr(hash, %w[title art play_count fan_art thumbnail label]),
         | 
| 55 | 
            +
                                          video_details_base_mappings)
         | 
| 54 56 | 
             
                    end
         | 
| 55 57 |  | 
| 56 58 | 
             
                    def video_details_media(title, art, play_count, fan_art, thumbnail, label)
         | 
| @@ -65,10 +67,14 @@ module KodiClient | |
| 65 67 |  | 
| 66 68 | 
             
                    attr_reader :date_added, :file, :last_played, :plot
         | 
| 67 69 |  | 
| 70 | 
            +
                    def video_details_item_mappings
         | 
| 71 | 
            +
                      video_details_media_mappings
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
             | 
| 68 74 | 
             
                    def video_details_item_by_hash(hash)
         | 
| 69 | 
            -
                       | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 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))
         | 
| 72 78 | 
             
                    end
         | 
| 73 79 |  | 
| 74 80 | 
             
                    def video_details_item(date_added, file, last_played, plot, title, art, play_count, fan_art, thumbnail, label)
         | 
| @@ -86,13 +92,18 @@ module KodiClient | |
| 86 92 |  | 
| 87 93 | 
             
                    attr_reader :director, :resume, :runtime, :stream_details
         | 
| 88 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 | 
            +
             | 
| 89 103 | 
             
                    def video_details_file_by_hash(hash)
         | 
| 90 | 
            -
                       | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
                      video_details_file(hash['director'], resume, hash['runtime'], stream_details,
         | 
| 94 | 
            -
                                         *Creatable.hash_to_arr(hash, %w[date_added file last_played plot title]), art,
         | 
| 95 | 
            -
                                         *Creatable.hash_to_arr(hash, %w[play_count fan_art thumbnail label]))
         | 
| 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))
         | 
| 96 107 | 
             
                    end
         | 
| 97 108 |  | 
| 98 109 | 
             
                    def video_details_file(director, resume, runtime, stream_details, date_added, file, last_played, plot, title,
         | 
| @@ -125,12 +136,8 @@ module KodiClient | |
| 125 136 |  | 
| 126 137 | 
             
                    attr_reader :audio, :subtitle, :video
         | 
| 127 138 |  | 
| 128 | 
            -
                     | 
| 129 | 
            -
             | 
| 130 | 
            -
                      subtitle = Types::Player::Subtitle.create_list(hash['subtitle'])
         | 
| 131 | 
            -
                      video = Types::Player::VideoStream.create_list(hash['video'])
         | 
| 132 | 
            -
                      new(audio, subtitle, video)
         | 
| 133 | 
            -
                    end
         | 
| 139 | 
            +
                    type_mapping ['audio', Player::AudioStream, true], ['subtitle', Player::Subtitle, true],
         | 
| 140 | 
            +
                                 ['video', Player::VideoStream, true]
         | 
| 134 141 |  | 
| 135 142 | 
             
                    def initialize(audio, subtitle, video)
         | 
| 136 143 | 
             
                      @audio = audio
         |