kodipity 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f4a5fa11a879f25e7c11ca5a16cc938c1e17e90e
4
- data.tar.gz: a601fdf8d2ee1e54554430f83caff8984fcb356f
3
+ metadata.gz: 4525260ffc7f7f93388041eeb3b1fd9552d361c0
4
+ data.tar.gz: 2ba5e1d70861cb28122a462600fac2c5883eb67d
5
5
  SHA512:
6
- metadata.gz: 2903209482cfffc5e4b42e1fb48599d635cd52a1c3f099a12345939e1e698b05b3cbfc151595d5682aad91c9f7a459026d0a5946aabbfa35c7d9ec60436842da
7
- data.tar.gz: 810fa1fe07ca1af1facd0c585ca238a12372b8ab162cb2c6c3660ebb8288ee081d34fb677a575cc5a51b4c2b1f54bf3c7d3a9cee99e2f85b5d78f6b1442c6110
6
+ metadata.gz: 51a95cc2146d713720f11b8307a1800edd4ff4f854b9e4f81421bfda3fc8850b4f40bb5ce66db514c0dbbb71254e0f1ff9fb527eec36bec71571ffc8ecec9b77
7
+ data.tar.gz: 391d7baec617a308cc8b1633dd61c917c5ee18de5e934a635ce3b9ff767a5bb3605bedd95da31faad152d60683cb6941161e781d08edbfd0368573fa2004abe6
data/.byebug_history ADDED
@@ -0,0 +1,45 @@
1
+ cont
2
+ r = HTTParty.post(url, headers: headers, body: _movies)
3
+ cont
4
+ r = HTTParty.post(url, headers: headers, body: _movies)
5
+ self.movies
6
+ self.headers
7
+ r = HTTParty.post(url, headers: headers, body: movies)
8
+ cont
9
+ self.headers
10
+ r = HTTParty.post(url, headers: headers, body: movies)
11
+ cont
12
+ _MOVIES
13
+ HEADERS
14
+ cont
15
+ self.instance_variables
16
+ self.constants
17
+ self.methods
18
+ _movies
19
+ headers
20
+ Kodipity::Kodi._movies
21
+ Kodipity::Kodi.headers
22
+ headers
23
+ cont
24
+ quit
25
+ Kodipity::Kodi._recordings
26
+ r = HTTParty.post(url, headers: Kodipity::Kodi.headers, body: Kodipity::Kodi.recordings)
27
+ @recordings
28
+ @headers
29
+ r = HTTParty.post(url, headers: @headers, body: @recordings)
30
+ r = HTTParty.post(url, headers: @headers, body: recordings)
31
+ r = HTTParty.post(url, headers: @headers, body: _recordings)
32
+ r = HTTParty.post(url, headers: headers, body: _recordings)
33
+ r = HTTParty.post(url, headers: _headers, body: _recordings)
34
+ cont
35
+ quit
36
+ self.recordings
37
+ @recodings
38
+ r = HTTParty.post(url, headers: @headers, body: @recordings)
39
+ r.body
40
+ r = HTTParty.post(url, headers: @headers, body: @movies)
41
+ cont
42
+ quit
43
+ kodi.url = 'http://rpi-osmc.lan/jsonrpc'
44
+ r.body
45
+ r = HTTParty.post(url, headers: @headers, body: @movies)
data/.gitignore CHANGED
@@ -7,3 +7,7 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /lib/kodipity.sublime*
11
+ /lib/.DS_Store
12
+ *.gem
13
+ *.DS_Store
data/kodipity.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Chris Kirby"]
10
10
  spec.email = ["kirbycm@gmail.com"]
11
11
 
12
- spec.summary = %q{XBMC wrapper in Ruby}
12
+ spec.summary = %q{Kodi JSON RPC wrapper in Ruby}
13
13
  spec.description = %q{Kodi JSON RPC bindings written in Ruby.}
14
14
  spec.homepage = "https://github.com/kirbs-/kodipity"
15
15
  spec.license = "MIT"
@@ -34,4 +34,6 @@ Gem::Specification.new do |spec|
34
34
 
35
35
  spec.add_development_dependency "bundler", "~> 1.13"
36
36
  spec.add_development_dependency "rake", "~> 10.0"
37
+ spec.add_development_dependency "rspec"
38
+ spec.add_development_dependency "byebug"
37
39
  end
@@ -1,3 +1,3 @@
1
1
  module Kodipity
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/kodipity.rb CHANGED
@@ -2,96 +2,114 @@
2
2
  require 'httparty'
3
3
  require 'kodipity/models'
4
4
  require 'uri'
5
+ require 'byebug'
5
6
 
6
7
  module Kodipity
8
+ class Kodi
9
+ attr_reader :url, :headers, :_movies, :_channels, :_recordings, :_player_active, :_player_pause
10
+ attr_reader :media
11
+
12
+ def initialize(url)
13
+ @url = url
14
+ @media = {movies: {}, recordings: [], tv_shows: {}, channels: {}}
15
+ @headers = {"Content-Type" => 'application/json'}
16
+
17
+ @_movies = '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": { "properties" : ["art", "rating", "thumbnail", "playcount", "file"], "sort": { "order": "ascending", "method": "label", "ignorearticle": true } }, "id": "libMovies"}'
18
+ @_player_active = '{"jsonrpc": "2.0", "id": 1, "method": "Player.GetProperties", "params": {"properties": ["speed"], "playerid": 1}}'
19
+ @_channels = '{"jsonrpc": "2.0", "id": 1, "method": "PVR.GetChannelGroups", "params": {"channeltype" : "tv"}}}'
20
+ @_recordings = '{"jsonrpc": "2.0", "id": 1, "method": "PVR.GetRecordings"}}'
21
+ @_player_pause = '{"jsonrpc": "2.0", "method": "Player.PlayPause", "params": { "playerid": 1 }, "id": 1}'
22
+ end
7
23
 
8
- @url = 'http://rpi-osmc.lan/jsonrpc'
9
- # @url = 'http://127.0.0.1:8080/jsonrpc'
10
- @headers = {"Content-Type" => 'application/json'}
24
+ # @url = 'http://rpi-osmc.lan/jsonrpc'
25
+ # @url = 'http://127.0.0.1:8080/jsonrpc'
26
+ # headers = {"Content-Type" => 'application/json'}
11
27
 
12
- @movies = '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": { "properties" : ["art", "rating", "thumbnail", "playcount", "file"], "sort": { "order": "ascending", "method": "label", "ignorearticle": true } }, "id": "libMovies"}'
13
- @player_active = '{"jsonrpc": "2.0", "id": 1, "method": "Player.GetProperties", "params": {"properties": ["speed"], "playerid": 1}}'
14
- @channels = '{"jsonrpc": "2.0", "id": 1, "method": "PVR.GetChannelGroups", "params": {"channeltype" : "tv"}}}'
15
- @recordings = '{"jsonrpc": "2.0", "id": 1, "method": "PVR.GetRecordings"}}'
16
- @player_pause = '{"jsonrpc": "2.0", "method": "Player.PlayPause", "params": { "playerid": 1 }, "id": 1}'
28
+ # _movies = '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": { "properties" : ["art", "rating", "thumbnail", "playcount", "file"], "sort": { "order": "ascending", "method": "label", "ignorearticle": true } }, "id": "libMovies"}'
29
+ # _player_active = '{"jsonrpc": "2.0", "id": 1, "method": "Player.GetProperties", "params": {"properties": ["speed"], "playerid": 1}}'
30
+ # _channels = '{"jsonrpc": "2.0", "id": 1, "method": "PVR.GetChannelGroups", "params": {"channeltype" : "tv"}}}'
31
+ # _recordings = '{"jsonrpc": "2.0", "id": 1, "method": "PVR.GetRecordings"}}'
32
+ # _player_pause = '{"jsonrpc": "2.0", "method": "Player.PlayPause", "params": { "playerid": 1 }, "id": 1}'
17
33
 
18
- def self.movies
19
- movies = {}
20
- HTTParty.post(@url, headers: @headers, body: @movies)['result']['movies'].each do |movie|
21
- movies[movie['label']] = movie['movieid']
34
+ def movies
35
+ return media[:movies] unless media[:movies].empty?
36
+ HTTParty.post(url, headers: headers, body: _movies)['result']['movies'].each do |movie|
37
+ media[:movies][movie['label']] = movie['movieid']
38
+ end
39
+ media[:movies]
22
40
  end
23
- movies
24
- end
25
41
 
26
- def self.channels
27
- channel_groups_resp = HTTParty.post @url, headers: @headers, body: @channels
28
- channel_groups = channel_groups_resp['result']['channelgroups'].map{ |group| group['channelgroupid'] }
29
- channels = {}
42
+ def channels
43
+ return media[:channels] unless media[:channels].empty?
30
44
 
31
- channel_groups.each do |id|
32
- channel_group = {jsonrpc: '2.0', id: 1, method: 'PVR.GetChannels', params: {channelgroupid: id}, playerid: 1}
33
- HTTParty.post(@url, headers: @headers, body: channel_group.to_json)['result']['channels'].each do |channel|
34
- channels[channel['label']] = channel['channelid']
45
+ channel_groups_resp = HTTParty.post url, headers: headers, body: _channels
46
+ channel_groups = channel_groups_resp['result']['channelgroups'].map{ |group| group['channelgroupid'] }
47
+
48
+ channel_groups.each do |id|
49
+ channel_group = {jsonrpc: '2.0', id: 1, method: 'PVR.GetChannels', params: {channelgroupid: id}, playerid: 1}
50
+ HTTParty.post(@url, headers: @headers, body: channel_group.to_json)['result']['channels'].each do |channel|
51
+ media[:channels][channel['label']] = channel['channelid']
52
+ end
35
53
  end
54
+ media[:channels]
36
55
  end
37
- channels
38
- end
39
56
 
40
- def self.recordings(metadata = true)
41
- recordings = []
42
- HTTParty.post(@url, headers: @headers, body: @recordings)['result']['recordings'].each do |recording|
43
- # puts recording.to_s
44
- recordings << Kodipity::PVRRecording.new(recording['recordingid'], metadata)
57
+ def recordings(metadata = true)
58
+ return media[:recordings] unless media[:recordings].empty?
59
+ HTTParty.post(url, headers: headers, body: _recordings)['result']['recordings'].each do |recording|
60
+ # puts recording.to_s
61
+ media[:recordings] << Kodipity::PVRRecording.new(recording['recordingid'], metadata)
62
+ end
63
+ media[:recordings]
45
64
  end
46
- recordings
47
- end
48
65
 
49
- def self.rec
50
- HTTParty.post(@url, headers: @headers, body: '{"jsonrpc": "2.0", "id": 1, "method": "PVR.GetRecordingDetails", "params": {"recordingid" : 122, "properties": ["title", "plot", "plotoutline", "file"]}, "playerid": 1}')
51
- end
66
+ def rec
67
+ HTTParty.post(url, headers: headers, body: '{"jsonrpc": "2.0", "id": 1, "method": "PVR.GetRecordingDetails", "params": {"recordingid" : 122, "properties": ["title", "plot", "plotoutline", "file"]}, "playerid": 1}')
68
+ end
52
69
 
53
- def self.docs(param)
54
- HTTParty.post(@url, headers: @headers, body: '{ "jsonrpc": "2.0", "method": "JSONRPC.Introspect", "params": { "filter": { "id": "Player.Open", "type": "method" } }, "id": 1 }')
55
- end
70
+ def docs(param)
71
+ HTTParty.post(url, headers: headers, body: '{ "jsonrpc": "2.0", "method": "JSONRPC.Introspect", "params": { "filter": { "id": "Player.Open", "type": "method" } }, "id": 1 }')
72
+ end
56
73
 
57
- def self.playing?
58
- Kodipity.active_players.size > 0
59
- end
74
+ def playing?
75
+ Kodipity.active_players.size > 0
76
+ end
60
77
 
61
- def self.active_players
62
- out = {}
63
- HTTParty.post(@url, headers: @headers, body: '{"jsonrpc": "2.0", "method": "Player.GetActivePlayers", "id": 1}')['result'].each do |player|
64
- out = player.merge(out)
78
+ def active_players
79
+ out = {}
80
+ HTTParty.post(url, headers: headers, body: '{"jsonrpc": "2.0", "method": "Player.GetActivePlayers", "id": 1}')['result'].each do |player|
81
+ out = player.merge(out)
82
+ end
65
83
  end
66
- end
67
84
 
68
- def self.play(file)
69
- file_url = URI.encode(file)
70
- HTTParty.post(@url, headers: @headers, body: '{"jsonrpc": "2.0", "method": "Player.Open", "params": { "item": {"recordingid": "pvr://recordings/active///The%20Goldbergs%20The%20Greatest%20Musical%20Ever%20Written,%20TV%20(7.1%20WJLADT),%2020161201_010000.pvr"} }, id": 1}')
71
- end
85
+ def play(file)
86
+ file_url = URI.encode(file)
87
+ HTTParty.post(url, headers: headers, body: '{"jsonrpc": "2.0", "method": "Player.Open", "params": { "item": {"recordingid": "pvr://recordings/active///The%20Goldbergs%20The%20Greatest%20Musical%20Ever%20Written,%20TV%20(7.1%20WJLADT),%2020161201_010000.pvr"} }, id": 1}')
88
+ end
72
89
 
73
- def self.pause
74
- HTTParty.post(@url, headers: @headers, body: @player_pause)
75
- end
90
+ def pause
91
+ HTTParty.post(url, headers: headers, body: _player_pause)
92
+ end
76
93
 
77
- def self.play_next_recording(tv_show)
78
- recs = Kodipity.recordings.select{ |rec| rec.title.include? tv_show }
79
- recs.sort_by!{ |rec| rec.start_time}
94
+ def play_next_recording(tv_show)
95
+ recs = recordings.select{ |rec| rec.title.include? tv_show }
96
+ recs.sort_by!{ |rec| rec.start_time}
80
97
 
81
- watched_episode = false
98
+ watched_episode = false
82
99
 
83
- recs.each do |rec|
84
- if watched_episode
85
- # rec.play
86
- return rec
100
+ recs.each do |rec|
101
+ if watched_episode
102
+ # rec.play
103
+ return rec
104
+ end
105
+ watched_episode = true if rec.play_count > 0
87
106
  end
88
- watched_episode = true if rec.play_count > 0
89
- end
90
107
 
91
- # recs[0].play
92
- recs[0]
93
- end
108
+ # recs[0].play
109
+ recs[0]
110
+ end
94
111
 
95
-
112
+
96
113
 
114
+ end
97
115
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kodipity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Kirby
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-29 00:00:00.000000000 Z
11
+ date: 2017-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: Kodi JSON RPC bindings written in Ruby.
56
84
  email:
57
85
  - kirbycm@gmail.com
@@ -60,6 +88,7 @@ extensions: []
60
88
  extra_rdoc_files: []
61
89
  files:
62
90
  - ".DS_Store"
91
+ - ".byebug_history"
63
92
  - ".gitignore"
64
93
  - CODE_OF_CONDUCT.md
65
94
  - Gemfile
@@ -96,5 +125,5 @@ rubyforge_project:
96
125
  rubygems_version: 2.6.7
97
126
  signing_key:
98
127
  specification_version: 4
99
- summary: XBMC wrapper in Ruby
128
+ summary: Kodi JSON RPC wrapper in Ruby
100
129
  test_files: []