kodi_client 0.5.6 → 0.5.7

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.
@@ -20,6 +20,7 @@ module KodiClient
20
20
  # Player.ViewMode https://kodi.wiki/view/JSON-RPC_API/v12#Player.ViewMode
21
21
  module ViewMode
22
22
  extend Iterable
23
+
23
24
  NORMAL = 'normal'
24
25
  ZOOM = 'zoom'
25
26
  STRETCH_4x3 = 'strech4x3'
@@ -34,6 +35,7 @@ module KodiClient
34
35
  # player types
35
36
  module PlayerVisibilityType
36
37
  extend Iterable
38
+
37
39
  INTERNAL = 'internal'
38
40
  EXTERNAL = 'external'
39
41
  REMOTE = 'remote'
@@ -80,87 +82,75 @@ module KodiClient
80
82
  # player id and type
81
83
  class Player
82
84
  include Comparable
85
+ extend Creatable
83
86
 
84
87
  attr_reader :player_id, :player_type, :type, :name, :plays_audio, :plays_video
85
88
 
86
- def initialize(hash)
87
- @player_id = hash['playerid']
88
- @player_type = hash['playertype']
89
- @type = hash['type']
90
- @name = hash['name']
91
- @plays_audio = hash['playsaudio']
92
- @plays_video = hash['playsvideo']
93
- end
94
-
95
- def ==(other)
96
- compare(self, other)
89
+ def initialize(player_id, player_type, type, name, plays_audio, plays_video)
90
+ @player_id = player_id
91
+ @player_type = player_type
92
+ @type = type
93
+ @name = name
94
+ @plays_audio = plays_audio
95
+ @plays_video = plays_video
97
96
  end
98
97
  end
99
98
 
100
99
  # Player Subtitle https://kodi.wiki/view/JSON-RPC_API/v12#Player.Subtitle
101
100
  class Subtitle
102
101
  include Comparable
102
+ extend Creatable
103
103
 
104
104
  attr_reader :index, :is_default, :is_forced, :is_impaired, :language, :name
105
105
 
106
- def initialize(hash)
107
- @index = hash['index']
108
- @is_default = hash['isdefault']
109
- @is_forced = hash['isforced']
110
- @is_impaired = hash['isimpaired']
111
- @language = hash['language']
112
- @name = hash['name']
113
- end
114
-
115
- def ==(other)
116
- compare(self, other)
106
+ def initialize(index, is_default, is_forced, is_impaired, language, name)
107
+ @index = index
108
+ @is_default = is_default
109
+ @is_forced = is_forced
110
+ @is_impaired = is_impaired
111
+ @language = language
112
+ @name = name
117
113
  end
118
114
  end
119
115
 
120
116
  # Player.Audio.Stream https://kodi.wiki/view/JSON-RPC_API/v12#Player.Audio.Stream
121
117
  class AudioStream
122
118
  include Comparable
119
+ extend Creatable
123
120
 
124
121
  attr_reader :bitrate, :channels, :codec, :index, :is_default, :is_forced, :is_original, :language,
125
122
  :name, :sample_rate
126
123
 
127
- def initialize(hash)
128
- @bitrate = hash['bitrate']
129
- @channels = hash['channels']
130
- @codec = hash['codec']
131
- @index = hash['index']
132
- @is_default = hash['isdefault']
133
- @is_forced = hash['isforced']
134
- @is_original = hash['isoriginal']
135
- @language = hash['language']
136
- @name = hash['name']
137
- @sample_rate = hash['samplerate']
138
- end
139
-
140
- def ==(other)
141
- compare(self, other)
124
+ def initialize(bitrate, channels, codec, index, is_default, is_forced, is_original, language, name, sample_rate)
125
+ @bitrate = bitrate
126
+ @channels = channels
127
+ @codec = codec
128
+ @index = index
129
+ @is_default = is_default
130
+ @is_forced = is_forced
131
+ @is_original = is_original
132
+ @language = language
133
+ @name = name
134
+ @sample_rate = sample_rate
142
135
  end
143
136
  end
144
137
 
145
138
  # Player.Video.Stream https://kodi.wiki/view/JSON-RPC_API/v12#Player.Video.Stream
146
139
  class VideoStream
147
140
  include Comparable
141
+ extend Creatable
148
142
 
149
143
  attr_reader :codec, :height, :index, :language, :name, :width, :duration, :aspect
150
144
 
151
- def initialize(hash)
152
- @codec = hash['codec']
153
- @height = hash['height']
154
- @index = hash['index']
155
- @language = hash['language']
156
- @name = hash['name']
157
- @width = hash['width']
158
- @duration = hash['duration']
159
- @aspect = hash['aspect']
160
- end
161
-
162
- def ==(other)
163
- compare(self, other)
145
+ def initialize(codec, height, index, language, name, width, duration, aspect)
146
+ @codec = codec
147
+ @height = height
148
+ @index = index
149
+ @language = language
150
+ @name = name
151
+ @width = width
152
+ @duration = duration
153
+ @aspect = aspect
164
154
  end
165
155
  end
166
156
 
@@ -198,76 +188,99 @@ module KodiClient
198
188
  # Player.Property.Value https://kodi.wiki/view/JSON-RPC_API/v12#Player.Property.Name
199
189
  class PropertyValue
200
190
  include Comparable
201
-
202
- def initialize(hash)
203
- @audio_streams = hash['audiostreams'].map { |it| AudioStream.new(it) }
204
- @cache_percentage = hash['cachepercentage']
205
- @can_change_speed = hash['canchangespeed']
206
- @can_move = hash['canmove']
207
- @can_repeat = hash['canrepeat']
208
- @can_rotate = hash['canrotate']
209
- @can_seek = hash['canseek']
210
- @can_shuffle = hash['canshuffle']
211
- @can_zoom = hash['canzoom']
212
- @current_audio_stream = AudioStream.new(hash['currentaudiostream'])
213
- @current_subtitle = Subtitle.new(hash['currentsubtitle'])
214
- @current_video_stream = VideoStream.new(hash['currentvideostream'])
215
- @live = hash['live']
216
- @party_mode = hash['partymode']
217
- @percentage = hash['percentage']
218
- @playlist_id = hash['playlistid'].nil? ? -1 : hash['playlistid']
219
- @position = hash['position'].nil? ? -1 : hash['position']
220
- @position = hash['position'].nil? ? -1 : hash['position']
221
- @repeat = hash['repeat'].nil? ? PlayerRepeat::OFF : hash['repeat']
222
- @shuffled = hash['shuffled']
223
- @speed = hash['speed']
224
- @subtitle_enabled = hash['subtitleenabled']
225
- @subtitles = hash['subtitles'].map { |it| Subtitle.new(it) }
226
- @time = Types::Global::GlobalTime.new(hash['time'])
227
- @total_time = Types::Global::GlobalTime.new(hash['totaltime'])
228
- @type = hash['type'].nil? ? PlayerType::VIDEO : hash['type']
229
- @video_streams = hash['videostreams'].map { |it| VideoStream.new(it) }
191
+ extend Creatable
192
+
193
+ attr_reader :audio_streams, :cache_percentage, :can_change_speed, :can_move, :can_repeat, :can_rotate,
194
+ :can_seek, :can_shuffle, :can_zoom, :current_audio_stream, :current_subtitle, :current_video_stream,
195
+ :live, :party_mode, :percentage, :playlist_id, :position, :repeat, :shuffled, :speed,
196
+ :subtitle_enabled, :subtitles, :time, :total_time, :type, :video_streams
197
+
198
+ def self.create(hash)
199
+ return nil if hash.nil?
200
+
201
+ audio_streams = AudioStream.create_list(hash['audiostreams'])
202
+ current_audio_stream = AudioStream.create(hash['currentaudiostream'])
203
+ current_subtitle = Subtitle.create(hash['currentsubtitle'])
204
+ current_video_stream = VideoStream.create(hash['currentvideostream'])
205
+ subtitles = Subtitle.create_list(hash['subtitles'])
206
+ time = Types::Global::GlobalTime.create(hash['time'])
207
+ total_time = Types::Global::GlobalTime.create(hash['totaltime'])
208
+ video_streams = VideoStream.create_list(hash['videostreams'])
209
+
210
+ hash['type'] = PlayerType::VIDEO if hash['type'].nil?
211
+ hash['playlistid'] = -1 if hash['playlistid'].nil?
212
+ hash['position'] = -1 if hash['position'].nil?
213
+ hash['repeat'] = PlayerRepeat::OFF if hash['repeat'].nil?
214
+
215
+ new(audio_streams, *Creatable.hash_to_arr(hash, %w[cache_percentage can_change_speed can_move
216
+ can_repeat can_rotate can_seek can_shuffle can_zoom]),
217
+ current_audio_stream, current_subtitle, current_video_stream,
218
+ *Creatable.hash_to_arr(hash, %w[live party_mode percentage playlist_id position repeat
219
+ shuffled speed subtitle_enabled]), subtitles, time, total_time,
220
+ hash['type'], video_streams)
230
221
  end
231
222
 
232
- def ==(other)
233
- compare(self, other)
223
+ def initialize(audio_streams, cache_percentage, can_change_speed, can_move, can_repeat, can_rotate, can_seek,
224
+ can_shuffle, can_zoom, current_audio_stream, current_subtitle, current_video_stream, live,
225
+ party_mode, percentage, playlist_id, position, repeat, shuffled, speed,
226
+ subtitle_enabled, subtitles, time, total_time, type, video_streams)
227
+ @audio_streams = audio_streams
228
+ @cache_percentage = cache_percentage
229
+ @can_change_speed = can_change_speed
230
+ @can_move = can_move
231
+ @can_repeat = can_repeat
232
+ @can_rotate = can_rotate
233
+ @can_seek = can_seek
234
+ @can_shuffle = can_shuffle
235
+ @can_zoom = can_zoom
236
+ @current_audio_stream = current_audio_stream
237
+ @current_subtitle = current_subtitle
238
+ @current_video_stream = current_video_stream
239
+ @live = live
240
+ @party_mode = party_mode
241
+ @percentage = percentage
242
+ @playlist_id = playlist_id
243
+ @position = position
244
+ @repeat = repeat
245
+ @shuffled = shuffled
246
+ @speed = speed
247
+ @subtitle_enabled = subtitle_enabled
248
+ @subtitles = subtitles
249
+ @time = time
250
+ @total_time = total_time
251
+ @type = type
252
+ @video_streams = video_streams
234
253
  end
235
254
  end
236
255
 
237
256
  # return value for Player.GetViewMode
238
257
  class PlayerViewMode
239
258
  include Comparable
259
+ extend Creatable
240
260
 
241
261
  attr_reader :nonlinear_stretch, :pixel_ratio, :vertical_shift, :view_mode, :zoom
242
262
 
243
- def initialize(hash)
244
- @nonlinear_stretch = hash['nonlinearstretch']
245
- @pixel_ratio = hash['pixelratio']
246
- @vertical_shift = hash['verticalshift']
247
- @view_mode = hash['viewed']
248
- @zoom = hash['zoom']
249
- end
250
-
251
- def ==(other)
252
- compare(self, other)
263
+ def initialize(nonlinear_stretch, pixel_ratio, vertical_shift, view_mode, zoom)
264
+ @nonlinear_stretch = nonlinear_stretch
265
+ @pixel_ratio = pixel_ratio
266
+ @vertical_shift = vertical_shift
267
+ @view_mode = view_mode
268
+ @zoom = zoom
253
269
  end
254
270
  end
255
271
 
256
272
  # Player.Position.Time https://kodi.wiki/view/JSON-RPC_API/v12#Player.Position.Time
257
273
  class PlayerPositionTime
258
274
  include Comparable
275
+ extend Creatable
259
276
 
260
277
  attr_reader :hours, :minutes, :seconds, :milliseconds
261
278
 
262
- def initialize(hash)
263
- @hours = hash['hours']
264
- @minutes = hash['minutes']
265
- @seconds = hash['seconds']
266
- @milliseconds = hash['milliseconds']
267
- end
268
-
269
- def ==(other)
270
- compare(self, other)
279
+ def initialize(hours, minutes, seconds, milliseconds)
280
+ @hours = hours
281
+ @minutes = minutes
282
+ @seconds = seconds
283
+ @milliseconds = milliseconds
271
284
  end
272
285
  end
273
286
 
@@ -282,17 +295,23 @@ module KodiClient
282
295
  end
283
296
 
284
297
  # return value of Player.Seek
285
- class SeekReturnValue
298
+ class SeekReturned
286
299
  include Comparable
300
+ extend Creatable
301
+
302
+ def self.create(hash)
303
+ return nil if hash.nil?
304
+
305
+ time = Types::Global::GlobalTime.create(hash['time'])
306
+ total_time = Types::Global::GlobalTime.create(hash['totaltime'])
287
307
 
288
- def initialize(hash)
289
- @percentage = hash['percentage']
290
- @time = Types::Global::GlobalTime.new(hash['time'])
291
- @total_time = Types::Global::GlobalTime.new(hash['totaltime'])
308
+ new(hash['percentage'], time, total_time)
292
309
  end
293
310
 
294
- def ==(other)
295
- compare(self, other)
311
+ def initialize(percentage, time, total_time)
312
+ @percentage = percentage
313
+ @time = time
314
+ @total_time = total_time
296
315
  end
297
316
  end
298
317
  end
@@ -20,13 +20,20 @@ module KodiClient
20
20
  class DetailsProfile
21
21
  include Comparable
22
22
  include Items::ItemDetailsBase
23
+ extend Creatable
23
24
 
24
25
  attr_reader :lock_mode, :thumbnail
25
26
 
26
- def initialize(hash)
27
- @lock_mode = hash['lockmode']
28
- @thumbnail = hash['thumbnail']
29
- item_details_base(hash)
27
+ def self.create(hash)
28
+ return nil if hash.nil?
29
+
30
+ new(*Creatable.hash_to_arr(hash, %w[lock_mode thumbnail label]))
31
+ end
32
+
33
+ def initialize(lock_mode, thumbnail, label)
34
+ @lock_mode = lock_mode
35
+ @thumbnail = thumbnail
36
+ item_details_base(label)
30
37
  end
31
38
 
32
39
  def ==(other)
@@ -37,22 +44,29 @@ module KodiClient
37
44
  # return type for Profiles.GetProfiles
38
45
  class GetProfilesReturned
39
46
  include Comparable
47
+ extend Creatable
40
48
 
41
49
  attr_reader :limits, :profiles
42
50
 
43
- def initialize(hash)
44
- @limits = Types::List::ListLimitsReturned.new(hash['limits'])
45
- @profiles = hash['profiles'].nil? ? [] : hash['profiles'].map { |it| Types::Profiles::DetailsProfile.new(it) }
51
+ def self.create(hash)
52
+ return nil if hash.nil?
53
+
54
+ limits = Types::List::ListLimitsReturned.create(hash['limits'])
55
+ profiles = Types::Profiles::DetailsProfile.create_list(hash['profiles'])
56
+
57
+ new(limits, profiles)
46
58
  end
47
59
 
48
- def ==(other)
49
- compare(self, other)
60
+ def initialize(limits, profiles)
61
+ @limits = limits
62
+ @profiles = profiles
50
63
  end
51
64
  end
52
65
 
53
66
  # Profiles.Password https://kodi.wiki/view/JSON-RPC_API/v12#Profiles.Password
54
67
  class ProfilePassword
55
68
  include Comparable
69
+ extend Creatable
56
70
 
57
71
  attr_reader :value, :encryption
58
72
 
@@ -60,10 +74,6 @@ module KodiClient
60
74
  @value = value
61
75
  @encryption = encryption
62
76
  end
63
-
64
- def ==(other)
65
- compare(self, other)
66
- end
67
77
  end
68
78
  end
69
79
  end
@@ -20,18 +20,15 @@ module KodiClient
20
20
  # System.Property.Value https://kodi.wiki/view/JSON-RPC_API/v12#System.Property.Value
21
21
  class PropertyValue
22
22
  include Comparable
23
+ extend Creatable
23
24
 
24
25
  attr_reader :can_hibernate, :can_reboot, :can_shutdown, :can_suspend
25
26
 
26
- def initialize(hash)
27
- @can_hibernate = hash['canhibernate']
28
- @can_reboot = hash['canreboot']
29
- @can_shutdown = hash['canshutdown']
30
- @can_suspend = hash['cansuspend']
31
- end
32
-
33
- def ==(other)
34
- compare(self, other)
27
+ def initialize(can_hibernate, can_reboot, can_shutdown, can_suspend)
28
+ @can_hibernate = can_hibernate
29
+ @can_reboot = can_reboot
30
+ @can_shutdown = can_shutdown
31
+ @can_suspend = can_suspend
35
32
  end
36
33
  end
37
34
  end
@@ -3,6 +3,7 @@
3
3
  require 'kodi_client/global_types/media_types'
4
4
  require 'kodi_client/global_types/player_type'
5
5
  require 'kodi_client/util/comparable'
6
+ require 'kodi_client/util/creatable'
6
7
 
7
8
  module KodiClient
8
9
  module Types
@@ -14,28 +15,30 @@ module KodiClient
14
15
 
15
16
  attr_reader :art, :play_count
16
17
 
17
- def video_details_base(hash)
18
- @art = Types::Media::MediaArtwork.new(hash['art'])
19
- @play_count = ['playcount']
20
- media_details_base(hash)
18
+ def video_details_base_by_hash(hash)
19
+ @art = Types::Media::MediaArtwork.create(hash['art'])
20
+ video_details_base(art, ['playcount'], *Creatable.hash_to_arr(hash, %w[fan_art thumbnail label]))
21
+ end
22
+
23
+ def video_details_base(art, play_count, fan_art, thumbnail, label)
24
+ @art = art
25
+ @play_count = play_count
26
+ media_details_base(fan_art, thumbnail, label)
21
27
  end
22
28
  end
23
29
 
24
30
  # Video.Cast https://kodi.wiki/view/JSON-RPC_API/v12#Video.Cast
25
31
  class VideoCast
26
32
  include Comparable
33
+ extend Creatable
27
34
 
28
35
  attr_reader :name, :order, :role, :thumbnail
29
36
 
30
- def initialize(hash)
31
- @name = hash['name']
32
- @order = hash['order']
33
- @role = hash['role']
34
- @thumbnail = hash['thumbnail']
35
- end
36
-
37
- def ==(other)
38
- compare(self, other)
37
+ def initialize(name, order, role, thumbnail)
38
+ @name = name
39
+ @order = order
40
+ @role = role
41
+ @thumbnail = thumbnail
39
42
  end
40
43
  end
41
44
 
@@ -45,9 +48,14 @@ module KodiClient
45
48
 
46
49
  attr_reader :title
47
50
 
48
- def video_details_media(hash)
49
- @title = hash['title']
50
- video_details_base(hash)
51
+ def video_details_media_by_hash(hash)
52
+ art = Types::Media::MediaArtwork.create(hash['art'])
53
+ video_details_media(hash['title'], art, *Creatable.hash_to_arr(hash, %w[play_count fan_art thumbnail label]))
54
+ end
55
+
56
+ def video_details_media(title, art, play_count, fan_art, thumbnail, label)
57
+ @title = title
58
+ video_details_base(art, play_count, fan_art, thumbnail, label)
51
59
  end
52
60
  end
53
61
 
@@ -57,12 +65,18 @@ module KodiClient
57
65
 
58
66
  attr_reader :date_added, :file, :last_played, :plot
59
67
 
60
- def video_details_item(hash)
61
- @date_added = hash['dateadded']
62
- @file = hash['file']
63
- @last_played = hash['lastplayed']
64
- @plot = hash['plot']
65
- video_details_media(hash)
68
+ def video_details_item_by_hash(hash)
69
+ art = Types::Media::MediaArtwork.create(hash['art'])
70
+ video_details_item(*Creatable.hash_to_arr(hash, %w[date_added file last_played plot title]), art,
71
+ *Creatable.hash_to_arr(hash, %w[play_count fan_art thumbnail label]))
72
+ end
73
+
74
+ def video_details_item(date_added, file, last_played, plot, title, art, play_count, fan_art, thumbnail, label)
75
+ @date_added = date_added
76
+ @file = file
77
+ @last_played = last_played
78
+ @plot = plot
79
+ video_details_media(title, art, play_count, fan_art, thumbnail, label)
66
80
  end
67
81
  end
68
82
 
@@ -72,45 +86,56 @@ module KodiClient
72
86
 
73
87
  attr_reader :director, :resume, :runtime, :stream_details
74
88
 
75
- def video_details_file(hash)
76
- @director = hash['director']
77
- @resume = VideoResume.new(hash['resume'])
78
- @runtime = hash['runtime']
79
- @stream_details = Streams.new(hash['streamdetails'])
80
- video_details_item(hash)
89
+ def video_details_file_by_hash(hash)
90
+ resume = VideoResume.create(hash['resume'])
91
+ stream_details = Streams.create(hash['streamdetails'])
92
+ art = Types::Media::MediaArtwork.create(hash['art'])
93
+ video_details_file(hash['director'], resume, hash['runtime'], stream_details,
94
+ *Creatable.hash_to_arr(hash, %w[date_added file last_played plot title]), art,
95
+ *Creatable.hash_to_arr(hash, %w[play_count fan_art thumbnail label]))
96
+ end
97
+
98
+ def video_details_file(director, resume, runtime, stream_details, date_added, file, last_played, plot, title,
99
+ art, play_count, fan_art, thumbnail, label)
100
+ @director = director
101
+ @resume = resume
102
+ @runtime = runtime
103
+ @stream_details = stream_details
104
+ video_details_item(date_added, file, last_played, plot, title, art, play_count, fan_art, thumbnail, label)
81
105
  end
82
106
  end
83
107
 
84
108
  # Video.Resume https://kodi.wiki/view/JSON-RPC_API/v12#Video.Resume
85
109
  class VideoResume
86
110
  include Comparable
111
+ extend Creatable
87
112
 
88
113
  attr_reader :position, :total
89
114
 
90
- def initialize(hash)
91
- @position = hash['position']
92
- @total = hash['total']
93
- end
94
-
95
- def ==(other)
96
- compare(self, other)
115
+ def initialize(position, total)
116
+ @position = position
117
+ @total = total
97
118
  end
98
119
  end
99
120
 
100
121
  # Video.Streams https://kodi.wiki/view/JSON-RPC_API/v12#Video.Streams
101
122
  class Streams
102
123
  include Comparable
124
+ extend Creatable
103
125
 
104
126
  attr_reader :audio, :subtitle, :video
105
127
 
106
- def initialize(hash)
107
- @audio = hash['audio'].nil? ? [] : hash['audio'].map { |it| Types::Player::AudioStream.new(it) }
108
- @subtitle = hash['subtitle'].nil? ? [] : hash['subtitle'].map { |it| Types::Player::Subtitle.new(it) }
109
- @video = hash['video'].nil? ? [] : hash['video'].map { |it| Types::Player::VideoStream.new(it) }
128
+ def self.create(hash)
129
+ audio = Types::Player::AudioStream.create_list(hash['audio'])
130
+ subtitle = Types::Player::Subtitle.create_list(hash['subtitle'])
131
+ video = Types::Player::VideoStream.create_list(hash['video'])
132
+ new(audio, subtitle, video)
110
133
  end
111
134
 
112
- def ==(other)
113
- compare(self, other)
135
+ def initialize(audio, subtitle, video)
136
+ @audio = audio
137
+ @subtitle = subtitle
138
+ @video = video
114
139
  end
115
140
  end
116
141
  end
@@ -28,8 +28,7 @@ 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
@@ -42,7 +41,7 @@ module KodiClient
42
41
  })
43
42
  json = invoke_api(request)
44
43
 
45
- result = json['result'].nil? ? nil : Types::Addons::Addon.new(json['result'])
44
+ result = Types::Addons::Addon.create(json['result'])
46
45
  json['result'] = result
47
46
  KodiResponse.new(json)
48
47
  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
@@ -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
@@ -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