kodi_client 0.5.6 → 0.6.2

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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -1
  3. data/kodi_client.gemspec +3 -3
  4. data/lib/kodi_client/Chainable.rb +4 -1
  5. data/lib/kodi_client/global_types/addon_types.rb +50 -52
  6. data/lib/kodi_client/global_types/application_types.rb +21 -23
  7. data/lib/kodi_client/global_types/audio_types.rb +179 -29
  8. data/lib/kodi_client/global_types/favourites_types.rb +14 -17
  9. data/lib/kodi_client/global_types/files_types.rb +68 -0
  10. data/lib/kodi_client/global_types/global_types.rb +18 -24
  11. data/lib/kodi_client/global_types/gui_types.rb +15 -16
  12. data/lib/kodi_client/global_types/item_types.rb +10 -2
  13. data/lib/kodi_client/global_types/list_types.rb +326 -98
  14. data/lib/kodi_client/global_types/media_types.rb +21 -13
  15. data/lib/kodi_client/global_types/player_type.rb +110 -110
  16. data/lib/kodi_client/global_types/profiles_types.rb +14 -14
  17. data/lib/kodi_client/global_types/system_types.rb +7 -9
  18. data/lib/kodi_client/global_types/video_types.rb +80 -43
  19. data/lib/kodi_client/method/addons.rb +7 -19
  20. data/lib/kodi_client/method/application.rb +1 -1
  21. data/lib/kodi_client/method/audio_library.rb +49 -0
  22. data/lib/kodi_client/method/favourites.rb +1 -1
  23. data/lib/kodi_client/method/files.rb +89 -0
  24. data/lib/kodi_client/method/gui.rb +2 -2
  25. data/lib/kodi_client/method/player.rb +6 -6
  26. data/lib/kodi_client/method/profiles.rb +2 -2
  27. data/lib/kodi_client/method/system.rb +1 -1
  28. data/lib/kodi_client/util/comparable.rb +4 -1
  29. data/lib/kodi_client/util/creatable.rb +106 -0
  30. data/lib/kodi_client.rb +10 -10
  31. metadata +9 -5
@@ -28,42 +28,30 @@ module KodiClient
28
28
  'installed' => installed.nil? || !installed ? 'all' : 'installed'
29
29
  })
30
30
  json = invoke_api(request)
31
-
32
- result = json['result'].nil? ? nil : Types::Addons::Addons.new(json['result'])
31
+ result = Types::Addons::Addons.create(json['result'])
33
32
  json['result'] = result
34
33
  KodiResponse.new(json)
35
34
  end
36
35
 
37
36
  def get_addon_details(addon_id = nil, properties = [], kodi_id = 1)
38
- request = KodiRequest.new(kodi_id, GET_ADDON_DETAILS,
39
- {
40
- 'addonid' => addon_id,
41
- 'properties' => properties
42
- })
37
+ request = KodiRequest.new(kodi_id, GET_ADDON_DETAILS, { 'addonid' => addon_id,
38
+ 'properties' => properties })
43
39
  json = invoke_api(request)
44
40
 
45
- result = json['result'].nil? ? nil : Types::Addons::Addon.new(json['result'])
41
+ result = Types::Addons::Addon.create(json['result'])
46
42
  json['result'] = result
47
43
  KodiResponse.new(json)
48
44
  end
49
45
 
50
46
  def execute_addon(addon_id = nil, params = '', wait = false, kodi_id = 1)
51
- request = KodiRequest.new(kodi_id, EXECUTE_ADDON,
52
- {
53
- 'addonid' => addon_id,
54
- 'params' => params,
55
- 'wait' => wait
56
- })
47
+ request = KodiRequest.new(kodi_id, EXECUTE_ADDON, { 'addonid' => addon_id, 'params' => params,
48
+ 'wait' => wait })
57
49
  json = invoke_api(request)
58
50
  KodiResponse.new(json)
59
51
  end
60
52
 
61
53
  def set_addon_enabled(addon_id = nil, enabled = Types::Global::Toggle::TOGGLE, kodi_id = 1)
62
- request = KodiRequest.new(kodi_id, SET_ADDON_ENABLED,
63
- {
64
- 'addonid' => addon_id,
65
- 'enabled' => enabled
66
- })
54
+ request = KodiRequest.new(kodi_id, SET_ADDON_ENABLED, { 'addonid' => addon_id, 'enabled' => enabled })
67
55
  json = invoke_api(request)
68
56
  KodiResponse.new(json)
69
57
  end
@@ -28,7 +28,7 @@ module KodiClient
28
28
  def get_properties(properties = Types::Application::PropertyName.all_properties, kodi_id = 1)
29
29
  request = KodiRequest.new(kodi_id, GET_PROPERTIES, { 'properties' => properties })
30
30
  json = invoke_api(request)
31
- result = json['result'].nil? ? nil : Types::Application::PropertyValue.new(json['result'])
31
+ result = Types::Application::PropertyValue.create(json['result'])
32
32
  json['result'] = result
33
33
  KodiResponse.new(json)
34
34
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'kodi_client/kodi_module'
4
+ require 'kodi_client/global_types/application_types'
5
+
6
+ module KodiClient
7
+ module Modules
8
+ # contains all Kodi Application methods
9
+ class AudioLibrary < KodiModule
10
+
11
+ CLEAN = 'AudioLibrary.Clean'
12
+ EXPORT = 'AudioLibrary.Export'
13
+ GET_ALBUM_DETAILS = 'AudioLibrary.GetAlbumDetails'
14
+ GET_ALBUMS = 'AudioLibrary.GetAlbums'
15
+
16
+ def clean(show_dialogs = true, kodi_id = 1)
17
+ request = KodiRequest.new(kodi_id, CLEAN, { 'showdialogs' => show_dialogs })
18
+ json = invoke_api(request)
19
+ KodiResponse.new(json)
20
+ end
21
+
22
+ def export(path, kodi_id = 1)
23
+ request = KodiRequest.new(kodi_id, EXPORT, { 'options' => { 'path' => path } })
24
+ json = invoke_api(request)
25
+ KodiResponse.new(json)
26
+ end
27
+
28
+ def get_album_details(album_id, properties = Types::Audio::AudioFieldsAlbum.all_properties, kodi_id = 1)
29
+ request = KodiRequest.new(kodi_id, GET_ALBUM_DETAILS, { 'albumid' => album_id, 'properties' => properties })
30
+ json = invoke_api(request)
31
+ KodiResponse.new(json)
32
+ end
33
+
34
+ def get_albums(properties = Types::Audio::AudioFieldsAlbum.all_properties,
35
+ limits = Types::List::ListLimits.new(0, 50),
36
+ sort = Types::List::ListSort.new, include_singles = false, all_roles = false, kodi_id = 1)
37
+ request = KodiRequest.new(kodi_id, GET_ALBUMS,
38
+ { 'properties' => properties,
39
+ 'limits' => { 'start' => limits.list_start, 'end' => limits.list_end },
40
+ 'sort' => { 'ignorearticle' => sort.ignore_article, 'method' => sort.method,
41
+ 'order' => sort.order,
42
+ 'useartistsortname' => sort.use_artist_sort_name },
43
+ 'includesingles' => include_singles, 'allroles' => all_roles })
44
+ json = invoke_api(request)
45
+ KodiResponse.new(json)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -28,7 +28,7 @@ module KodiClient
28
28
  params['type'] = type unless type.nil?
29
29
  request = KodiRequest.new(kodi_id, GET_FAVOURITES, params)
30
30
  json = invoke_api(request)
31
- result = json['result'].nil? ? nil : Types::Favourites::GetFavouriteReturned.new(json['result'])
31
+ result = Types::Favourites::GetFavouriteReturned.create(json['result'])
32
32
  json['result'] = result
33
33
  KodiResponse.new(json)
34
34
  end
@@ -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
@@ -24,7 +24,7 @@ module KodiClient
24
24
  def get_properties(properties = Types::GUI::PropertyName.all_properties, kodi_id = 1)
25
25
  request = KodiRequest.new(kodi_id, GET_PROPERTIES, { 'properties' => properties })
26
26
  json = invoke_api(request)
27
- result = json['result'].nil? ? nil : KodiClient::Types::GUI::PropertyValue.new(json['result'])
27
+ result = KodiClient::Types::GUI::PropertyValue.create(json['result'])
28
28
  json['result'] = result
29
29
  KodiResponse.new(json)
30
30
  end
@@ -32,7 +32,7 @@ module KodiClient
32
32
  def get_stereoscopic_modes(kodi_id = 1)
33
33
  request = KodiRequest.new(kodi_id, GET_STEREOSCOPIC_MODES, {})
34
34
  json = invoke_api(request)
35
- result = json['result'].nil? ? nil : json['result']['stereoscopicmodes'].map { |it| Types::GUI::StereoscopyMode.new(it) }
35
+ result = Types::GUI::StereoscopyMode.create_list(json['result']['stereoscopicmodes'])
36
36
  json['result'] = result
37
37
  KodiResponse.new(json)
38
38
  end
@@ -41,7 +41,7 @@ module KodiClient
41
41
  def get_active_players(kodi_id = 1)
42
42
  request = KodiRequest.new(kodi_id, GET_ACTIVE_PLAYER, {})
43
43
  json = invoke_api(request)
44
- result = json['result'].nil? ? nil : json['result'].map { |it| Types::Player::Player.new(it) }
44
+ result = Types::Player::Player.create_list(json['result'])
45
45
  json['result'] = result
46
46
  KodiResponse.new(json)
47
47
  end
@@ -57,7 +57,7 @@ module KodiClient
57
57
  request = KodiRequest.new(kodi_id, GET_ITEM, { 'playerid' => player_id,
58
58
  'properties' => properties })
59
59
  json = invoke_api(request)
60
- result = Types::List::ListItemAll.new(json['result']['item'])
60
+ result = Types::List::ListItemAll.create(json['result']['item'])
61
61
  json['result'] = result
62
62
  KodiResponse.new(json)
63
63
  end
@@ -65,7 +65,7 @@ module KodiClient
65
65
  def get_players(media = Types::Media::MediaType::ALL, kodi_id = 1)
66
66
  request = KodiRequest.new(kodi_id, GET_PLAYERS, { 'media' => media })
67
67
  json = invoke_api(request)
68
- result = json['result'].map { |it| Types::Player::Player.new(it) }
68
+ result = Types::Player::Player.create_list(json['result'])
69
69
  json['result'] = result
70
70
  KodiResponse.new(json)
71
71
  end
@@ -74,7 +74,7 @@ module KodiClient
74
74
  request = KodiRequest.new(kodi_id, GET_PROPERTIES, { 'playerid' => player_id,
75
75
  'properties' => properties })
76
76
  json = invoke_api(request)
77
- result = Types::Player::PropertyValue.new(json['result'])
77
+ result = Types::Player::PropertyValue.create(json['result'])
78
78
  json['result'] = result
79
79
  KodiResponse.new(json)
80
80
  end
@@ -82,7 +82,7 @@ module KodiClient
82
82
  def get_view_mode(kodi_id = 1)
83
83
  request = KodiRequest.new(kodi_id, GET_VIEW_MODE, {})
84
84
  json = invoke_api(request)
85
- result = Types::Player::PlayerViewMode.new(json['result'])
85
+ result = Types::Player::PlayerViewMode.create(json['result'])
86
86
  json['result'] = result
87
87
  KodiResponse.new(json)
88
88
  end
@@ -130,7 +130,7 @@ module KodiClient
130
130
  def seek(player_id, value, kodi_id = 1)
131
131
  request = KodiRequest.new(kodi_id, SEEK, { 'playerid' => player_id, 'value' => value })
132
132
  json = invoke_api(request)
133
- result = Types::Player::SeekReturnValue.new(json['result'])
133
+ result = Types::Player::SeekReturned.create(json['result'])
134
134
  json['result'] = result
135
135
  KodiResponse.new(json)
136
136
  end
@@ -15,7 +15,7 @@ module KodiClient
15
15
  def get_current_profile(properties = Types::Profiles::FieldsProfile.all_properties, kodi_id = 1)
16
16
  request = KodiRequest.new(kodi_id, GET_CURRENT_PROFILE, { 'properties' => properties })
17
17
  json = invoke_api(request)
18
- result = json['result'].nil? ? nil : Types::Profiles::DetailsProfile.new(json['result'])
18
+ result = Types::Profiles::DetailsProfile.create(json['result'])
19
19
  json['result'] = result
20
20
  KodiResponse.new(json)
21
21
  end
@@ -30,7 +30,7 @@ module KodiClient
30
30
  'order' => sort.order,
31
31
  'useartistsortname' => sort.use_artist_sort_name } })
32
32
  json = invoke_api(request)
33
- result = json['result'].nil? ? nil : Types::Profiles::GetProfilesReturned.new(json['result'])
33
+ result = Types::Profiles::GetProfilesReturned.create(json['result'])
34
34
  json['result'] = result
35
35
  KodiResponse.new(json)
36
36
  end
@@ -25,7 +25,7 @@ module KodiClient
25
25
  def get_properties(properties = Types::System::PropertyName.all_properties, kodi_id = 1)
26
26
  request = KodiRequest.new(kodi_id, GET_PROPERTIES, { 'properties' => properties })
27
27
  json = invoke_api(request)
28
- result = json['result'].nil? ? nil : Types::System::PropertyValue.new(json['result'])
28
+ result = Types::System::PropertyValue.create(json['result'])
29
29
  json['result'] = result
30
30
  KodiResponse.new(json)
31
31
  end
@@ -4,7 +4,6 @@ module KodiClient
4
4
 
5
5
  # offers compare methods
6
6
  module Comparable
7
-
8
7
  def compare(obj1, obj2)
9
8
  is_same = true
10
9
  obj1.instance_variables.each do |it|
@@ -13,5 +12,9 @@ module KodiClient
13
12
 
14
13
  is_same
15
14
  end
15
+
16
+ def ==(other)
17
+ compare(self, other)
18
+ end
16
19
  end
17
20
  end
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KodiClient
4
+
5
+ # creates a create and create_list method by hash
6
+ module Creatable
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
+
70
+ def attr_accessor(*args)
71
+ attr_reader(*args)
72
+ attr_writer(*args)
73
+ end
74
+
75
+ def attr_reader(*args)
76
+ @kodi_fields = args.map { |it| it.to_s.gsub('_', '') }
77
+
78
+ args.each do |it|
79
+ inst_variable_name = "@#{it}".to_sym
80
+ define_method it do
81
+ instance_variable_get(inst_variable_name)
82
+ end
83
+ end
84
+ end
85
+
86
+ def attr_writer(*args)
87
+ args.each do |it|
88
+ inst_variable_name = "@#{it}".to_sym
89
+ define_method "#{it}=" do |new_value|
90
+ instance_variable_set(inst_variable_name, new_value)
91
+ end
92
+ end
93
+ end
94
+
95
+ # mapping class with the type and if it is a list field or not
96
+ class CreateMap
97
+
98
+ attr_reader :type, :is_list
99
+
100
+ def initialize(type, is_list = false)
101
+ @type = type
102
+ @is_list = is_list
103
+ end
104
+ end
105
+ end
106
+ end
data/lib/kodi_client.rb CHANGED
@@ -5,8 +5,10 @@ require 'json'
5
5
 
6
6
  require 'kodi_client/Chainable'
7
7
  require 'kodi_client/method/addons'
8
+ require 'kodi_client/method/audio_library'
8
9
  require 'kodi_client/method/application'
9
10
  require 'kodi_client/method/favourites'
11
+ require 'kodi_client/method/files'
10
12
  require 'kodi_client/method/gui'
11
13
  require 'kodi_client/method/input'
12
14
  require 'kodi_client/method/player'
@@ -22,12 +24,14 @@ module KodiClient
22
24
  class Client
23
25
  include Chainable
24
26
 
25
- attr_reader :addons, :application, :gui, :player, :input, :favourites, :system, :profiles
27
+ attr_reader :audio_library, :addons, :application, :favourites, :files, :gui, :input, :player, :profiles, :system
26
28
 
27
29
  def initialize
28
30
  @addons = KodiClient::Modules::Addons.new
31
+ @audio_library = KodiClient::Modules::AudioLibrary.new
29
32
  @application = KodiClient::Modules::Application.new
30
33
  @favourites = KodiClient::Modules::Favourites.new
34
+ @files = KodiClient::Modules::Files.new
31
35
  @gui = KodiClient::Modules::GUI.new
32
36
  @input = KodiClient::Modules::Input.new
33
37
  @player = KodiClient::Modules::Player.new
@@ -35,15 +39,11 @@ module KodiClient
35
39
  @system = KodiClient::Modules::System.new
36
40
  end
37
41
 
38
- def apply_options(options)
39
- @addons.apply_options(options)
40
- @application.apply_options(options)
41
- @gui.apply_options(options)
42
- @input.apply_options(options)
43
- @player.apply_options(options)
44
- @favourites.apply_options(options)
45
- @profiles.apply_options(options)
46
- @system.apply_options(options)
42
+ def apply_options_to_methods(options)
43
+ instance_variables.each do |it|
44
+ mod = instance_variable_get(it)
45
+ mod.apply_options(options) if mod.is_a?(KodiClient::KodiModule)
46
+ end
47
47
  end
48
48
  end
49
49
  end
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.5.6
4
+ version: 0.6.2
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-16 00:00:00.000000000 Z
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
- addons, application, favourites, gui, input, player, profile and system (more will
29
- be added with the time). For more information how to use it and how to activate
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
@@ -61,7 +62,9 @@ files:
61
62
  - lib/kodi_client/kodi_module.rb
62
63
  - lib/kodi_client/method/addons.rb
63
64
  - lib/kodi_client/method/application.rb
65
+ - lib/kodi_client/method/audio_library.rb
64
66
  - lib/kodi_client/method/favourites.rb
67
+ - lib/kodi_client/method/files.rb
65
68
  - lib/kodi_client/method/gui.rb
66
69
  - lib/kodi_client/method/input.rb
67
70
  - lib/kodi_client/method/player.rb
@@ -69,6 +72,7 @@ files:
69
72
  - lib/kodi_client/method/system.rb
70
73
  - lib/kodi_client/options.rb
71
74
  - lib/kodi_client/util/comparable.rb
75
+ - lib/kodi_client/util/creatable.rb
72
76
  - lib/kodi_client/util/iterable.rb
73
77
  homepage: https://github.com/cfe86/RubyKodiClient
74
78
  licenses: