lastfm-m3u 0.2.5.1 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: de09e3f4d00705ab33a9cb6b5d4abd3f2b8b2c01
4
+ data.tar.gz: 12c27431e6ed373a1c46b53f9aaa5f4a480a9fce
5
+ SHA512:
6
+ metadata.gz: 52e2a0c7502745c51bb243d75cda886b8468858d9259b525e792cad549404b4bb86f8f889ec3df348ffbdee8528f669532f3c2cbdec38407b516a4740137b0e3
7
+ data.tar.gz: 27078025fb27b0e45389aa9db8ffa10a5999fbee453bb99061e7d07b9dc118b2567a5a04ebbb9d22a8173109642ea66ce25d2c881c567b05a4c89e92558fb55d
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ lastfm-m3u
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.0.0-p353
data/.travis.yml CHANGED
@@ -1,8 +1,5 @@
1
1
  language: ruby
2
2
  bundler_args: --without development
3
3
  rvm:
4
- - 1.9.2
5
4
  - 1.9.3
6
5
  - 2.0.0
7
- - ruby-head
8
- - jruby-19mode
data/Gemfile CHANGED
@@ -5,7 +5,12 @@ gemspec
5
5
  gem 'rake'
6
6
 
7
7
  group :test do
8
- gem 'rspec', '~> 2.13.0'
9
- gem 'simplecov', '~> 0.7.1'
8
+ gem 'rspec', '~> 2.13.0'
9
+ gem 'simplecov', '~> 0.7.1'
10
+ gem 'guard-rspec', '~> 2.5'
11
+ gem 'guard-ctags-bundler', '~> 0.1'
12
+ gem 'terminal-notifier-guard', '~> 1.5'
13
+ gem 'rb-fsevent', '~> 0.9'
14
+ gem 'pry-debugger', '~> 0.2'
10
15
  gem 'coveralls', require: false
11
16
  end
data/bin/lastfm-m3u CHANGED
@@ -3,7 +3,6 @@ require 'rubygems'
3
3
  require 'optparse'
4
4
  require 'ostruct'
5
5
  require 'highline/import'
6
- require 'ruby-progressbar'
7
6
 
8
7
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
9
8
  require 'lastfm-m3u'
@@ -98,7 +97,12 @@ if options.init
98
97
  end
99
98
 
100
99
  unless options.artists
101
- puts "Please provide at least one artist (-a Elvis).".color(:red) + " See".color(:green) + " --help".color(:yellow) + " for usage or".color(:green) + " --init".color(:yellow) + " to get started".color(:green)
100
+ puts "Please provide at least one artist (-a Elvis).".color(:red) +
101
+ " See".color(:green) +
102
+ " --help".color(:yellow) +
103
+ " for usage or".color(:green) +
104
+ " --init".color(:yellow) +
105
+ " to get started".color(:green)
102
106
  exit
103
107
  end
104
108
 
@@ -108,16 +112,13 @@ end
108
112
 
109
113
  options.artists.each do |artist|
110
114
  not_found = []
111
- lastfm = LastfmM3u::Lastfm.new(artist)
112
- lastfm.root_dir = options.directory if options.directory
113
- lastfm.limit = options.limit if options.limit
115
+ lastfm = LastfmM3u::Lastfm.new(artist, options)
114
116
 
115
117
  puts
116
118
  puts "Searching filesystem with method: ".color(:green) + options.type.to_s.capitalize.color(:yellow)
117
119
  puts
118
120
  num_tracks = (options.limit.nil? ? lastfm.tracks.size : options.limit)
119
- progressbar = ProgressBar.create(starting_at: 0, total: num_tracks, format: "%a".color(:cyan) + "|".color(:magenta) + "%B".color(:green) + "|".color(:magenta) + "%p%%".color(:cyan))
120
- lastfm.find_tracks(options.type, progressbar).each do |track, track_set|
121
+ lastfm.find_tracks(options.type, false).each do |track, track_set|
121
122
  if track_set.empty?
122
123
  not_found << track
123
124
  next
data/lastfm-m3u.gemspec CHANGED
@@ -15,17 +15,9 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = LastfmM3u::VERSION
17
17
 
18
- gem.add_development_dependency 'guard-rspec', '~> 2.5'
19
- gem.add_development_dependency 'guard-ctags-bundler', '~> 0.1'
20
- gem.add_development_dependency 'terminal-notifier-guard', '~> 1.5'
21
- gem.add_development_dependency 'rb-fsevent', '~> 0.9'
22
- gem.add_development_dependency 'debugger', '~> 1.5'
23
- gem.add_development_dependency 'pry-debugger', '~> 0.2'
24
-
25
18
  gem.add_dependency 'rockstar', '~> 0.7'
26
19
  gem.add_dependency 'ruby-mp3info', '~> 0.8'
27
20
  gem.add_dependency 'rainbow', '~> 1.1'
28
- gem.add_dependency 'ansi', '~> 1.4' # color logging
29
21
  gem.add_dependency 'm3uzi', '~> 0.5'
30
22
  gem.add_dependency 'highline', '~> 1.6'
31
23
  gem.add_dependency 'ruby-progressbar', '~> 1.1'
data/lib/lastfm-m3u.rb CHANGED
@@ -6,7 +6,6 @@ require 'lastfm-m3u/version'
6
6
  require 'rockstar'
7
7
  require 'm3uzi'
8
8
  require 'rainbow'
9
- require 'ansi/logger'
10
9
 
11
10
  require 'lastfm-m3u/base'
12
11
  require 'lastfm-m3u/lastfm'
@@ -14,7 +13,7 @@ require 'lastfm-m3u/search/file_search'
14
13
  require 'lastfm-m3u/mp3_info_ext'
15
14
 
16
15
  module LastfmM3u
17
- $logger = ANSI::Logger.new(STDOUT)
16
+ $logger = Logger.new(STDOUT)
18
17
  $logger.level = 3 # errors only
19
18
  SEARCH_TYPES = [:file, :id3, :both]
20
19
  end
@@ -1,42 +1,31 @@
1
1
  require 'fileutils'
2
+ require 'ruby-progressbar'
2
3
 
3
4
  module LastfmM3u
4
5
  class Lastfm < Base
5
6
  attr_accessor :artist, :root_dir, :limit, :tracks
6
7
 
7
- def initialize(artist, root_dir='/home/jon/music/trance')
8
+ def initialize(artist, options=OpenStruct.new)
8
9
  init_config
9
10
  set_artist(artist)
10
11
  set_top_tracks
11
- @root_dir = root_dir
12
- @limit = nil
12
+ @root_dir = options.directory
13
+ @limit = options.limit
14
+ @search_type = options.type || :file
13
15
  super()
14
16
  end
15
17
 
16
18
  def set_artist(artist)
17
- @artist = Rockstar::Artist.new artist
19
+ @artist = Rockstar::Artist.new(artist)
18
20
  end
19
21
 
20
22
  def set_top_tracks
21
23
  @tracks = @artist.top_tracks
22
24
  end
23
25
 
24
- def find_tracks(search_type = :file, progressbar = nil)
25
- begin
26
- raise InvalidSearchType unless SEARCH_TYPES.include?(search_type)
27
- rescue InvalidSearchType
28
- $logger.error("Invalid Search Type '#{search_type}', use one of #{SEARCH_TYPES.join(',')}")
29
- exit
30
- end
31
- found_tracks = {}
32
- search = LastfmM3u::FileSearch.new(root_dir)
33
- self.limit ||= tracks.size
34
- tracks[0..limit-1].each do |track|
35
- track.name = CGI.unescapeHTML(track.name)
36
- found_tracks[track.name] = search.find(track.name, {search_type: search_type})
37
- progressbar.increment if progressbar
38
- end
39
- found_tracks
26
+ def find_tracks(search_type=@search_type, progressbar=false)
27
+ check_for_invalid_search_type(search_type)
28
+ found_tracks(tracks, search_type, progressbar)
40
29
  end
41
30
 
42
31
 
@@ -69,6 +58,39 @@ module LastfmM3u
69
58
  def invalid_config?(config_hash)
70
59
  config_hash.values.any? {|v| v==''}
71
60
  end
61
+
62
+ def search(search_type, track)
63
+ case search_type
64
+ when :file, :id3, :both
65
+ LastfmM3u::FileSearch.new(root_dir).find(track.name, {search_type: search_type})
66
+ end
67
+ end
68
+
69
+ def found_tracks(tracks, search_type, show_progressbar)
70
+ self.limit ||= tracks.size
71
+ progressbar = progressbar
72
+ tracks[0..limit-1].each_with_object({}) do |track, found_tracks|
73
+ track.name = CGI.unescapeHTML(track.name)
74
+ found_tracks[track.name] = search(search_type, track)
75
+ progressbar.increment if show_progressbar
76
+ end
77
+ end
78
+
79
+ def check_for_invalid_search_type(search_type=@search_type)
80
+ begin
81
+ raise InvalidSearchType unless SEARCH_TYPES.include?(search_type)
82
+ rescue InvalidSearchType
83
+ $logger.error("Invalid Search Type '#{search_type}', use one of #{SEARCH_TYPES.join(',')}")
84
+ exit
85
+ end
86
+ end
87
+ end
88
+
89
+ def progressbar
90
+ ProgressBar.create(
91
+ starting_at: 0,
92
+ total: num_tracks,
93
+ format: "%a".color(:cyan) + "|".color(:magenta) + "%B".color(:green) + "|".color(:magenta) + "%p%%".color(:cyan))
72
94
  end
73
95
 
74
96
  class InvalidSearchType < Exception; end
@@ -19,14 +19,13 @@ module LastfmM3u
19
19
  prefer_flac = options[:prefer_flac] || true
20
20
 
21
21
  files = find_unique_files(query, query_type, file_or_id3)
22
- if prefer_flac && !(flac_files=trim_non_flac(files)).empty?
23
- files = flac_files
22
+ if prefer_flac
23
+ files = flac_files(files) || files
24
24
  end
25
25
  $logger.debug "#{query} => #{files}"
26
26
  files
27
27
  end
28
28
 
29
-
30
29
  private
31
30
 
32
31
  def find_unique_files(query, query_type, file_or_id3)
@@ -93,6 +92,10 @@ module LastfmM3u
93
92
  pathname.basename.to_s.gsub('-', ' ').gsub('_', ' ').sub(/#{pathname.extname}$/, '')
94
93
  end
95
94
 
95
+ def flac_files(files)
96
+ !trim_non_flac(files).empty? && trim_non_flac(files)
97
+ end
98
+
96
99
  def trim_non_flac(pathnames)
97
100
  pathnames.select{|pn| pn.to_s =~ /\.flac$/}
98
101
  end
@@ -1,3 +1,3 @@
1
1
  module LastfmM3u
2
- VERSION = "0.2.5.1"
2
+ VERSION = "0.3"
3
3
  end
data/spec/lastfm_spec.rb CHANGED
@@ -2,10 +2,12 @@ require 'spec_helper'
2
2
  require 'ostruct'
3
3
 
4
4
  describe LastfmM3u::Lastfm do
5
+ let(:options) { OpenStruct.new(directory: music_dir, search_type: :file) }
6
+
5
7
  it "should successfully run full circle" do
6
8
  YAML.stub(:load_file).and_return({api_key: 'key', api_secret: 'secret'})
7
9
  track = OpenStruct.new(name: 'Poa Alpina')
8
- lf = LastfmM3u::Lastfm.new('Biosphere', music_dir)
10
+ lf = LastfmM3u::Lastfm.new('Biosphere', options)
9
11
  lf.send(:tracks=, [track])
10
12
  found = lf.find_tracks
11
13
  found.should == { track.name => ["#{music_dir}/biosphere/poa-alpina.mp3"] }
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LastfmM3u::FileSearch do
4
- before { ANSI::Logger.any_instance.stub(:warn => false, :info => false, :debug => false) } # quiet logging
4
+ before { Logger.any_instance.stub(:warn => false, :info => false, :debug => false) } # quiet logging
5
5
 
6
6
  let(:file_search) { LastfmM3u::FileSearch.new(music_dir) }
7
7
 
@@ -51,16 +51,16 @@ describe LastfmM3u::FileSearch do
51
51
  end
52
52
  end
53
53
 
54
+ context "prefer flac" do
55
+ it "should only return flac files if any found" do
56
+ file_search.find('flac song', {search_type: :file}).to_s.should match /flac_song.flac/
57
+ end
58
+
54
59
  context "artist or album" do
55
60
  it "should find an artist or album directory" do
56
61
  file_search.find('biosphere', {query_type: :artist, search_type: :file}).to_s.should match /biosphere/
57
62
  end
58
63
  end
59
-
60
- context "prefer flac" do
61
- it "should only return flac files if any found" do
62
- pending
63
- end
64
64
  end
65
65
  end
66
66
 
File without changes
metadata CHANGED
@@ -1,116 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lastfm-m3u
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5.1
5
- prerelease:
4
+ version: '0.3'
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jon Austin
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-02 00:00:00.000000000 Z
11
+ date: 2014-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: guard-rspec
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '2.5'
22
- type: :development
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: '2.5'
30
- - !ruby/object:Gem::Dependency
31
- name: guard-ctags-bundler
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: '0.1'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: '0.1'
46
- - !ruby/object:Gem::Dependency
47
- name: terminal-notifier-guard
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: '1.5'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '1.5'
62
- - !ruby/object:Gem::Dependency
63
- name: rb-fsevent
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: '0.9'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: '0.9'
78
- - !ruby/object:Gem::Dependency
79
- name: debugger
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ~>
84
- - !ruby/object:Gem::Version
85
- version: '1.5'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ~>
92
- - !ruby/object:Gem::Version
93
- version: '1.5'
94
- - !ruby/object:Gem::Dependency
95
- name: pry-debugger
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ~>
100
- - !ruby/object:Gem::Version
101
- version: '0.2'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ~>
108
- - !ruby/object:Gem::Version
109
- version: '0.2'
110
13
  - !ruby/object:Gem::Dependency
111
14
  name: rockstar
112
15
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
16
  requirements:
115
17
  - - ~>
116
18
  - !ruby/object:Gem::Version
@@ -118,7 +20,6 @@ dependencies:
118
20
  type: :runtime
119
21
  prerelease: false
120
22
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
23
  requirements:
123
24
  - - ~>
124
25
  - !ruby/object:Gem::Version
@@ -126,7 +27,6 @@ dependencies:
126
27
  - !ruby/object:Gem::Dependency
127
28
  name: ruby-mp3info
128
29
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
30
  requirements:
131
31
  - - ~>
132
32
  - !ruby/object:Gem::Version
@@ -134,7 +34,6 @@ dependencies:
134
34
  type: :runtime
135
35
  prerelease: false
136
36
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
37
  requirements:
139
38
  - - ~>
140
39
  - !ruby/object:Gem::Version
@@ -142,7 +41,6 @@ dependencies:
142
41
  - !ruby/object:Gem::Dependency
143
42
  name: rainbow
144
43
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
44
  requirements:
147
45
  - - ~>
148
46
  - !ruby/object:Gem::Version
@@ -150,31 +48,13 @@ dependencies:
150
48
  type: :runtime
151
49
  prerelease: false
152
50
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
51
  requirements:
155
52
  - - ~>
156
53
  - !ruby/object:Gem::Version
157
54
  version: '1.1'
158
- - !ruby/object:Gem::Dependency
159
- name: ansi
160
- requirement: !ruby/object:Gem::Requirement
161
- none: false
162
- requirements:
163
- - - ~>
164
- - !ruby/object:Gem::Version
165
- version: '1.4'
166
- type: :runtime
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
- requirements:
171
- - - ~>
172
- - !ruby/object:Gem::Version
173
- version: '1.4'
174
55
  - !ruby/object:Gem::Dependency
175
56
  name: m3uzi
176
57
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
58
  requirements:
179
59
  - - ~>
180
60
  - !ruby/object:Gem::Version
@@ -182,7 +62,6 @@ dependencies:
182
62
  type: :runtime
183
63
  prerelease: false
184
64
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
65
  requirements:
187
66
  - - ~>
188
67
  - !ruby/object:Gem::Version
@@ -190,7 +69,6 @@ dependencies:
190
69
  - !ruby/object:Gem::Dependency
191
70
  name: highline
192
71
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
72
  requirements:
195
73
  - - ~>
196
74
  - !ruby/object:Gem::Version
@@ -198,7 +76,6 @@ dependencies:
198
76
  type: :runtime
199
77
  prerelease: false
200
78
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
79
  requirements:
203
80
  - - ~>
204
81
  - !ruby/object:Gem::Version
@@ -206,7 +83,6 @@ dependencies:
206
83
  - !ruby/object:Gem::Dependency
207
84
  name: ruby-progressbar
208
85
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
86
  requirements:
211
87
  - - ~>
212
88
  - !ruby/object:Gem::Version
@@ -214,7 +90,6 @@ dependencies:
214
90
  type: :runtime
215
91
  prerelease: false
216
92
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
93
  requirements:
219
94
  - - ~>
220
95
  - !ruby/object:Gem::Version
@@ -230,6 +105,8 @@ files:
230
105
  - .coveralls.yml
231
106
  - .gitignore
232
107
  - .rspec
108
+ - .ruby-gemset
109
+ - .ruby-version
233
110
  - .travis.yml
234
111
  - Gemfile
235
112
  - Guardfile
@@ -253,39 +130,33 @@ files:
253
130
  - spec/spec_helper.rb
254
131
  - spec/support/fixtures/music/biosphere/poa-alpina.mp3
255
132
  - spec/support/fixtures/music/flac_song.flac
133
+ - spec/support/fixtures/music/flac_song.mp3
256
134
  - spec/support/fixtures/music/id3v1.mp3
257
135
  - spec/support/fixtures/music/id3v2.mp3
258
136
  - spec/support/fixtures/music/sid_vicious/05._stepping_stone.mp3
259
137
  - spec/support/fixtures/music/sid_vicious/my_way.mp3
260
138
  homepage: https://github.com/jonaustin/lastfm-m3u
261
139
  licenses: []
140
+ metadata: {}
262
141
  post_install_message:
263
142
  rdoc_options: []
264
143
  require_paths:
265
144
  - lib
266
145
  required_ruby_version: !ruby/object:Gem::Requirement
267
- none: false
268
146
  requirements:
269
- - - ! '>='
147
+ - - '>='
270
148
  - !ruby/object:Gem::Version
271
149
  version: '0'
272
- segments:
273
- - 0
274
- hash: -587761823380421897
275
150
  required_rubygems_version: !ruby/object:Gem::Requirement
276
- none: false
277
151
  requirements:
278
- - - ! '>='
152
+ - - '>='
279
153
  - !ruby/object:Gem::Version
280
154
  version: '0'
281
- segments:
282
- - 0
283
- hash: -587761823380421897
284
155
  requirements: []
285
156
  rubyforge_project:
286
- rubygems_version: 1.8.25
157
+ rubygems_version: 2.1.11
287
158
  signing_key:
288
- specification_version: 3
159
+ specification_version: 4
289
160
  summary: CLI tool to create m3u playlists of top artist tracks according to lastfm
290
161
  test_files:
291
162
  - spec/lastfm_spec.rb
@@ -293,6 +164,7 @@ test_files:
293
164
  - spec/spec_helper.rb
294
165
  - spec/support/fixtures/music/biosphere/poa-alpina.mp3
295
166
  - spec/support/fixtures/music/flac_song.flac
167
+ - spec/support/fixtures/music/flac_song.mp3
296
168
  - spec/support/fixtures/music/id3v1.mp3
297
169
  - spec/support/fixtures/music/id3v2.mp3
298
170
  - spec/support/fixtures/music/sid_vicious/05._stepping_stone.mp3