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 +4 -4
- data/.byebug_history +45 -0
- data/.gitignore +4 -0
- data/kodipity.gemspec +3 -1
- data/lib/kodipity/version.rb +1 -1
- data/lib/kodipity.rb +84 -66
- metadata +32 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4525260ffc7f7f93388041eeb3b1fd9552d361c0
|
4
|
+
data.tar.gz: 2ba5e1d70861cb28122a462600fac2c5883eb67d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
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{
|
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
|
data/lib/kodipity/version.rb
CHANGED
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
|
-
|
9
|
-
|
10
|
-
|
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
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
27
|
-
|
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
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
-
|
50
|
-
|
51
|
-
|
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
|
-
|
54
|
-
|
55
|
-
|
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
|
-
|
58
|
-
|
59
|
-
|
74
|
+
def playing?
|
75
|
+
Kodipity.active_players.size > 0
|
76
|
+
end
|
60
77
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
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
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
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
|
-
|
74
|
-
|
75
|
-
|
90
|
+
def pause
|
91
|
+
HTTParty.post(url, headers: headers, body: _player_pause)
|
92
|
+
end
|
76
93
|
|
77
|
-
|
78
|
-
|
79
|
-
|
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
|
-
|
98
|
+
watched_episode = false
|
82
99
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
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
|
-
|
92
|
-
|
93
|
-
|
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.
|
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:
|
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:
|
128
|
+
summary: Kodi JSON RPC wrapper in Ruby
|
100
129
|
test_files: []
|