kodi_client 0.4.5 → 0.5.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -0
  3. data/kodi_client.gemspec +5 -2
  4. data/lib/kodi_client/Chainable.rb +3 -1
  5. data/lib/kodi_client/global_types/addon_types.rb +60 -48
  6. data/lib/kodi_client/global_types/application_types.rb +19 -16
  7. data/lib/kodi_client/global_types/audio_types.rb +41 -30
  8. data/lib/kodi_client/global_types/favourites_types.rb +18 -17
  9. data/lib/kodi_client/global_types/global_types.rb +29 -27
  10. data/lib/kodi_client/global_types/gui_types.rb +21 -15
  11. data/lib/kodi_client/global_types/input_types.rb +1 -1
  12. data/lib/kodi_client/global_types/item_types.rb +6 -2
  13. data/lib/kodi_client/global_types/list_types.rb +256 -89
  14. data/lib/kodi_client/global_types/media_types.rb +16 -11
  15. data/lib/kodi_client/global_types/player_type.rb +126 -107
  16. data/lib/kodi_client/global_types/profiles_types.rb +80 -0
  17. data/lib/kodi_client/global_types/pvr_type.rb +2 -0
  18. data/lib/kodi_client/global_types/system_types.rb +36 -0
  19. data/lib/kodi_client/global_types/video_types.rb +66 -41
  20. data/lib/kodi_client/kodi_module.rb +1 -0
  21. data/lib/kodi_client/method/addons.rb +2 -3
  22. data/lib/kodi_client/method/application.rb +1 -1
  23. data/lib/kodi_client/method/favourites.rb +1 -1
  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 +48 -0
  27. data/lib/kodi_client/method/system.rb +58 -0
  28. data/lib/kodi_client/util/comparable.rb +4 -1
  29. data/lib/kodi_client/util/creatable.rb +52 -0
  30. data/lib/kodi_client.rb +10 -8
  31. metadata +10 -5
@@ -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
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'kodi_client/kodi_module'
4
+ require 'kodi_client/global_types/profiles_types'
5
+
6
+ module KodiClient
7
+ module Modules
8
+ # contains all Kodi Application methods
9
+ class Profiles < KodiModule
10
+
11
+ GET_CURRENT_PROFILE = 'Profiles.GetCurrentProfile'
12
+ GET_PROFILES = 'Profiles.GetProfiles'
13
+ LOAD_PROFILE = 'Profiles.LoadProfile'
14
+
15
+ def get_current_profile(properties = Types::Profiles::FieldsProfile.all_properties, kodi_id = 1)
16
+ request = KodiRequest.new(kodi_id, GET_CURRENT_PROFILE, { 'properties' => properties })
17
+ json = invoke_api(request)
18
+ result = Types::Profiles::DetailsProfile.create(json['result'])
19
+ json['result'] = result
20
+ KodiResponse.new(json)
21
+ end
22
+
23
+ def get_profiles(properties = Types::Profiles::FieldsProfile.all_properties,
24
+ limit = Types::List::ListLimits.new(0, 50),
25
+ sort = Types::List::ListSort.new, kodi_id = 1)
26
+ request = KodiRequest.new(kodi_id, GET_PROFILES,
27
+ { 'properties' => properties,
28
+ 'limits' => { 'start' => limit.list_start, 'end' => limit.list_end },
29
+ 'sort' => { 'ignorearticle' => sort.ignore_article, 'method' => sort.method,
30
+ 'order' => sort.order,
31
+ 'useartistsortname' => sort.use_artist_sort_name } })
32
+ json = invoke_api(request)
33
+ result = Types::Profiles::GetProfilesReturned.create(json['result'])
34
+ json['result'] = result
35
+ KodiResponse.new(json)
36
+ end
37
+
38
+ def load_profile(profile_name, password, prompt = false, kodi_id = 1)
39
+ request = KodiRequest.new(kodi_id, LOAD_PROFILE,
40
+ { 'profile' => profile_name,
41
+ 'password' => { 'value' => password.value, 'encryption' => password.encryption },
42
+ 'prompt' => prompt })
43
+ json = invoke_api(request)
44
+ KodiResponse.new(json)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'kodi_client/global_types/gui_types'
4
+ require 'kodi_client/kodi_module'
5
+ require 'kodi_client/global_types/system_types'
6
+
7
+ module KodiClient
8
+ module Modules
9
+ # contains all Kodi System methods
10
+ class System < KodiModule
11
+
12
+ EJECT_OPTICAL_DRIVE = 'System.EjectOpticalDrive'
13
+ GET_PROPERTIES = 'System.GetProperties'
14
+ HIBERNATE = 'System.Hibernate'
15
+ REBOOT = 'System.Reboot'
16
+ SHUTDOWN = 'System.Shutdown'
17
+ SUSPEND = 'System.Suspend'
18
+
19
+ def eject_optical_drive(kodi_id = 1)
20
+ request = KodiRequest.new(kodi_id, EJECT_OPTICAL_DRIVE, {})
21
+ json = invoke_api(request)
22
+ KodiResponse.new(json)
23
+ end
24
+
25
+ def get_properties(properties = Types::System::PropertyName.all_properties, kodi_id = 1)
26
+ request = KodiRequest.new(kodi_id, GET_PROPERTIES, { 'properties' => properties })
27
+ json = invoke_api(request)
28
+ result = Types::System::PropertyValue.create(json['result'])
29
+ json['result'] = result
30
+ KodiResponse.new(json)
31
+ end
32
+
33
+ def hibernate(kodi_id = 1)
34
+ request = KodiRequest.new(kodi_id, HIBERNATE, {})
35
+ json = invoke_api(request)
36
+ KodiResponse.new(json)
37
+ end
38
+
39
+ def reboot(kodi_id = 1)
40
+ request = KodiRequest.new(kodi_id, REBOOT, {})
41
+ json = invoke_api(request)
42
+ KodiResponse.new(json)
43
+ end
44
+
45
+ def shutdown(kodi_id = 1)
46
+ request = KodiRequest.new(kodi_id, SHUTDOWN, {})
47
+ json = invoke_api(request)
48
+ KodiResponse.new(json)
49
+ end
50
+
51
+ def suspend(kodi_id = 1)
52
+ request = KodiRequest.new(kodi_id, SUSPEND, {})
53
+ json = invoke_api(request)
54
+ KodiResponse.new(json)
55
+ end
56
+ end
57
+ end
58
+ 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,52 @@
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 attr_accessor(*args)
9
+ attr_reader(*args)
10
+ attr_writer(*args)
11
+ end
12
+
13
+ def attr_reader(*args)
14
+ @kodi_fields = args.map { |it| it.to_s.gsub('_', '') }
15
+
16
+ args.each do |it|
17
+ inst_variable_name = "@#{it}".to_sym
18
+ define_method it do
19
+ instance_variable_get(inst_variable_name)
20
+ end
21
+ end
22
+ end
23
+
24
+ def attr_writer(*args)
25
+ args.each do |it|
26
+ inst_variable_name = "@#{it}".to_sym
27
+ define_method "#{it}=" do |new_value|
28
+ instance_variable_set(inst_variable_name, new_value)
29
+ end
30
+ end
31
+ end
32
+
33
+ def create_list(hash)
34
+ hash.nil? ? [] : hash.map { |it| create(it) }
35
+ end
36
+
37
+ def create(hash)
38
+ return nil if hash.nil?
39
+ return nil if @kodi_fields.none? { |it| !hash[it].nil? }
40
+
41
+ new(*@kodi_fields.map { |it| hash[it] })
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
47
+
48
+ def hash_to_arr(hash, fields)
49
+ Creatable.hash_to_arr(hash, fields)
50
+ end
51
+ end
52
+ end
data/lib/kodi_client.rb CHANGED
@@ -10,6 +10,8 @@ require 'kodi_client/method/favourites'
10
10
  require 'kodi_client/method/gui'
11
11
  require 'kodi_client/method/input'
12
12
  require 'kodi_client/method/player'
13
+ require 'kodi_client/method/profiles'
14
+ require 'kodi_client/method/system'
13
15
 
14
16
 
15
17
  # client for Kodi rest api https://kodi.wiki/view/JSON-RPC_API/v12
@@ -20,7 +22,7 @@ module KodiClient
20
22
  class Client
21
23
  include Chainable
22
24
 
23
- attr_reader :addons, :application, :gui, :player, :input, :favourites
25
+ attr_reader :addons, :application, :gui, :player, :input, :favourites, :system, :profiles
24
26
 
25
27
  def initialize
26
28
  @addons = KodiClient::Modules::Addons.new
@@ -29,15 +31,15 @@ module KodiClient
29
31
  @gui = KodiClient::Modules::GUI.new
30
32
  @input = KodiClient::Modules::Input.new
31
33
  @player = KodiClient::Modules::Player.new
34
+ @profiles = KodiClient::Modules::Profiles.new
35
+ @system = KodiClient::Modules::System.new
32
36
  end
33
37
 
34
- def apply_options(options)
35
- @addons.apply_options(options)
36
- @application.apply_options(options)
37
- @gui.apply_options(options)
38
- @input.apply_options(options)
39
- @player.apply_options(options)
40
- @favourites.apply_options(options)
38
+ def apply_options_to_methods(options)
39
+ instance_variables.each do |it|
40
+ mod = instance_variable_get(it)
41
+ mod.apply_options(options) if mod.is_a?(KodiClient::KodiModule)
42
+ end
41
43
  end
42
44
  end
43
45
  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.4.5
4
+ version: 0.5.7
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-17 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 and player (more will be added with
29
- the time). For more information how to use it and how to activate Remote Control
30
- in Kodi, please check the github page https://github.com/cfe86/RubyKodiClient
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
31
31
  email:
32
32
  - christian.feier@gmail.com
33
33
  executables: []
@@ -54,7 +54,9 @@ files:
54
54
  - lib/kodi_client/global_types/list_types.rb
55
55
  - lib/kodi_client/global_types/media_types.rb
56
56
  - lib/kodi_client/global_types/player_type.rb
57
+ - lib/kodi_client/global_types/profiles_types.rb
57
58
  - lib/kodi_client/global_types/pvr_type.rb
59
+ - lib/kodi_client/global_types/system_types.rb
58
60
  - lib/kodi_client/global_types/video_types.rb
59
61
  - lib/kodi_client/kodi_module.rb
60
62
  - lib/kodi_client/method/addons.rb
@@ -63,8 +65,11 @@ files:
63
65
  - lib/kodi_client/method/gui.rb
64
66
  - lib/kodi_client/method/input.rb
65
67
  - lib/kodi_client/method/player.rb
68
+ - lib/kodi_client/method/profiles.rb
69
+ - lib/kodi_client/method/system.rb
66
70
  - lib/kodi_client/options.rb
67
71
  - lib/kodi_client/util/comparable.rb
72
+ - lib/kodi_client/util/creatable.rb
68
73
  - lib/kodi_client/util/iterable.rb
69
74
  homepage: https://github.com/cfe86/RubyKodiClient
70
75
  licenses: