ruby-ampache 0.0.6 → 0.0.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.
- data/VERSION +1 -1
- data/bin/ruby-ampache +17 -4
- data/lib/lib-ampache.rb +17 -3
- data/lib/lib-classes.rb +28 -7
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
data/bin/ruby-ampache
CHANGED
@@ -66,6 +66,11 @@ def print_albums(albums)
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def print_artists(artists)
|
69
|
+
if artists.empty?
|
70
|
+
reset_token
|
71
|
+
say("token exausted, please retry")
|
72
|
+
artists = @ar.artists
|
73
|
+
end
|
69
74
|
choose do |menu|
|
70
75
|
menu.prompt = "Choose an artists or abort (1)"
|
71
76
|
menu.choice(HighLine.new.color "ABORT", :red)
|
@@ -75,6 +80,11 @@ def print_artists(artists)
|
|
75
80
|
end
|
76
81
|
end
|
77
82
|
|
83
|
+
# try to reset token if it's not valid
|
84
|
+
def reset_token
|
85
|
+
@ar.token = @ar.getAuthToken(@ar.user,@ar.psw)
|
86
|
+
end
|
87
|
+
|
78
88
|
def credits
|
79
89
|
s = <<STR
|
80
90
|
Ruby-Ampache: Ultra-simple, low-featured command line Ampache player
|
@@ -89,20 +99,23 @@ Usage: pick your choice from the menu.
|
|
89
99
|
Songs are queued up into mplayer playlist
|
90
100
|
|
91
101
|
STR
|
92
|
-
return s
|
102
|
+
return s
|
93
103
|
end
|
94
|
-
ar =AmpacheRuby.new(ar_config.get_value('AMPACHE_HOST'),ar_config.get_value('AMPACHE_USER'), ar_config.get_value('AMPACHE_USER_PSW'))
|
95
|
-
@pl = AmpachePlaylist.new
|
96
104
|
|
105
|
+
# MAIN
|
106
|
+
@ar =AmpacheRuby.new(ar_config.get_value('AMPACHE_HOST'),ar_config.get_value('AMPACHE_USER'), ar_config.get_value('AMPACHE_USER_PSW'))
|
107
|
+
@pl = AmpachePlaylist.new
|
97
108
|
|
98
109
|
while true
|
99
110
|
choose do |menu|
|
100
111
|
menu.prompt = "pick your choice!"
|
101
112
|
menu.choice("now playing") { say(HighLine.new.color(@pl.nowPlaying, :red)) }
|
102
113
|
menu.choice("skip this song") { @pl.next; say(HighLine.new.color(@pl.nowPlaying, :red)) }
|
103
|
-
menu.choice("add another album") { print_artists(ar.artists); say(HighLine.new.color(@pl.nowPlaying, :red)) }
|
114
|
+
menu.choice("add another album to playlist") { print_artists(@ar.artists); say(HighLine.new.color(@pl.nowPlaying, :red)) }
|
115
|
+
menu.choice("look for an artist") { print_artists(@ar.artists(ask("Artist name?"))); say(HighLine.new.color(@pl.nowPlaying, :red)) }
|
104
116
|
menu.choice("stop playing") { @pl.stop }
|
105
117
|
menu.choice("about ruby-ampache") { say(HighLine.new.color credits, :red) }
|
106
118
|
menu.choice("quit") { @pl.stop; exit}
|
107
119
|
end
|
108
120
|
end
|
121
|
+
|
data/lib/lib-ampache.rb
CHANGED
@@ -5,6 +5,17 @@ require 'digest/sha2'
|
|
5
5
|
|
6
6
|
require File.join(File.dirname(__FILE__),'lib-ampache')
|
7
7
|
|
8
|
+
=begin
|
9
|
+
Class is initialized with Hostname, user and password
|
10
|
+
An auth token is requested on class initialization
|
11
|
+
|
12
|
+
To get the artist list from database you can
|
13
|
+
call the method artists(nil) and you'll get an array
|
14
|
+
of AmpacheArtists.
|
15
|
+
|
16
|
+
To get albums from an artist you can issue
|
17
|
+
artist_instance.albums or ampache_ruby.instance.albums(artist_instance)
|
18
|
+
=end
|
8
19
|
class AmpacheRuby
|
9
20
|
|
10
21
|
|
@@ -19,7 +30,8 @@ class AmpacheRuby
|
|
19
30
|
end
|
20
31
|
|
21
32
|
attr_accessor :host, :path, :user, :psw, :token, :playlist
|
22
|
-
|
33
|
+
|
34
|
+
# tryies to obtain an auth token
|
23
35
|
def getAuthToken(user,psw)
|
24
36
|
action= "handshake"
|
25
37
|
# auth string
|
@@ -32,7 +44,8 @@ class AmpacheRuby
|
|
32
44
|
|
33
45
|
return doc.at("auth").content
|
34
46
|
end
|
35
|
-
|
47
|
+
|
48
|
+
# generic api method call
|
36
49
|
def callApiMethod( method, args={})
|
37
50
|
args['auth'] ||= token if token
|
38
51
|
url = path + "/server/xml.server.php?action=#{method}&#{args.keys.collect { |k| "#{k}=#{args[k]}"}.join('&')}"
|
@@ -40,7 +53,8 @@ class AmpacheRuby
|
|
40
53
|
return Nokogiri::XML(response.body)
|
41
54
|
end
|
42
55
|
|
43
|
-
|
56
|
+
# retrive artists lists from database,
|
57
|
+
# name is an optional filter
|
44
58
|
def artists(name = nil)
|
45
59
|
args = {}
|
46
60
|
args = { 'filter' => name.to_s } if name # artist search
|
data/lib/lib-classes.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'open4'
|
2
|
+
require 'timeout'
|
2
3
|
class AmpacheArtist
|
3
4
|
|
4
5
|
# include play module
|
@@ -66,7 +67,13 @@ class AmpachePlaylist
|
|
66
67
|
mplayer_options = "-slave -quiet"
|
67
68
|
mplayer = "#{options[:path]} #{mplayer_options} \"#{song.url}\""
|
68
69
|
@pid,@stdin,@stdout,@stderr = Open4.popen4(mplayer)
|
69
|
-
|
70
|
+
begin
|
71
|
+
t = Timeout::timeout(3) do
|
72
|
+
until @stdout.gets.inspect =~ /playback/ do
|
73
|
+
end
|
74
|
+
end
|
75
|
+
rescue Timeout::Error
|
76
|
+
puts "err on reading data"
|
70
77
|
end
|
71
78
|
else
|
72
79
|
begin
|
@@ -95,7 +102,6 @@ class AmpachePlaylist
|
|
95
102
|
def next
|
96
103
|
begin
|
97
104
|
@stdin.puts "pt_step 1 1" if @pid
|
98
|
-
sleep 2 #XXX sleep time .. we can't be too fast on remote playing
|
99
105
|
rescue Errno::EPIPE
|
100
106
|
puts "playlist is over"
|
101
107
|
@pid = nil
|
@@ -106,11 +112,26 @@ class AmpachePlaylist
|
|
106
112
|
return "Not playing man!" unless @pid
|
107
113
|
begin
|
108
114
|
s= ''
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
115
|
+
@tim = 0
|
116
|
+
begin
|
117
|
+
t = Timeout::timeout(3) do
|
118
|
+
#s+= get("file_name")
|
119
|
+
s+= get("meta_title")
|
120
|
+
s+= get("meta_artist")
|
121
|
+
s+= get("meta_album")
|
122
|
+
s.chomp!
|
123
|
+
end
|
124
|
+
@tim = 0
|
125
|
+
return s
|
126
|
+
rescue Timeout::Error
|
127
|
+
@tim += 1
|
128
|
+
if (@tim > 3 )
|
129
|
+
@tim = 0
|
130
|
+
return "err"
|
131
|
+
else
|
132
|
+
return nowPlaying
|
133
|
+
end
|
134
|
+
end
|
114
135
|
rescue Errno::EPIPE
|
115
136
|
return "playlist is over"
|
116
137
|
@pid = nil
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-ampache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 7
|
10
|
+
version: 0.0.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- ghedmat
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-09-
|
18
|
+
date: 2010-09-28 00:00:00 +02:00
|
19
19
|
default_executable: ruby-ampache
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|