mopidy 0.1.1 → 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/README.md +131 -6
- data/lib/mopidy.rb +7 -11
- data/lib/mopidy/http.rb +11 -0
- data/lib/mopidy/library.rb +21 -13
- data/lib/mopidy/playlist.rb +2 -2
- data/lib/mopidy/response.rb +29 -0
- data/lib/mopidy/tracklist.rb +2 -2
- data/lib/mopidy/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eeb054524f44a01b1636a160fefaf37a2f1f3e98
|
4
|
+
data.tar.gz: c3b32bfbd837e4866e71ccacecbb5580bdb99414
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 160c377c501b708c2d2ee35459f8880a6b872e78dfba95a78f820a966e8638712947de3446742f69d0be0f3bcd1c7018a0b60721b9b15e194ee37d3c2db148c4
|
7
|
+
data.tar.gz: 286faf4452ee45b1355c735198b5cbcd6a862137a5623f183c6d82dc1d44df8a55004f21518dd6e729871413824fef54533c5a7307c7664b765927a314984eb5
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# Mopidy
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
A lightweight wrapper around the Mopidy music server API.
|
6
4
|
|
7
5
|
## Installation
|
8
6
|
|
@@ -22,7 +20,135 @@ Or install it yourself as:
|
|
22
20
|
|
23
21
|
## Usage
|
24
22
|
|
25
|
-
|
23
|
+
The gem is divided into modules that reflect the controllers in the [Mopidy core API](https://docs.mopidy.com/en/latest/api/core).
|
24
|
+
Currently, the supported modules are `Library`, `Playback`, `Playlist`, and `Tracklist`.
|
25
|
+
|
26
|
+
### Configuration
|
27
|
+
|
28
|
+
To configure the url that the gem makes requests to:
|
29
|
+
```ruby
|
30
|
+
Mopidy.configure do |config|
|
31
|
+
config.mopidy_url = 'http://localhost:6680/mopidy/rpc' # This is the default
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
### Tracklist
|
36
|
+
|
37
|
+
This is the module that interfaces with [Mopidy's tracklist controller](https://docs.mopidy.com/en/latest/api/core/#tracklist-controller)
|
38
|
+
|
39
|
+
To get the tracks in the tracklist:
|
40
|
+
```ruby
|
41
|
+
Mopidy::Tracklist.tracks
|
42
|
+
```
|
43
|
+
|
44
|
+
To get the index of the currently playing track:
|
45
|
+
```ruby
|
46
|
+
Mopidy::Tracklist.index
|
47
|
+
```
|
48
|
+
|
49
|
+
To get the tracks in the tracklist as `TLTRack`s
|
50
|
+
```ruby
|
51
|
+
Mopidy::Tracklist.tl_tracks
|
52
|
+
```
|
53
|
+
|
54
|
+
To add a track to the tracklist:
|
55
|
+
```ruby
|
56
|
+
Mopidy::Tracklist.add(uri: 'example-track-uri')
|
57
|
+
```
|
58
|
+
|
59
|
+
To get the length of the tracklist:
|
60
|
+
```ruby
|
61
|
+
Mopidy::Tracklist.length
|
62
|
+
```
|
63
|
+
|
64
|
+
To clear the tracks from the tracklist:
|
65
|
+
```ruby
|
66
|
+
Mopidy::Tracklist.clear
|
67
|
+
```
|
68
|
+
|
69
|
+
### Library
|
70
|
+
|
71
|
+
This is the module that interfaces with [Mopidy's Library controller](https://docs.mopidy.com/en/latest/api/core/#library-controller)
|
72
|
+
|
73
|
+
To search for tracks, artists, playlists, and albums using a keyword:
|
74
|
+
```ruby
|
75
|
+
Mopidy::Library.search('queen')
|
76
|
+
```
|
77
|
+
|
78
|
+
To search for tracks by artist, album, or track:
|
79
|
+
```ruby
|
80
|
+
Mopidy::Library.search_tracks('bicycle')
|
81
|
+
```
|
82
|
+
|
83
|
+
To lookup a track by it's uri:
|
84
|
+
|
85
|
+
```ruby
|
86
|
+
Mopidy::Library.lookup('example-uri')
|
87
|
+
```
|
88
|
+
|
89
|
+
### Playlist
|
90
|
+
|
91
|
+
This is the module that interfaces with [Mopidy's Playlist controller](https://docs.mopidy.com/en/latest/api/core/#playlist-controller)
|
92
|
+
|
93
|
+
To get a list of playlists:
|
94
|
+
```ruby
|
95
|
+
Mopidy::Playlist.as_list
|
96
|
+
```
|
97
|
+
|
98
|
+
To lookup a playlist by it's uri
|
99
|
+
```ruby
|
100
|
+
Mopidy::Playlist.lookup('playlist-uri')
|
101
|
+
```
|
102
|
+
|
103
|
+
### Playback
|
104
|
+
|
105
|
+
This is the module that interfaces with [Mopidy's Playback controller](https://docs.mopidy.com/en/latest/api/core/#playlist-controller)
|
106
|
+
|
107
|
+
To play:
|
108
|
+
```ruby
|
109
|
+
Mopidy::Playlist.play
|
110
|
+
```
|
111
|
+
|
112
|
+
To pause:
|
113
|
+
```ruby
|
114
|
+
Mopidy::Playlist.pause
|
115
|
+
```
|
116
|
+
|
117
|
+
To resume:
|
118
|
+
```ruby
|
119
|
+
Mopidy::Playlist.resume
|
120
|
+
```
|
121
|
+
|
122
|
+
To stop:
|
123
|
+
```ruby
|
124
|
+
Mopidy::Playlist.stop
|
125
|
+
```
|
126
|
+
|
127
|
+
To get the playback state:
|
128
|
+
```ruby
|
129
|
+
Mopidy::Playlist.state
|
130
|
+
```
|
131
|
+
|
132
|
+
To get the current time position:
|
133
|
+
```ruby
|
134
|
+
Mopidy::Playlist.time_position
|
135
|
+
```
|
136
|
+
|
137
|
+
To seek to a time position:
|
138
|
+
```ruby
|
139
|
+
time_position = 1000 # Time position in milliseconds
|
140
|
+
Mopidy::Playlist.seek(time_position)
|
141
|
+
```
|
142
|
+
|
143
|
+
To get the currently playing track:
|
144
|
+
```ruby
|
145
|
+
Mopidy::Playlist.current_track
|
146
|
+
```
|
147
|
+
|
148
|
+
To skip to the next track:
|
149
|
+
```ruby
|
150
|
+
Mopidy::Playlist.next
|
151
|
+
```
|
26
152
|
|
27
153
|
## Development
|
28
154
|
|
@@ -32,10 +158,9 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
32
158
|
|
33
159
|
## Contributing
|
34
160
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
161
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/khisakuni/mopidy.
|
36
162
|
|
37
163
|
|
38
164
|
## License
|
39
165
|
|
40
166
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
41
|
-
|
data/lib/mopidy.rb
CHANGED
@@ -3,6 +3,8 @@ require 'mopidy/library'
|
|
3
3
|
require 'mopidy/playback'
|
4
4
|
require 'mopidy/playlist'
|
5
5
|
require 'mopidy/tracklist'
|
6
|
+
require 'mopidy/response'
|
7
|
+
require 'mopidy/http'
|
6
8
|
require 'json'
|
7
9
|
require 'httparty'
|
8
10
|
|
@@ -18,9 +20,11 @@ module Mopidy
|
|
18
20
|
|
19
21
|
class Configuration
|
20
22
|
attr_accessor :mopidy_url
|
23
|
+
attr_accessor :http_provider
|
21
24
|
|
22
25
|
def initialize
|
23
|
-
@mopidy_url
|
26
|
+
@mopidy_url = 'http://localhost:6680/mopidy/rpc'
|
27
|
+
@http_provider = HTTParty
|
24
28
|
end
|
25
29
|
end
|
26
30
|
|
@@ -34,15 +38,7 @@ module Mopidy
|
|
34
38
|
end
|
35
39
|
|
36
40
|
def self.post(body)
|
37
|
-
|
38
|
-
|
39
|
-
body: body,
|
40
|
-
headers: {
|
41
|
-
'Content-Type' => 'application/json'
|
42
|
-
}
|
43
|
-
)
|
44
|
-
result = post.parsed_response['result']
|
45
|
-
return {} if result.nil?
|
46
|
-
result
|
41
|
+
headers = { 'Content-Type' => 'application/json' }
|
42
|
+
res = Http.post(configuration.mopidy_url, body, headers)
|
47
43
|
end
|
48
44
|
end
|
data/lib/mopidy/http.rb
ADDED
data/lib/mopidy/library.rb
CHANGED
@@ -1,28 +1,36 @@
|
|
1
|
+
require 'mopidy/response'
|
2
|
+
|
1
3
|
module Mopidy
|
2
4
|
module Library
|
3
5
|
def self.search_tracks(keyword)
|
4
|
-
|
5
|
-
|
6
|
-
|
6
|
+
res = search(keyword)
|
7
|
+
tracks = parse_search_response(res, 'tracks')
|
8
|
+
format_response(tracks, res.status)
|
7
9
|
end
|
8
10
|
|
9
|
-
def self.
|
11
|
+
def self.lookup(uri)
|
10
12
|
json = Mopidy.format_json(1, 'core.library.lookup', 'uri': uri)
|
11
|
-
|
12
|
-
|
13
|
-
{}
|
13
|
+
res = Mopidy.post(json)
|
14
|
+
res.body.empty? ? res : format_response(res.body.first, res.status)
|
14
15
|
end
|
15
16
|
|
16
|
-
private
|
17
|
-
|
18
17
|
def self.search(keyword)
|
19
18
|
json = Mopidy.format_json(1, 'core.library.search', [{ 'any': keyword }])
|
20
|
-
Mopidy.post(json)
|
19
|
+
Mopidy.post(json)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def self.parse_search_response(response, type)
|
25
|
+
data = response.body.first[type]
|
21
26
|
end
|
22
27
|
|
23
|
-
def self.
|
24
|
-
|
25
|
-
|
28
|
+
def self.format_response(data, status_code)
|
29
|
+
new_response = OpenStruct.new(
|
30
|
+
parsed_response: { 'result' => data },
|
31
|
+
code: status_code
|
32
|
+
)
|
33
|
+
Mopidy::Response.new(new_response)
|
26
34
|
end
|
27
35
|
end
|
28
36
|
end
|
data/lib/mopidy/playlist.rb
CHANGED
@@ -5,12 +5,12 @@ module Mopidy
|
|
5
5
|
Mopidy.post(json)
|
6
6
|
end
|
7
7
|
|
8
|
-
def self.
|
8
|
+
def self.lookup(uri)
|
9
9
|
json = Mopidy.format_json(1, 'core.playlists.lookup', [uri])
|
10
10
|
Mopidy.post(json)
|
11
11
|
end
|
12
12
|
|
13
|
-
def self.
|
13
|
+
def self.save(playlist)
|
14
14
|
json = Mopidy.format_json(1, 'core.playlists.save', playlist: playlist)
|
15
15
|
Mopidy.post(json)
|
16
16
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Mopidy
|
2
|
+
class Response
|
3
|
+
def initialize(response)
|
4
|
+
@response = response
|
5
|
+
end
|
6
|
+
|
7
|
+
def status
|
8
|
+
@response.code
|
9
|
+
end
|
10
|
+
|
11
|
+
def body
|
12
|
+
has_error?(@response) ? parse_error(@response) : parse_response(@response)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def has_error?(response)
|
18
|
+
response.parsed_response['result'].nil?
|
19
|
+
end
|
20
|
+
|
21
|
+
def parse_response(response)
|
22
|
+
response.parsed_response['result']
|
23
|
+
end
|
24
|
+
|
25
|
+
def parse_error(response)
|
26
|
+
response.parsed_response['error']
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/mopidy/tracklist.rb
CHANGED
@@ -7,7 +7,7 @@ module Mopidy
|
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.
|
10
|
+
def self.tracks
|
11
11
|
json = Mopidy.format_json(1, 'core.tracklist.get_tracks')
|
12
12
|
Mopidy.post(json)
|
13
13
|
end
|
@@ -23,7 +23,7 @@ module Mopidy
|
|
23
23
|
Mopidy.post(json)
|
24
24
|
end
|
25
25
|
|
26
|
-
def self.
|
26
|
+
def self.tl_tracks
|
27
27
|
json = Mopidy.format_json(1, 'core.tracklist.get_tl_tracks')
|
28
28
|
Mopidy.post(json)
|
29
29
|
end
|
data/lib/mopidy/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mopidy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- khisakuni
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -98,9 +98,11 @@ files:
|
|
98
98
|
- bin/rspec
|
99
99
|
- bin/setup
|
100
100
|
- lib/mopidy.rb
|
101
|
+
- lib/mopidy/http.rb
|
101
102
|
- lib/mopidy/library.rb
|
102
103
|
- lib/mopidy/playback.rb
|
103
104
|
- lib/mopidy/playlist.rb
|
105
|
+
- lib/mopidy/response.rb
|
104
106
|
- lib/mopidy/tracklist.rb
|
105
107
|
- lib/mopidy/version.rb
|
106
108
|
- mopidy.gemspec
|
@@ -124,8 +126,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
126
|
version: '0'
|
125
127
|
requirements: []
|
126
128
|
rubyforge_project:
|
127
|
-
rubygems_version: 2.5
|
129
|
+
rubygems_version: 2.4.5
|
128
130
|
signing_key:
|
129
131
|
specification_version: 4
|
130
132
|
summary: A wrapper around the Mopidy API.
|
131
133
|
test_files: []
|
134
|
+
has_rdoc:
|