kodi_client 0.5.7 → 0.6.0
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/global_types/files_types.rb +82 -0
- data/lib/kodi_client/global_types/list_types.rb +159 -3
- data/lib/kodi_client/global_types/video_types.rb +2 -0
- data/lib/kodi_client/method/files.rb +89 -0
- data/lib/kodi_client.rb +3 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5686743b785e5b591798992689064cec6c1e0d48a54721b97d9d28ae5a97ded3
|
4
|
+
data.tar.gz: fc7516af1d65c10ef63897253979bdb67b8d74f6f11bb74c959ccc942f8c026e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed6fbc05813a0f0a606c08c2e18606603af576e06f4af5941912097b477ad0a622a5ea7f47c7ce52062188b38522d60522337a06261d23f6894f5e1fbb6480c6
|
7
|
+
data.tar.gz: fb200b6342ff5a29d291d60e8c8e61d53de6012bcc5b29058e16ae2eee8d3df9583ed7e8f6f78a72a2da02481d74e9e48d6dbc945dbad73ed85526e711220532
|
data/README.md
CHANGED
data/kodi_client.gemspec
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'kodi_client'
|
5
|
-
spec.version = '0.
|
5
|
+
spec.version = '0.6.0'
|
6
6
|
spec.authors = ['Christian Feier']
|
7
7
|
spec.email = ['christian.feier@gmail.com']
|
8
8
|
|
9
9
|
spec.summary = 'A work-in-progress client for Kodi JSON API v2.'
|
10
|
-
spec.description = 'A client for the Kodi JSON API v12, currently implemented methods are
|
11
|
-
'
|
10
|
+
spec.description = 'A client for the Kodi JSON API v12, currently implemented methods are Addons, Application, '\
|
11
|
+
'Favourites, Files, GUI, Input, Player, Profiles and System (more will be added with the time). '\
|
12
12
|
'For more information how to use it and how to activate Remote Control in Kodi, '\
|
13
13
|
'please check the github page https://github.com/cfe86/RubyKodiClient'
|
14
14
|
spec.homepage = 'https://github.com/cfe86/RubyKodiClient'
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
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
|
+
module KodiClient
|
9
|
+
module Types
|
10
|
+
module Files
|
11
|
+
|
12
|
+
# Files.Media https://kodi.wiki/view/JSON-RPC_API/v12#Files.Media
|
13
|
+
module Media
|
14
|
+
extend Iterable
|
15
|
+
|
16
|
+
VIDEO = 'video'
|
17
|
+
MUSIC = 'music'
|
18
|
+
PICTURES = 'pictures'
|
19
|
+
FILES = 'files'
|
20
|
+
PROGRAMS = 'programs'
|
21
|
+
end
|
22
|
+
|
23
|
+
# return value for GetDirectory
|
24
|
+
class GetDirectoryReturned
|
25
|
+
include Comparable
|
26
|
+
extend Creatable
|
27
|
+
|
28
|
+
attr_reader :files, :limits
|
29
|
+
|
30
|
+
def self.create(hash)
|
31
|
+
return nil if hash.nil?
|
32
|
+
|
33
|
+
files = Types::List::ListItemFile.create_list(hash['files'])
|
34
|
+
limits = Types::List::ListLimitsReturned.create(hash['limits'])
|
35
|
+
|
36
|
+
new(files, limits)
|
37
|
+
end
|
38
|
+
|
39
|
+
def initialize(files, limits)
|
40
|
+
@files = files
|
41
|
+
@limits = limits
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# return value for GetSources
|
46
|
+
class GetSourcesReturned
|
47
|
+
include Comparable
|
48
|
+
extend Creatable
|
49
|
+
|
50
|
+
attr_reader :sources, :limits
|
51
|
+
|
52
|
+
def self.create(hash)
|
53
|
+
return nil if hash.nil?
|
54
|
+
|
55
|
+
sources = Types::List::FileLabel.create_list(hash['sources'])
|
56
|
+
limits = Types::List::ListLimitsReturned.create(hash['limits'])
|
57
|
+
|
58
|
+
new(sources, limits)
|
59
|
+
end
|
60
|
+
|
61
|
+
def initialize(sources, limits)
|
62
|
+
@sources = sources
|
63
|
+
@limits = limits
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# return value for GetPrepareDownload
|
68
|
+
class PrepareDownloadReturned
|
69
|
+
include Comparable
|
70
|
+
extend Creatable
|
71
|
+
|
72
|
+
attr_reader :details, :mode, :protocol
|
73
|
+
|
74
|
+
def initialize(details, mode, protocol)
|
75
|
+
@details = details
|
76
|
+
@mode = mode
|
77
|
+
@protocol = protocol
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -153,6 +153,95 @@ module KodiClient
|
|
153
153
|
YEAR = 'year'
|
154
154
|
end
|
155
155
|
|
156
|
+
# List.Fields.Files https://kodi.wiki/view/JSON-RPC_API/v12#List.Fields.Files
|
157
|
+
module ListFieldFiles
|
158
|
+
extend Iterable
|
159
|
+
|
160
|
+
ALBUM = 'album'
|
161
|
+
ALBUMARTIST = 'albumartist'
|
162
|
+
ALBUMARTISTID = 'albumartistid'
|
163
|
+
ALBUMID = 'albumid'
|
164
|
+
ALBUMLABEL = 'albumlabel'
|
165
|
+
ART = 'art'
|
166
|
+
ARTIST = 'artist'
|
167
|
+
ARTISTID = 'artistid'
|
168
|
+
CAST = 'cast'
|
169
|
+
COMMENT = 'comment'
|
170
|
+
COUNTRY = 'country'
|
171
|
+
DATEADDED = 'dateadded'
|
172
|
+
DESCRIPTION = 'description'
|
173
|
+
DIRECTOR = 'director'
|
174
|
+
DISC = 'disc'
|
175
|
+
DISPLAYARTIST = 'displayartist'
|
176
|
+
DURATION = 'duration'
|
177
|
+
EPISODE = 'episode'
|
178
|
+
EPISODEGUIDE = 'episodeguide'
|
179
|
+
FANART = 'fanart'
|
180
|
+
FILE = 'file'
|
181
|
+
FIRSTAIRED = 'firstaired'
|
182
|
+
GENRE = 'genre'
|
183
|
+
GENREID = 'genreid'
|
184
|
+
IMDBNUMBER = 'imdbnumber'
|
185
|
+
LASTMODIFIED = 'lastmodified'
|
186
|
+
LASTPLAYED = 'lastplayed'
|
187
|
+
LYRICS = 'lyrics'
|
188
|
+
MIMETYPE = 'mimetype'
|
189
|
+
MOOD = 'mood'
|
190
|
+
MPAA = 'mpaa'
|
191
|
+
MUSICBRAINZALBUMARTISTID = 'musicbrainzalbumartistid'
|
192
|
+
MUSICBRAINZALBUMID = 'musicbrainzalbumid'
|
193
|
+
MUSICBRAINZARTISTID = 'musicbrainzartistid'
|
194
|
+
MUSICBRAINZTRACKID = 'musicbrainztrackid'
|
195
|
+
ORIGINALTITLE = 'originaltitle'
|
196
|
+
PLAYCOUNT = 'playcount'
|
197
|
+
PLOT = 'plot'
|
198
|
+
PLOTOUTLINE = 'plotoutline'
|
199
|
+
PREMIERED = 'premiered'
|
200
|
+
PRODUCTIONCODE = 'productioncode'
|
201
|
+
RATING = 'rating'
|
202
|
+
RESUME = 'resume'
|
203
|
+
RUNTIME = 'runtime'
|
204
|
+
SEASON = 'season'
|
205
|
+
SET = 'set'
|
206
|
+
SETID = 'setid'
|
207
|
+
SHOWLINK = 'showlink'
|
208
|
+
SHOWTITLE = 'showtitle'
|
209
|
+
SIZE = 'size'
|
210
|
+
SORTTITLE = 'sorttitle'
|
211
|
+
SPECIALSORTEPISODE = 'specialsortepisode'
|
212
|
+
SPECIALSORTSEASON = 'specialsortseason'
|
213
|
+
STREAMDETAILS = 'streamdetails'
|
214
|
+
STUDIO = 'studio'
|
215
|
+
STYLE = 'style'
|
216
|
+
TAG = 'tag'
|
217
|
+
TAGLINE = 'tagline'
|
218
|
+
THEME = 'theme'
|
219
|
+
THUMBNAIL = 'thumbnail'
|
220
|
+
TITLE = 'title'
|
221
|
+
TOP250 = 'top250'
|
222
|
+
TRACK = 'track'
|
223
|
+
TRAILER = 'trailer'
|
224
|
+
TVSHOWID = 'tvshowid'
|
225
|
+
UNIQUEID = 'uniqueid'
|
226
|
+
VOTES = 'votes'
|
227
|
+
WATCHEDEPISODES = 'watchedepisodes'
|
228
|
+
WRITER = 'writer'
|
229
|
+
YEAR = 'year'
|
230
|
+
end
|
231
|
+
|
232
|
+
# File/Label tuple
|
233
|
+
class FileLabel
|
234
|
+
include Comparable
|
235
|
+
extend Creatable
|
236
|
+
|
237
|
+
attr_reader :file, :label
|
238
|
+
|
239
|
+
def initialize(file, label)
|
240
|
+
@file = file
|
241
|
+
@label = label
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
156
245
|
# List.Item.Base https://kodi.wiki/view/JSON-RPC_API/v12#List.Item.Base
|
157
246
|
module ListItemBase
|
158
247
|
include Video::VideoDetailsFile
|
@@ -299,7 +388,7 @@ module KodiClient
|
|
299
388
|
stream_details = Types::Video::Streams.create(hash['streamdetails'])
|
300
389
|
art = Types::Media::MediaArtwork.create(hash['art'])
|
301
390
|
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
|
391
|
+
new(*Creatable.hash_to_arr(hash, %w[channel channel_number channel_type end_time hidden locked start_time
|
303
392
|
sub_channel_number album album_artist album_artist_id album_id
|
304
393
|
album_release_type album_status bit_rate bpm]), cast,
|
305
394
|
hash['channels'], hash['comment'], hash['compilation'], contributors,
|
@@ -356,9 +445,76 @@ module KodiClient
|
|
356
445
|
fan_art, thumbnail, label, artist, artist_id, display_artist, musicbrainz_album_artist_id,
|
357
446
|
rating, sort_artist, user_rating, year, genre)
|
358
447
|
end
|
448
|
+
end
|
449
|
+
|
450
|
+
# List.Item.File https://kodi.wiki/view/JSON-RPC_API/v12#List.Item.File
|
451
|
+
class ListItemFile
|
452
|
+
include ListItemBase
|
453
|
+
include Comparable
|
454
|
+
extend Creatable
|
455
|
+
|
456
|
+
attr_reader :file, :file_type, :last_modified, :mime_type, :size
|
457
|
+
|
458
|
+
def self.create(hash)
|
459
|
+
return nil if hash.nil?
|
460
|
+
|
461
|
+
cast = Types::Video::VideoCast.create_list(hash['cast'])
|
462
|
+
contributors = Types::Audio::AudioContributor.create_list(hash['contributors'])
|
463
|
+
resume = Types::Video::VideoResume.create(hash['resume'])
|
464
|
+
stream_details = Types::Video::Streams.create(hash['streamdetails'])
|
465
|
+
art = Types::Media::MediaArtwork.create(hash['art'])
|
466
|
+
hash['type'] = 'unknown' if hash['type'].nil?
|
467
|
+
new(*Creatable.hash_to_arr(hash, %w[file_type last_modified mime_type size]),
|
468
|
+
*Creatable.hash_to_arr(hash, %w[album album_artist album_artist_id album_id
|
469
|
+
album_release_type album_status bit_rate bpm]), cast,
|
470
|
+
hash['channels'], hash['comment'], hash['compilation'], contributors,
|
471
|
+
*Creatable.hash_to_arr(hash, %w[country description disc disc_title display_composer
|
472
|
+
display_conductor display_lyricist display_orchestra duration
|
473
|
+
dyn_path episode episode_guide first_aired id imdb_number
|
474
|
+
is_box_set lyrics media_path mood mpaa musicbrainz_artist_id
|
475
|
+
musicbrainz_track_id original_date original_title plot_outline
|
476
|
+
premiered production_code release_date release_type sample_rate
|
477
|
+
season set set_id show_link show_title sort_title
|
478
|
+
special_sort_episode special_sort_season studio style tag
|
479
|
+
tag_line theme top250 total_discs track trailer tv_show_id
|
480
|
+
type unique_id votes watched_episodes writer director]),
|
481
|
+
resume, hash['runtime'], stream_details,
|
482
|
+
*Creatable.hash_to_arr(hash, %w[date_added file last_played plot title]), art,
|
483
|
+
*Creatable.hash_to_arr(hash, %w[play_count fan_art thumbnail label artist artist_id
|
484
|
+
display_artist musicbrainz_album_artist_id rating sort_artist
|
485
|
+
user_rating year genre]))
|
486
|
+
end
|
359
487
|
|
360
|
-
def
|
361
|
-
|
488
|
+
def initialize(file_type, last_modified, mime_type, size,
|
489
|
+
album, album_artist, album_artist_id, album_id, album_release_type, album_status, bit_rate,
|
490
|
+
bpm, cast, channels, comment, compilation, contributors, country, description, disc,
|
491
|
+
disc_title, display_composer, display_conductor, display_lyricist, display_orchestra,
|
492
|
+
duration, dyn_path, episode, episode_guide, first_aired, id, imdb_number, is_box_set,
|
493
|
+
lyrics, media_path, mood, mpaa, musicbrainz_artist_id, musicbrainz_track_id, original_date,
|
494
|
+
original_title, plot_outline, premiered, production_code, release_date, release_type,
|
495
|
+
sample_rate, season, set, set_id, show_link, show_title, sort_title, special_sort_episode,
|
496
|
+
special_sort_season, studio, style, tag, tag_line, theme, top250, total_discs, track,
|
497
|
+
trailer, tv_show_id, type, unique_id, votes, watched_episodes, writer, director, resume,
|
498
|
+
runtime, stream_details, date_added, file, last_played, plot, title, art, play_count,
|
499
|
+
fan_art, thumbnail, label, artist, artist_id, display_artist, musicbrainz_album_artist_id,
|
500
|
+
rating, sort_artist, user_rating, year, genre)
|
501
|
+
@file = file
|
502
|
+
@file_type = file_type
|
503
|
+
@last_modified = last_modified
|
504
|
+
@mime_type = mime_type
|
505
|
+
@size = size
|
506
|
+
list_item_base(album, album_artist, album_artist_id, album_id, album_release_type, album_status, bit_rate,
|
507
|
+
bpm, cast, channels, comment, compilation, contributors, country, description, disc,
|
508
|
+
disc_title, display_composer, display_conductor, display_lyricist, display_orchestra,
|
509
|
+
duration, dyn_path, episode, episode_guide, first_aired, id, imdb_number, is_box_set,
|
510
|
+
lyrics, media_path, mood, mpaa, musicbrainz_artist_id, musicbrainz_track_id, original_date,
|
511
|
+
original_title, plot_outline, premiered, production_code, release_date, release_type,
|
512
|
+
sample_rate, season, set, set_id, show_link, show_title, sort_title, special_sort_episode,
|
513
|
+
special_sort_season, studio, style, tag, tag_line, theme, top250, total_discs, track,
|
514
|
+
trailer, tv_show_id, type, unique_id, votes, watched_episodes, writer, director, resume,
|
515
|
+
runtime, stream_details, date_added, file, last_played, plot, title, art, play_count,
|
516
|
+
fan_art, thumbnail, label, artist, artist_id, display_artist, musicbrainz_album_artist_id,
|
517
|
+
rating, sort_artist, user_rating, year, genre)
|
362
518
|
end
|
363
519
|
end
|
364
520
|
|
@@ -126,6 +126,8 @@ module KodiClient
|
|
126
126
|
attr_reader :audio, :subtitle, :video
|
127
127
|
|
128
128
|
def self.create(hash)
|
129
|
+
return nil if hash.nil?
|
130
|
+
|
129
131
|
audio = Types::Player::AudioStream.create_list(hash['audio'])
|
130
132
|
subtitle = Types::Player::Subtitle.create_list(hash['subtitle'])
|
131
133
|
video = Types::Player::VideoStream.create_list(hash['video'])
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'kodi_client/kodi_module'
|
4
|
+
require 'kodi_client/global_types/files_types'
|
5
|
+
require 'kodi_client/global_types/list_types'
|
6
|
+
|
7
|
+
module KodiClient
|
8
|
+
module Modules
|
9
|
+
# contains all Kodi Application methods
|
10
|
+
class Files < KodiModule
|
11
|
+
|
12
|
+
GET_DIRECTORY = 'Files.GetDirectory'
|
13
|
+
GET_FILE_DETAILS = 'Files.GetFileDetails'
|
14
|
+
GET_SOURCES = 'Files.GetSources'
|
15
|
+
PREPARE_DOWNLOAD = 'Files.PrepareDownload'
|
16
|
+
SET_FILE_DETAILS = 'Files.SetFileDetails'
|
17
|
+
|
18
|
+
def get_directory(directory, media = Types::Files::Media::FILES,
|
19
|
+
properties = Types::List::ListFieldFiles.all_properties,
|
20
|
+
sort = Types::List::ListSort.new,
|
21
|
+
limits = Types::List::ListLimits.new(0, 50), kodi_id = 1)
|
22
|
+
request = KodiRequest.new(kodi_id, GET_DIRECTORY,
|
23
|
+
{
|
24
|
+
'directory' => directory,
|
25
|
+
'media' => media,
|
26
|
+
'properties' => properties,
|
27
|
+
'sort' => { 'ignorearticle' => sort.ignore_article, 'method' => sort.method,
|
28
|
+
'order' => sort.order,
|
29
|
+
'useartistsortname' => sort.use_artist_sort_name },
|
30
|
+
'limits' => { 'start' => limits.list_start, 'end' => limits.list_end }
|
31
|
+
})
|
32
|
+
json = invoke_api(request)
|
33
|
+
result = KodiClient::Types::Files::GetDirectoryReturned.create(json['result'])
|
34
|
+
json['result'] = result
|
35
|
+
KodiResponse.new(json)
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_file_details(file, media = Types::Files::Media::FILES,
|
39
|
+
properties = Types::List::ListFieldFiles.all_properties, kodi_id = 1)
|
40
|
+
request = KodiRequest.new(kodi_id, GET_FILE_DETAILS,
|
41
|
+
{
|
42
|
+
'file' => file,
|
43
|
+
'media' => media,
|
44
|
+
'properties' => properties
|
45
|
+
})
|
46
|
+
json = invoke_api(request)
|
47
|
+
result = KodiClient::Types::List::ListItemFile.create(json['result'])
|
48
|
+
json['result'] = result
|
49
|
+
KodiResponse.new(json)
|
50
|
+
end
|
51
|
+
|
52
|
+
def get_sources(media = Types::Files::Media::FILES,
|
53
|
+
sort = Types::List::ListSort.new,
|
54
|
+
limits = Types::List::ListLimits.new(0, 50), kodi_id = 1)
|
55
|
+
request = KodiRequest.new(kodi_id, GET_SOURCES,
|
56
|
+
{
|
57
|
+
'media' => media,
|
58
|
+
'sort' => { 'ignorearticle' => sort.ignore_article, 'method' => sort.method,
|
59
|
+
'order' => sort.order,
|
60
|
+
'useartistsortname' => sort.use_artist_sort_name },
|
61
|
+
'limits' => { 'start' => limits.list_start, 'end' => limits.list_end }
|
62
|
+
})
|
63
|
+
json = invoke_api(request)
|
64
|
+
result = KodiClient::Types::Files::GetSourcesReturned.create(json['result'])
|
65
|
+
json['result'] = result
|
66
|
+
KodiResponse.new(json)
|
67
|
+
end
|
68
|
+
|
69
|
+
def prepare_download(path, kodi_id = 1)
|
70
|
+
request = KodiRequest.new(kodi_id, PREPARE_DOWNLOAD, { 'path' => path })
|
71
|
+
json = invoke_api(request)
|
72
|
+
result = KodiClient::Types::Files::PrepareDownloadReturned.create(json['result'])
|
73
|
+
json['result'] = result
|
74
|
+
KodiResponse.new(json)
|
75
|
+
end
|
76
|
+
|
77
|
+
def set_file_details(file, media = Types::Files::Media::VIDEO, play_count = nil, last_played = nil,
|
78
|
+
resume = nil, kodi_id = 1)
|
79
|
+
params = { 'file' => file, 'media' => media}
|
80
|
+
params['playcount'] = play_count unless play_count.nil?
|
81
|
+
params['lastplayed'] = last_played unless last_played.nil?
|
82
|
+
params['resume'] = resume unless resume.nil?
|
83
|
+
request = KodiRequest.new(kodi_id, SET_FILE_DETAILS, params)
|
84
|
+
json = invoke_api(request)
|
85
|
+
KodiResponse.new(json)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
data/lib/kodi_client.rb
CHANGED
@@ -7,6 +7,7 @@ require 'kodi_client/Chainable'
|
|
7
7
|
require 'kodi_client/method/addons'
|
8
8
|
require 'kodi_client/method/application'
|
9
9
|
require 'kodi_client/method/favourites'
|
10
|
+
require 'kodi_client/method/files'
|
10
11
|
require 'kodi_client/method/gui'
|
11
12
|
require 'kodi_client/method/input'
|
12
13
|
require 'kodi_client/method/player'
|
@@ -22,12 +23,13 @@ module KodiClient
|
|
22
23
|
class Client
|
23
24
|
include Chainable
|
24
25
|
|
25
|
-
attr_reader :addons, :application, :
|
26
|
+
attr_reader :addons, :application, :favourites, :files, :gui, :input, :player, :profiles, :system
|
26
27
|
|
27
28
|
def initialize
|
28
29
|
@addons = KodiClient::Modules::Addons.new
|
29
30
|
@application = KodiClient::Modules::Application.new
|
30
31
|
@favourites = KodiClient::Modules::Favourites.new
|
32
|
+
@files = KodiClient::Modules::Files.new
|
31
33
|
@gui = KodiClient::Modules::GUI.new
|
32
34
|
@input = KodiClient::Modules::Input.new
|
33
35
|
@player = KodiClient::Modules::Player.new
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Feier
|
@@ -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: []
|
@@ -47,6 +47,7 @@ files:
|
|
47
47
|
- lib/kodi_client/global_types/application_types.rb
|
48
48
|
- lib/kodi_client/global_types/audio_types.rb
|
49
49
|
- lib/kodi_client/global_types/favourites_types.rb
|
50
|
+
- lib/kodi_client/global_types/files_types.rb
|
50
51
|
- lib/kodi_client/global_types/global_types.rb
|
51
52
|
- lib/kodi_client/global_types/gui_types.rb
|
52
53
|
- lib/kodi_client/global_types/input_types.rb
|
@@ -62,6 +63,7 @@ files:
|
|
62
63
|
- lib/kodi_client/method/addons.rb
|
63
64
|
- lib/kodi_client/method/application.rb
|
64
65
|
- lib/kodi_client/method/favourites.rb
|
66
|
+
- lib/kodi_client/method/files.rb
|
65
67
|
- lib/kodi_client/method/gui.rb
|
66
68
|
- lib/kodi_client/method/input.rb
|
67
69
|
- lib/kodi_client/method/player.rb
|