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
@@ -0,0 +1,221 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KodiClient
|
4
|
+
module Types
|
5
|
+
module Audio
|
6
|
+
|
7
|
+
# Audio.Contributor https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Contributors
|
8
|
+
class AudioContributor
|
9
|
+
include Comparable
|
10
|
+
extend Creatable
|
11
|
+
|
12
|
+
attr_reader :artist_id, :name, :role, :role_id
|
13
|
+
|
14
|
+
def initialize(artist_id, name, role, role_id)
|
15
|
+
@artist_id = artist_id
|
16
|
+
@name = name
|
17
|
+
@role = role
|
18
|
+
@role_id = role_id
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Audio.Album.ReleaseType https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Album.ReleaseType
|
23
|
+
module AudioAlbumReleaseType
|
24
|
+
extend Iterable
|
25
|
+
|
26
|
+
ALBUM = 'album'
|
27
|
+
SINGLE = 'single'
|
28
|
+
end
|
29
|
+
|
30
|
+
# Audio.Details.Base https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Base
|
31
|
+
module AudioDetailsBase
|
32
|
+
include Media::MediaDetailsBase
|
33
|
+
|
34
|
+
attr_reader :art, :date_added, :genre
|
35
|
+
|
36
|
+
def audio_details_base_mappings
|
37
|
+
mappings = { 'art' => Creatable::CreateMap.new(Types::Media::MediaArtwork) }
|
38
|
+
mappings.merge(media_details_base_mappings)
|
39
|
+
end
|
40
|
+
|
41
|
+
def audio_details_base_by_hash(hash)
|
42
|
+
audio_details_base(*Creatable.hash_to_arr(hash, %w[art date_added genre fan_art thumbnail label]),
|
43
|
+
audio_details_base_mappings)
|
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_mappings
|
62
|
+
audio_details_base_mappings
|
63
|
+
end
|
64
|
+
|
65
|
+
def audio_details_media_by_hash(hash)
|
66
|
+
audio_details_media(*Creatable.hash_to_arr(hash, %w[artist artist_id display_artist
|
67
|
+
musicbrainz_album_artist_id original_date rating
|
68
|
+
release_date sort_artist title user_rating votes year art
|
69
|
+
date_added genre fan_art thumbnail label],
|
70
|
+
audio_details_base_mappings))
|
71
|
+
end
|
72
|
+
|
73
|
+
def audio_details_media(artist, artist_id, display_artist, musicbrainz_album_artist_id, original_date,
|
74
|
+
rating, release_date, sort_artist, title, user_rating, votes, year,
|
75
|
+
art, date_added, genre, fan_art, thumbnail, label)
|
76
|
+
@artist = artist
|
77
|
+
@artist_id = artist_id
|
78
|
+
@display_artist = display_artist
|
79
|
+
@musicbrainz_album_artist_id = musicbrainz_album_artist_id
|
80
|
+
@original_date = original_date
|
81
|
+
@rating = rating
|
82
|
+
@release_date = release_date
|
83
|
+
@sort_artist = sort_artist
|
84
|
+
@title = title
|
85
|
+
@user_rating = user_rating
|
86
|
+
@votes = votes
|
87
|
+
@year = year
|
88
|
+
audio_details_base(art, date_added, genre, fan_art, thumbnail, label)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Audio.Fields.Album https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Fields.Album
|
93
|
+
module AudioFieldsAlbum
|
94
|
+
extend Iterable
|
95
|
+
|
96
|
+
#album id
|
97
|
+
ALBUM_DURATION = 'albumduration'
|
98
|
+
ALBUM_LABEL = 'albumlabel'
|
99
|
+
ALBUM_STATUS = 'albumstatus'
|
100
|
+
ART = 'art'
|
101
|
+
ARTIST = 'artist'
|
102
|
+
ARTIST_ID = 'artistid'
|
103
|
+
COMPILATION = 'compilation'
|
104
|
+
DATE_ADDED = 'dateadded'
|
105
|
+
DATE_MODIFIED = 'datemodified'
|
106
|
+
DATE_NEW = 'datenew'
|
107
|
+
DESCRIPTION = 'description'
|
108
|
+
DISPLAY_ARTIST = 'displayartist'
|
109
|
+
FAN_ART = 'fanart'
|
110
|
+
GENRE = 'genre'
|
111
|
+
IS_BOX_SET = 'isboxset'
|
112
|
+
LAST_PLAYED = 'lastplayed'
|
113
|
+
MOOD = 'mood'
|
114
|
+
MUSICBRAINZ_ALBUM_ARTIST_ID = 'musicbrainzalbumartistid'
|
115
|
+
MUSICBRAINZ_ALBUM_ID = 'musicbrainzalbumid'
|
116
|
+
MUSICBRAINZ_RELEASE_GROUP_ID = 'musicbrainzreleasegroupid'
|
117
|
+
ORIGINAL_DATE = 'originaldate'
|
118
|
+
PLAY_COUNT = 'playcount'
|
119
|
+
RATING = 'rating'
|
120
|
+
RELEASE_DATE = 'releasedate'
|
121
|
+
RELEASE_TYPE = 'releasetype'
|
122
|
+
SONG_GENRES = 'songgenres'
|
123
|
+
SORT_ARTIST = 'sortartist'
|
124
|
+
SOURCE_ID = 'sourceid'
|
125
|
+
STYLE = 'style'
|
126
|
+
THEME = 'theme'
|
127
|
+
THUMBNAIL = 'thumbnail'
|
128
|
+
TITLE = 'title'
|
129
|
+
TOTAL_DISCS = 'totaldiscs'
|
130
|
+
TYPE = 'type'
|
131
|
+
USER_RATING = 'userrating'
|
132
|
+
VOTES = 'votes'
|
133
|
+
YEAR = 'year'
|
134
|
+
end
|
135
|
+
|
136
|
+
# Audio.Details.Genres https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Genres
|
137
|
+
class Genre
|
138
|
+
include Comparable
|
139
|
+
extend Creatable
|
140
|
+
|
141
|
+
attr_reader :genre_id, :title
|
142
|
+
|
143
|
+
def initialize(genre_id, title)
|
144
|
+
@genre_id = genre_id
|
145
|
+
@title = title
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
# Audio.Details.Album https://kodi.wiki/view/JSON-RPC_API/v12#Audio.Details.Album
|
150
|
+
class DetailsAlbum
|
151
|
+
include AudioDetailsMedia
|
152
|
+
include Comparable
|
153
|
+
extend Creatable
|
154
|
+
|
155
|
+
attr_reader :album_duration, :album_id, :album_label, :album_status, :compilation, :date_modified, :date_new,
|
156
|
+
:description, :is_box_set, :last_played, :mood, :musicbrainz_album_id, :musicbrainz_release_group_id,
|
157
|
+
:play_count, :release_type, :song_genres, :source_id, :style, :theme, :total_discs, :type
|
158
|
+
|
159
|
+
fields_to_map %w[album_duration album_id album_label album_status art artist artist_id compilation date_added
|
160
|
+
date_modified date_new description display_artist fan_art genre is_box_set label last_played
|
161
|
+
mood musicbrainz_album_artist_id musicbrainz_album_id musicbrainz_release_group_id
|
162
|
+
original_date play_count rating release_date release_type song_genres sort_artist source_id
|
163
|
+
style theme thumbnail title total_discs type user_rating votes year]
|
164
|
+
|
165
|
+
type_mapping ['songgenres', Genre, true], ['art', Types::Media::MediaArtwork]
|
166
|
+
|
167
|
+
def initialize(album_duration, album_id, album_label, album_status, art, artist, artist_id, compilation,
|
168
|
+
date_added, date_modified, date_new, description, display_artist, fan_art, genre, is_box_set,
|
169
|
+
label, last_played, mood, musicbrainz_album_artist_id, musicbrainz_album_id,
|
170
|
+
musicbrainz_release_group_id, original_date, play_count, rating, release_date, release_type,
|
171
|
+
song_genres, sort_artist, source_id, style, theme, thumbnail, title, total_discs, type,
|
172
|
+
user_rating, votes, year)
|
173
|
+
@album_duration = album_duration
|
174
|
+
@album_id = album_id
|
175
|
+
@album_label = album_label
|
176
|
+
@album_status = album_status
|
177
|
+
@compilation = compilation
|
178
|
+
@date_modified = date_modified
|
179
|
+
@date_new = date_new
|
180
|
+
@description = description
|
181
|
+
@is_box_set = is_box_set
|
182
|
+
@last_played = last_played
|
183
|
+
@mood = mood
|
184
|
+
@musicbrainz_album_id = musicbrainz_album_id
|
185
|
+
@musicbrainz_release_group_id = musicbrainz_release_group_id
|
186
|
+
@play_count = play_count
|
187
|
+
@release_type = release_type
|
188
|
+
@song_genres = song_genres
|
189
|
+
@source_id = source_id
|
190
|
+
@style = style
|
191
|
+
@theme = theme
|
192
|
+
@total_discs = total_discs
|
193
|
+
@type = type
|
194
|
+
audio_details_media(artist, artist_id, display_artist, musicbrainz_album_artist_id, original_date,
|
195
|
+
rating, release_date, sort_artist, title, user_rating, votes, year,
|
196
|
+
art, date_added, genre, fan_art, thumbnail, label)
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
# return type for AudioLibrary.GetAlbums
|
201
|
+
class GetAlbumsReturned
|
202
|
+
include Comparable
|
203
|
+
extend Creatable
|
204
|
+
|
205
|
+
attr_reader :albums, :limits
|
206
|
+
|
207
|
+
def self.lazy_type_mapping
|
208
|
+
{
|
209
|
+
'albums' => Creatable::CreateMap.new(DetailsAlbum, true),
|
210
|
+
'limits' => Creatable::CreateMap.new(List::ListLimitsReturned)
|
211
|
+
}
|
212
|
+
end
|
213
|
+
|
214
|
+
def initialize(albums, limits)
|
215
|
+
@albums = albums
|
216
|
+
@limits = limits
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
@@ -1,10 +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/util/creatable'
|
6
|
-
require 'kodi_client/global_types/list_types'
|
7
|
-
|
8
3
|
module KodiClient
|
9
4
|
module Types
|
10
5
|
module Favourites
|
@@ -54,11 +49,7 @@ module KodiClient
|
|
54
49
|
|
55
50
|
attr_reader :favourites, :limits
|
56
51
|
|
57
|
-
|
58
|
-
favourites = DetailsFavourite.create_list(hash['favourites'])
|
59
|
-
limits = Types::List::ListLimitsReturned.create(hash['limits'])
|
60
|
-
new(favourites, limits)
|
61
|
-
end
|
52
|
+
type_mapping ['favourites', DetailsFavourite, true], ['limits', Types::List::ListLimitsReturned]
|
62
53
|
|
63
54
|
def initialize(favourites, limits)
|
64
55
|
@favourites = favourites
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KodiClient
|
4
|
+
module Types
|
5
|
+
module Files
|
6
|
+
|
7
|
+
# Files.Media https://kodi.wiki/view/JSON-RPC_API/v12#Files.Media
|
8
|
+
module Media
|
9
|
+
extend Iterable
|
10
|
+
|
11
|
+
VIDEO = 'video'
|
12
|
+
MUSIC = 'music'
|
13
|
+
PICTURES = 'pictures'
|
14
|
+
FILES = 'files'
|
15
|
+
PROGRAMS = 'programs'
|
16
|
+
end
|
17
|
+
|
18
|
+
# return value for GetDirectory
|
19
|
+
class GetDirectoryReturned
|
20
|
+
include Comparable
|
21
|
+
extend Creatable
|
22
|
+
|
23
|
+
attr_reader :files, :limits
|
24
|
+
|
25
|
+
type_mapping ['files', List::ListItemFile, true], ['limits', List::ListLimitsReturned]
|
26
|
+
|
27
|
+
def initialize(files, limits)
|
28
|
+
@files = files
|
29
|
+
@limits = limits
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# return value for GetSources
|
34
|
+
class GetSourcesReturned
|
35
|
+
include Comparable
|
36
|
+
extend Creatable
|
37
|
+
|
38
|
+
attr_reader :sources, :limits
|
39
|
+
|
40
|
+
type_mapping ['sources', List::FileLabel, true], ['limits', List::ListLimitsReturned]
|
41
|
+
|
42
|
+
def initialize(sources, limits)
|
43
|
+
@sources = sources
|
44
|
+
@limits = limits
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# return value for GetPrepareDownload
|
49
|
+
class PrepareDownloadReturned
|
50
|
+
include Comparable
|
51
|
+
extend Creatable
|
52
|
+
|
53
|
+
attr_reader :details, :mode, :protocol
|
54
|
+
|
55
|
+
def initialize(details, mode, protocol)
|
56
|
+
@details = details
|
57
|
+
@mode = mode
|
58
|
+
@protocol = protocol
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -1,10 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'kodi_client/global_types/global_types'
|
4
|
-
require 'kodi_client/util/comparable'
|
5
|
-
require 'kodi_client/util/iterable'
|
6
|
-
require 'kodi_client/util/creatable'
|
7
|
-
|
8
3
|
module KodiClient
|
9
4
|
module Types
|
10
5
|
module GUI
|
@@ -168,15 +163,8 @@ module KodiClient
|
|
168
163
|
|
169
164
|
attr_reader :current_control, :current_window, :fullscreen, :skin, :stereoscopic_mode
|
170
165
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
current_control = Global::IdLabel.create(hash['currentcontrol'])
|
175
|
-
current_window = Global::IdLabel.create(hash['currentwindow'])
|
176
|
-
skin = Global::IdName.create(hash['skin'])
|
177
|
-
stereoscopic_mode = StereoscopyMode.create(hash['stereoscopicmode'])
|
178
|
-
new(current_control, current_window, hash['fullscreen'], skin, stereoscopic_mode)
|
179
|
-
end
|
166
|
+
type_mapping ['currentcontrol', Global::IdLabel], ['currentwindow', Global::IdLabel],
|
167
|
+
['skin', Global::IdName], ['stereoscopicmode', StereoscopyMode]
|
180
168
|
|
181
169
|
def initialize(current_control, current_window, fullscreen, skin, stereoscopic_mode)
|
182
170
|
@current_control = current_control
|
@@ -9,8 +9,12 @@ module KodiClient
|
|
9
9
|
|
10
10
|
attr_reader :label
|
11
11
|
|
12
|
+
def item_details_base_mappings
|
13
|
+
{}
|
14
|
+
end
|
15
|
+
|
12
16
|
def item_details_base_by_hash(hash)
|
13
|
-
item_details_base(hash[
|
17
|
+
item_details_base(*Creatable.hash_to_arr(hash, %w[label], item_details_base_mappings))
|
14
18
|
end
|
15
19
|
|
16
20
|
def item_details_base(label)
|