LOLastfm 0.0.3.1 → 0.0.3.2
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/lib/LOLastfm.rb +45 -11
- data/lib/LOLastfm/cache.rb +15 -15
- data/lib/LOLastfm/checkers/moc.rb +1 -2
- data/lib/LOLastfm/checkers/process.rb +14 -13
- data/lib/LOLastfm/connection.rb +1 -2
- data/lib/LOLastfm/song.rb +31 -7
- data/lib/LOLastfm/version.rb +1 -1
- metadata +2 -2
data/lib/LOLastfm.rb
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
|
11
11
|
require 'eventmachine'
|
12
12
|
require 'lastfm'
|
13
|
+
require 'stringio'
|
13
14
|
|
14
15
|
class LOLastfm
|
15
16
|
def self.load (path)
|
@@ -40,6 +41,7 @@ class LOLastfm
|
|
40
41
|
@events = Hash.new { |h, k| h[k] = [] }
|
41
42
|
|
42
43
|
cache_at '~/.LOLastfm/cache'
|
44
|
+
logs_at '~/.LOLastfm/logs'
|
43
45
|
end
|
44
46
|
|
45
47
|
def load (path)
|
@@ -66,6 +68,7 @@ class LOLastfm
|
|
66
68
|
end
|
67
69
|
|
68
70
|
@checker.start
|
71
|
+
@cache.flush!
|
69
72
|
end
|
70
73
|
|
71
74
|
def stop
|
@@ -87,6 +90,19 @@ class LOLastfm
|
|
87
90
|
end
|
88
91
|
end
|
89
92
|
|
93
|
+
def logs_at (path)
|
94
|
+
@logs_at = File.expand_path(path)
|
95
|
+
end
|
96
|
+
|
97
|
+
def server_at (host, port = nil)
|
98
|
+
if port
|
99
|
+
@host = host
|
100
|
+
@port = port
|
101
|
+
else
|
102
|
+
@path = host
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
90
106
|
def save
|
91
107
|
if @cache_at
|
92
108
|
File.open(@cache_at, 'w') {|f|
|
@@ -95,13 +111,25 @@ class LOLastfm
|
|
95
111
|
end
|
96
112
|
end
|
97
113
|
|
98
|
-
def
|
99
|
-
|
100
|
-
|
101
|
-
|
114
|
+
def log (what, group = nil)
|
115
|
+
io = StringIO.new
|
116
|
+
|
117
|
+
io.print "[#{Time.now}#{" (#{group})" if group}] "
|
118
|
+
|
119
|
+
if what.is_a? Exception
|
120
|
+
io.puts "#{what.class.name}: #{what.message}"
|
121
|
+
io.puts e.backtrace
|
102
122
|
else
|
103
|
-
|
123
|
+
io.puts what
|
104
124
|
end
|
125
|
+
|
126
|
+
io.seek 0
|
127
|
+
|
128
|
+
io.read.tap {|text|
|
129
|
+
$stderr.puts text
|
130
|
+
|
131
|
+
File.open(@logs_at, 'a') { |f| f.print text }
|
132
|
+
}
|
105
133
|
end
|
106
134
|
|
107
135
|
def session (key)
|
@@ -143,15 +171,17 @@ class LOLastfm
|
|
143
171
|
unless listened! song
|
144
172
|
@cache.listened(song)
|
145
173
|
end
|
174
|
+
|
175
|
+
@last_played = song
|
146
176
|
|
147
177
|
true
|
148
178
|
end
|
149
179
|
|
150
180
|
def listened! (song)
|
151
|
-
@session.track.scrobble(song.artist, song.title, song.listened_at.to_time.to_i, song.album, song.track, song.id, song.length)
|
152
|
-
|
153
|
-
|
154
|
-
|
181
|
+
@session.track.scrobble(song.artist, song.title, song.listened_at.to_time.to_i, song.album, song.track, song.id, song.length)
|
182
|
+
rescue Exception => e
|
183
|
+
log e, :listened
|
184
|
+
|
155
185
|
false
|
156
186
|
end
|
157
187
|
|
@@ -174,7 +204,9 @@ class LOLastfm
|
|
174
204
|
|
175
205
|
def love! (song)
|
176
206
|
@session.track.love(song.artist, song.title)
|
177
|
-
rescue
|
207
|
+
rescue Exception => e
|
208
|
+
log e, :love
|
209
|
+
|
178
210
|
false
|
179
211
|
end
|
180
212
|
|
@@ -197,7 +229,9 @@ class LOLastfm
|
|
197
229
|
|
198
230
|
def unlove! (song)
|
199
231
|
@session.track.unlove(song.artist, song.title)
|
200
|
-
rescue
|
232
|
+
rescue Exception => e
|
233
|
+
log e, :unlove
|
234
|
+
|
201
235
|
false
|
202
236
|
end
|
203
237
|
|
data/lib/LOLastfm/cache.rb
CHANGED
@@ -24,19 +24,19 @@ class Cache
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def listened (song)
|
27
|
-
return if @
|
27
|
+
return if song.nil? || @listened.member?(song)
|
28
28
|
|
29
29
|
@listened << song
|
30
30
|
end
|
31
31
|
|
32
32
|
def love (song)
|
33
|
-
return if @loved.member?
|
33
|
+
return if song.nil? || @loved.member?(song)
|
34
34
|
|
35
35
|
@loved << song
|
36
36
|
end
|
37
37
|
|
38
38
|
def unlove (song)
|
39
|
-
return if @unloved.member?
|
39
|
+
return if song.nil? || @unloved.member?(song)
|
40
40
|
|
41
41
|
@unloved << song
|
42
42
|
end
|
@@ -47,19 +47,19 @@ class Cache
|
|
47
47
|
|
48
48
|
def flush!
|
49
49
|
until @listened.empty?
|
50
|
-
break unless fm.listened! @listened.first
|
50
|
+
break unless fm.listened! Song.new(@listened.first)
|
51
51
|
|
52
52
|
@listened.shift
|
53
53
|
end
|
54
54
|
|
55
55
|
until @loved.empty?
|
56
|
-
break unless fm.love! @loved.first
|
56
|
+
break unless fm.love! Song.new(@loved.first)
|
57
57
|
|
58
58
|
@loved.shift
|
59
59
|
end
|
60
60
|
|
61
61
|
until @unloved.empty?
|
62
|
-
break unless fm.unlove! @unloved.first
|
62
|
+
break unless fm.unlove! Song.new(@unloved.first)
|
63
63
|
|
64
64
|
@unloved.shift
|
65
65
|
end
|
@@ -68,24 +68,24 @@ class Cache
|
|
68
68
|
def load (path)
|
69
69
|
data = YAML.parse_file(path).transform
|
70
70
|
|
71
|
-
data[
|
71
|
+
data[:listened].each {|song|
|
72
72
|
listened(Song.new(song))
|
73
|
-
} if data[
|
73
|
+
} if data[:listened]
|
74
74
|
|
75
|
-
data[
|
75
|
+
data[:loved].each {|song|
|
76
76
|
love(Song.new(song))
|
77
|
-
} if data[
|
77
|
+
} if data[:loved]
|
78
78
|
|
79
|
-
data[
|
79
|
+
data[:unloved].each {|song|
|
80
80
|
unlove(Song.new(song))
|
81
|
-
} if data[
|
81
|
+
} if data[:unloved]
|
82
82
|
end
|
83
83
|
|
84
84
|
def to_yaml
|
85
85
|
{
|
86
|
-
|
87
|
-
|
88
|
-
|
86
|
+
listened: @listened.map(&:to_hash),
|
87
|
+
loved: @loved.map(&:to_hash),
|
88
|
+
unloved: @unloved.map(&:to_hash)
|
89
89
|
}.to_yaml
|
90
90
|
end
|
91
91
|
end
|
@@ -11,24 +11,25 @@
|
|
11
11
|
LOLastfm.define_checker :process do
|
12
12
|
settings.default[:every] = 5
|
13
13
|
|
14
|
-
|
15
|
-
if
|
16
|
-
|
17
|
-
|
18
|
-
end
|
19
|
-
else
|
14
|
+
ENV['PATH'].split(':').each {|path|
|
15
|
+
if File.executable?("#{path}/lsof")
|
16
|
+
break settings.default[:lsof] = "#{path}/lsof"
|
20
17
|
end
|
18
|
+
}
|
21
19
|
|
22
|
-
|
20
|
+
unless settings[:name]
|
21
|
+
raise 'I need the name of the process to check'
|
23
22
|
end
|
24
23
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
24
|
+
unless settings[:lsof]
|
25
|
+
raise 'I need the path to lsof to work'
|
26
|
+
end
|
29
27
|
|
30
|
-
|
28
|
+
set_interval settings[:every] do
|
29
|
+
|
30
|
+
end
|
31
31
|
|
32
|
-
|
32
|
+
hint do |path|
|
33
|
+
listened path: path
|
33
34
|
end
|
34
35
|
end
|
data/lib/LOLastfm/connection.rb
CHANGED
@@ -70,8 +70,7 @@ class Connection < EventMachine::Protocols::LineAndTextProtocol
|
|
70
70
|
instance_exec *arguments, &block
|
71
71
|
end
|
72
72
|
rescue Exception => e
|
73
|
-
|
74
|
-
$stderr.puts e.backtrace
|
73
|
+
f.log e, "command: #{command}"
|
75
74
|
end
|
76
75
|
|
77
76
|
def respond_to_missing? (id)
|
data/lib/LOLastfm/song.rb
CHANGED
@@ -53,17 +53,25 @@ class Song
|
|
53
53
|
|
54
54
|
if @listened_at
|
55
55
|
@listened_at = @listened_at.is_a?(String) ? DateTime.parse(@listened_at) : @listened_at.to_datetime
|
56
|
-
elsif @length
|
57
|
-
@listened_at = (Time.now - @length).to_datetime
|
58
|
-
else
|
59
|
-
@listened_at = DateTime.now
|
60
56
|
end
|
61
57
|
end
|
62
58
|
|
63
|
-
def
|
64
|
-
return
|
59
|
+
def listened_at
|
60
|
+
return @listened_at if @listened_at
|
61
|
+
|
62
|
+
unless nil? || @listened_at
|
63
|
+
if @length && !stream?
|
64
|
+
@listened_at = (Time.now - @length).to_datetime
|
65
|
+
else
|
66
|
+
@listened_at = DateTime.now
|
67
|
+
end
|
68
|
+
end
|
65
69
|
|
66
|
-
|
70
|
+
@listened_at
|
71
|
+
end
|
72
|
+
|
73
|
+
def fill!
|
74
|
+
return if !@path || (@track && @title && @album && @artist && @comment && @length && @id)
|
67
75
|
|
68
76
|
TagLib::FileRef.open(@path) {|f|
|
69
77
|
if f.tag
|
@@ -140,6 +148,22 @@ class Song
|
|
140
148
|
def to_yaml
|
141
149
|
to_hash.to_yaml
|
142
150
|
end
|
151
|
+
|
152
|
+
def inspect
|
153
|
+
header = ''
|
154
|
+
header << "#{id} " if id
|
155
|
+
header << "listened at #{listened_at} " if listened_at
|
156
|
+
header << "#{length} seconds " if length
|
157
|
+
header << "found at #{path} " if path
|
158
|
+
|
159
|
+
parts = ''
|
160
|
+
parts << "track=#{track} " if track
|
161
|
+
parts << "title=#{title} " if title
|
162
|
+
parts << "artist=#{artist} " if artist
|
163
|
+
parts << "album=#{album} " if album
|
164
|
+
|
165
|
+
"#<LOLastfm::Song#{"(#{header[0 .. -2]})" unless header.empty?}:#{" #{parts[0 .. -2]}" if parts}>"
|
166
|
+
end
|
143
167
|
end
|
144
168
|
|
145
169
|
end
|
data/lib/LOLastfm/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: LOLastfm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.3.
|
4
|
+
version: 0.0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: lastfm
|