kodi_client 0.5.7 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -5,6 +5,68 @@ module KodiClient
|
|
5
5
|
# creates a create and create_list method by hash
|
6
6
|
module Creatable
|
7
7
|
|
8
|
+
def fields_to_map(fields)
|
9
|
+
@fields_to_map = fields
|
10
|
+
end
|
11
|
+
|
12
|
+
def type_mapping(*args)
|
13
|
+
return if args.nil?
|
14
|
+
|
15
|
+
@type_mapping = {}
|
16
|
+
args.map { |it| @type_mapping[it[0]] = Creatable::CreateMap.new(it[1], it[2].nil? ? false : it[2]) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def lazy_type_mapping
|
20
|
+
{}
|
21
|
+
end
|
22
|
+
|
23
|
+
def create_list(hash)
|
24
|
+
hash.nil? ? [] : hash.map { |it| create(it) }.reject(&:nil?)
|
25
|
+
end
|
26
|
+
|
27
|
+
def create(hash)
|
28
|
+
return nil if hash.nil?
|
29
|
+
|
30
|
+
if @fields_to_map.nil? || @fields_to_map.empty?
|
31
|
+
fields = @kodi_fields
|
32
|
+
return nil if @kodi_fields.none? { |it| !hash[it.to_s.gsub('_', '')].nil? }
|
33
|
+
else
|
34
|
+
fields = @fields_to_map
|
35
|
+
end
|
36
|
+
|
37
|
+
mapping = @type_mapping.nil? ? lazy_type_mapping : @type_mapping
|
38
|
+
args = fields.map do |it|
|
39
|
+
field = it.to_s.gsub('_', '')
|
40
|
+
Creatable.extract_field_from_hash(field, hash, mapping)
|
41
|
+
end
|
42
|
+
|
43
|
+
new(*args)
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.hash_to_arr(hash, fields, mapping = {})
|
47
|
+
return nil if hash.nil?
|
48
|
+
|
49
|
+
fields.map do |it|
|
50
|
+
field = it.to_s.gsub('_', '')
|
51
|
+
extract_field_from_hash(field, hash, mapping)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def hash_to_arr(hash, fields)
|
56
|
+
Creatable.hash_to_arr(hash, fields, @type_mapping.nil? ? {} : @type_mapping)
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.extract_field_from_hash(field, hash, mapping)
|
60
|
+
map = mapping[field]
|
61
|
+
return nil if hash[field].nil? && map.nil?
|
62
|
+
|
63
|
+
return hash[field] if map.nil?
|
64
|
+
|
65
|
+
return map.type.create_list(hash[field]) if map.is_list
|
66
|
+
|
67
|
+
map.type.create(hash[field])
|
68
|
+
end
|
69
|
+
|
8
70
|
def attr_accessor(*args)
|
9
71
|
attr_reader(*args)
|
10
72
|
attr_writer(*args)
|
@@ -30,23 +92,15 @@ module KodiClient
|
|
30
92
|
end
|
31
93
|
end
|
32
94
|
|
33
|
-
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
def create(hash)
|
38
|
-
return nil if hash.nil?
|
39
|
-
return nil if @kodi_fields.none? { |it| !hash[it].nil? }
|
95
|
+
# mapping class with the type and if it is a list field or not
|
96
|
+
class CreateMap
|
40
97
|
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.hash_to_arr(hash, fields)
|
45
|
-
fields.map { |it| hash[it.to_s.gsub('_', '')].nil? ? nil : hash[it.to_s.gsub('_', '')] }
|
46
|
-
end
|
98
|
+
attr_reader :type, :is_list
|
47
99
|
|
48
|
-
|
49
|
-
|
100
|
+
def initialize(type, is_list = false)
|
101
|
+
@type = type
|
102
|
+
@is_list = is_list
|
103
|
+
end
|
50
104
|
end
|
51
105
|
end
|
52
106
|
end
|
data/lib/kodi_client.rb
CHANGED
@@ -4,15 +4,41 @@ require 'http'
|
|
4
4
|
require 'json'
|
5
5
|
|
6
6
|
require 'kodi_client/Chainable'
|
7
|
+
|
8
|
+
require 'kodi_client/util/comparable'
|
9
|
+
require 'kodi_client/util/creatable'
|
10
|
+
require 'kodi_client/util/iterable'
|
11
|
+
|
12
|
+
require 'kodi_client/kodi_module'
|
13
|
+
require 'kodi_client/options'
|
14
|
+
|
7
15
|
require 'kodi_client/method/addons'
|
16
|
+
require 'kodi_client/method/audio_library'
|
8
17
|
require 'kodi_client/method/application'
|
9
18
|
require 'kodi_client/method/favourites'
|
19
|
+
require 'kodi_client/method/files'
|
10
20
|
require 'kodi_client/method/gui'
|
11
21
|
require 'kodi_client/method/input'
|
12
22
|
require 'kodi_client/method/player'
|
13
23
|
require 'kodi_client/method/profiles'
|
14
24
|
require 'kodi_client/method/system'
|
15
25
|
|
26
|
+
require 'kodi_client/types/global_types'
|
27
|
+
require 'kodi_client/types/item_types'
|
28
|
+
require 'kodi_client/types/media_types'
|
29
|
+
require 'kodi_client/types/player_type'
|
30
|
+
require 'kodi_client/types/pvr_type'
|
31
|
+
require 'kodi_client/types/audio_types'
|
32
|
+
require 'kodi_client/types/video_types'
|
33
|
+
require 'kodi_client/types/system_types'
|
34
|
+
require 'kodi_client/types/list_types'
|
35
|
+
require 'kodi_client/types/application_types'
|
36
|
+
require 'kodi_client/types/addon_types'
|
37
|
+
require 'kodi_client/types/gui_types'
|
38
|
+
require 'kodi_client/types/favourites_types'
|
39
|
+
require 'kodi_client/types/profiles_types'
|
40
|
+
require 'kodi_client/types/input_types'
|
41
|
+
require 'kodi_client/types/files_types'
|
16
42
|
|
17
43
|
# client for Kodi rest api https://kodi.wiki/view/JSON-RPC_API/v12
|
18
44
|
module KodiClient
|
@@ -22,17 +48,19 @@ module KodiClient
|
|
22
48
|
class Client
|
23
49
|
include Chainable
|
24
50
|
|
25
|
-
attr_reader :addons, :application, :
|
51
|
+
attr_reader :audio_library, :addons, :application, :favourites, :files, :gui, :input, :player, :profiles, :system
|
26
52
|
|
27
53
|
def initialize
|
28
|
-
@addons = KodiClient::
|
29
|
-
@
|
30
|
-
@
|
31
|
-
@
|
32
|
-
@
|
33
|
-
@
|
34
|
-
@
|
35
|
-
@
|
54
|
+
@addons = KodiClient::Method::Addons.new
|
55
|
+
@audio_library = KodiClient::Method::AudioLibrary.new
|
56
|
+
@application = KodiClient::Method::Application.new
|
57
|
+
@favourites = KodiClient::Method::Favourites.new
|
58
|
+
@files = KodiClient::Method::Files.new
|
59
|
+
@gui = KodiClient::Method::GUI.new
|
60
|
+
@input = KodiClient::Method::Input.new
|
61
|
+
@player = KodiClient::Method::Player.new
|
62
|
+
@profiles = KodiClient::Method::Profiles.new
|
63
|
+
@system = KodiClient::Method::System.new
|
36
64
|
end
|
37
65
|
|
38
66
|
def apply_options_to_methods(options)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kodi_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Feier
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-11-
|
11
|
+
date: 2021-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -25,9 +25,9 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 5.0.4
|
27
27
|
description: A client for the Kodi JSON API v12, currently implemented methods are
|
28
|
-
|
29
|
-
be added with the time). For more information how to use it and how to
|
30
|
-
Remote Control in Kodi, please check the github page https://github.com/cfe86/RubyKodiClient
|
28
|
+
Addons, Application, Favourites, Files, GUI, Input, Player, Profiles and System
|
29
|
+
(more will be added with the time). For more information how to use it and how to
|
30
|
+
activate Remote Control in Kodi, please check the github page https://github.com/cfe86/RubyKodiClient
|
31
31
|
email:
|
32
32
|
- christian.feier@gmail.com
|
33
33
|
executables: []
|
@@ -43,31 +43,34 @@ files:
|
|
43
43
|
- kodi_client.gemspec
|
44
44
|
- lib/kodi_client.rb
|
45
45
|
- lib/kodi_client/Chainable.rb
|
46
|
-
- lib/kodi_client/global_types/addon_types.rb
|
47
|
-
- lib/kodi_client/global_types/application_types.rb
|
48
|
-
- lib/kodi_client/global_types/audio_types.rb
|
49
|
-
- lib/kodi_client/global_types/favourites_types.rb
|
50
|
-
- lib/kodi_client/global_types/global_types.rb
|
51
|
-
- lib/kodi_client/global_types/gui_types.rb
|
52
|
-
- lib/kodi_client/global_types/input_types.rb
|
53
|
-
- lib/kodi_client/global_types/item_types.rb
|
54
|
-
- lib/kodi_client/global_types/list_types.rb
|
55
|
-
- lib/kodi_client/global_types/media_types.rb
|
56
|
-
- lib/kodi_client/global_types/player_type.rb
|
57
|
-
- lib/kodi_client/global_types/profiles_types.rb
|
58
|
-
- lib/kodi_client/global_types/pvr_type.rb
|
59
|
-
- lib/kodi_client/global_types/system_types.rb
|
60
|
-
- lib/kodi_client/global_types/video_types.rb
|
61
46
|
- lib/kodi_client/kodi_module.rb
|
62
47
|
- lib/kodi_client/method/addons.rb
|
63
48
|
- lib/kodi_client/method/application.rb
|
49
|
+
- lib/kodi_client/method/audio_library.rb
|
64
50
|
- lib/kodi_client/method/favourites.rb
|
51
|
+
- lib/kodi_client/method/files.rb
|
65
52
|
- lib/kodi_client/method/gui.rb
|
66
53
|
- lib/kodi_client/method/input.rb
|
67
54
|
- lib/kodi_client/method/player.rb
|
68
55
|
- lib/kodi_client/method/profiles.rb
|
69
56
|
- lib/kodi_client/method/system.rb
|
70
57
|
- lib/kodi_client/options.rb
|
58
|
+
- lib/kodi_client/types/addon_types.rb
|
59
|
+
- lib/kodi_client/types/application_types.rb
|
60
|
+
- lib/kodi_client/types/audio_types.rb
|
61
|
+
- lib/kodi_client/types/favourites_types.rb
|
62
|
+
- lib/kodi_client/types/files_types.rb
|
63
|
+
- lib/kodi_client/types/global_types.rb
|
64
|
+
- lib/kodi_client/types/gui_types.rb
|
65
|
+
- lib/kodi_client/types/input_types.rb
|
66
|
+
- lib/kodi_client/types/item_types.rb
|
67
|
+
- lib/kodi_client/types/list_types.rb
|
68
|
+
- lib/kodi_client/types/media_types.rb
|
69
|
+
- lib/kodi_client/types/player_type.rb
|
70
|
+
- lib/kodi_client/types/profiles_types.rb
|
71
|
+
- lib/kodi_client/types/pvr_type.rb
|
72
|
+
- lib/kodi_client/types/system_types.rb
|
73
|
+
- lib/kodi_client/types/video_types.rb
|
71
74
|
- lib/kodi_client/util/comparable.rb
|
72
75
|
- lib/kodi_client/util/creatable.rb
|
73
76
|
- lib/kodi_client/util/iterable.rb
|
@@ -1,88 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'kodi_client/global_types/media_types'
|
4
|
-
require 'kodi_client/util/comparable'
|
5
|
-
require 'kodi_client/util/iterable'
|
6
|
-
require 'kodi_client/util/creatable'
|
7
|
-
|
8
|
-
module KodiClient
|
9
|
-
module Types
|
10
|
-
module Audio
|
11
|
-
|
12
|
-
# Audio.Contributor https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Contributors
|
13
|
-
class AudioContributor
|
14
|
-
include Comparable
|
15
|
-
extend Creatable
|
16
|
-
|
17
|
-
attr_reader :artist_id, :name, :role, :role_id
|
18
|
-
|
19
|
-
def initialize(artist_id, name, role, role_id)
|
20
|
-
@artist_id = artist_id
|
21
|
-
@name = name
|
22
|
-
@role = role
|
23
|
-
@role_id = role_id
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# Audio.Album.ReleaseType https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Album.ReleaseType
|
28
|
-
module AudioAlbumReleaseType
|
29
|
-
extend Iterable
|
30
|
-
|
31
|
-
ALBUM = 'album'
|
32
|
-
SINGLE = 'single'
|
33
|
-
end
|
34
|
-
|
35
|
-
# Audio.Details.Base https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Base
|
36
|
-
module AudioDetailsBase
|
37
|
-
include Media::MediaDetailsBase
|
38
|
-
|
39
|
-
attr_reader :art, :date_added, :genre
|
40
|
-
|
41
|
-
def audio_details_base_by_hash(hash)
|
42
|
-
audio_details_base(Types::Media::MediaArtwork.create(hash['art']), hash['date_added'], hash['genre'],
|
43
|
-
*Creatable.hash_to_arr(hash, %w[fan_art thumbnail label]))
|
44
|
-
end
|
45
|
-
|
46
|
-
def audio_details_base(art, date_added, genre, fan_art, thumbnail, label)
|
47
|
-
@art = art
|
48
|
-
@date_added = date_added
|
49
|
-
@genre = genre
|
50
|
-
media_details_base(fan_art, thumbnail, label)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# Audio.Details.Media https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Media
|
55
|
-
module AudioDetailsMedia
|
56
|
-
include AudioDetailsBase
|
57
|
-
|
58
|
-
attr_reader :artist, :artist_id, :display_artist, :musicbrainz_album_artist_id, :original_date, :rating,
|
59
|
-
:release_date, :sort_artist, :title, :user_rating, :votes, :year
|
60
|
-
|
61
|
-
def audio_details_media_by_hash(hash)
|
62
|
-
audio_details_media(hash['artist'], hash['artistid'], hash['displayartist'], hash['musicbrainzalbumartistid'],
|
63
|
-
hash['originaldate'], hash['rating'], hash['releasedate'], hash['sortartist'],
|
64
|
-
hash['title'], hash['userrating'], hash['votes'], hash['year'],
|
65
|
-
*Creatable.hash_to_arr(hash, %w[art date_added genre fan_art thumbnail label]))
|
66
|
-
end
|
67
|
-
|
68
|
-
def audio_details_media(artist, artist_id, display_artist, musicbrainz_album_artist_id, original_date,
|
69
|
-
rating, release_date, sort_artist, title, user_rating, votes, year,
|
70
|
-
art, date_added, genre, fan_art, thumbnail, label)
|
71
|
-
@artist = artist
|
72
|
-
@artist_id = artist_id
|
73
|
-
@display_artist = display_artist
|
74
|
-
@musicbrainz_album_artist_id = musicbrainz_album_artist_id
|
75
|
-
@original_date = original_date
|
76
|
-
@rating = rating
|
77
|
-
@release_date = release_date
|
78
|
-
@sort_artist = sort_artist
|
79
|
-
@title = title
|
80
|
-
@user_rating = user_rating
|
81
|
-
@votes = votes
|
82
|
-
@year = year
|
83
|
-
audio_details_base(art, date_added, genre, fan_art, thumbnail, label)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|