subsonic-api 0.3

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.
data/README.markdown ADDED
@@ -0,0 +1,10 @@
1
+ # Subsonic
2
+
3
+ client = Subsonic::Client.new(url, username, password)
4
+
5
+
6
+ ## Now Playing
7
+
8
+ client.now_playing
9
+
10
+ returns a string in "artist - track" or an array if more people are streaming
@@ -0,0 +1,76 @@
1
+ module Subsonic
2
+ class Client
3
+ include ::HTTParty
4
+
5
+ API_VERSION = {
6
+ '3.8' => '1.0.0',
7
+ '3.9' => '1.1.1',
8
+ '4.0' => '1.2.0',
9
+ '4.1' => '1.3.0',
10
+ '4.2' => '1.4.0',
11
+ '4.3.1' => '1.5.0'
12
+ }
13
+
14
+ attr_accessor :url, :version, :api_version, :user, :uri_prepend
15
+
16
+ def initialize(url, username, password, options={})
17
+ pass_prefix = options[:enc] ? "enc:" : ""
18
+ version = @version = options[:version] || API_VERSION.values.last
19
+ @api_version = API_VERSION[@version] || version
20
+
21
+ if(@api_version == '1.5.0')
22
+ @uri_prepend = '/rest'
23
+ end
24
+
25
+ format = options[:format] || "json"
26
+
27
+ Struct.new("User", :username, :password)
28
+ @user = Struct::User.new(username, "#{pass_prefix}#{password}")
29
+ username, password = @user.username, @user.password
30
+
31
+ self.class.class_eval do
32
+ base_uri url
33
+ default_params :u => username, :p => password,
34
+ :v => version, :f => format, :c => "subsonic-rb.gem"
35
+ end
36
+ end
37
+
38
+ def now_playing
39
+ response = self.class.get(@uri_prepend + '/getNowPlaying.view')
40
+ if response.code == 200
41
+ response.parsed_response['subsonic-response']['nowPlaying']['entry']
42
+ end
43
+ end
44
+
45
+ def say(message)
46
+ response = self.class.post(@uri_prepend + '/addChatMessage.view', :query => {:message => message})
47
+ response.code == 200 ? message : false
48
+ end
49
+
50
+ def messages
51
+ response = self.class.get(@uri_prepend + '/getChatMessages.view')
52
+ if response.code == 200
53
+ chat_messages = response.parsed_response['subsonic-response']['chatMessages']['chatMessage']
54
+ chat_messages.map do |msg|
55
+ time = Time.at(msg['time'] / 1000)
56
+ "[#{time.strftime("%b-%e")}] #{msg['username']}: #{msg['message']}"
57
+ end
58
+ end
59
+ end
60
+
61
+ def random_songs
62
+ response = self.class.get(@uri_prepend + '/getRandomSongs')
63
+ if response.code == 200
64
+ response['subsonic-response']['randomSongs']['song']
65
+ end
66
+ end
67
+
68
+ def add_song(*ids)
69
+ count = ids.length
70
+ ids = ids.join(',').gsub(/\s/, '')
71
+ response = self.class.post(@uri_prepend + '/jukeboxControl.view', :query => {:action => 'add', :id => ids})
72
+ response.code == 200 ? "#{count} songs added" : false
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,13 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/subsonic')
2
+
3
+ %w[
4
+ httparty
5
+ json
6
+ awesome_print
7
+ ].each do |file|
8
+ require file
9
+ end
10
+
11
+ module Subsonic
12
+ autoload :Client, File.join(File.expand_path(File.dirname(__FILE__)), "subsonic-rb", "client")
13
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: subsonic-api
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 3
8
+ version: "0.3"
9
+ platform: ruby
10
+ authors:
11
+ - Joseph Hsu
12
+ - James Hart
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-07-20 00:00:00 -07:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: httparty
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 7
31
+ - 0
32
+ version: 0.7.0
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: Interact with a subsonic music streaming server
36
+ email:
37
+ - jhsu@josephhsu.com
38
+ - hjhart@gmail.com
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files: []
44
+
45
+ files:
46
+ - README.markdown
47
+ - lib/subsonic-api/client.rb
48
+ - lib/subsonic-api.rb
49
+ has_rdoc: true
50
+ homepage: http://github.com/hjhart/subsonic-api
51
+ licenses: []
52
+
53
+ post_install_message:
54
+ rdoc_options: []
55
+
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ segments:
64
+ - 1
65
+ - 8
66
+ - 7
67
+ version: 1.8.7
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 1
75
+ - 3
76
+ - 6
77
+ version: 1.3.6
78
+ requirements: []
79
+
80
+ rubyforge_project:
81
+ rubygems_version: 1.3.7
82
+ signing_key:
83
+ specification_version: 3
84
+ summary: Subsonic music streaming api client
85
+ test_files: []
86
+