spfy 0.1.9 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -21,7 +21,7 @@ With the prerequisites above taken care of Spfy can be installed with the follow
21
21
  gem install spfy
22
22
 
23
23
  ##Using Spfy
24
- By default, Spfy will output a formatted XSPF playlist to the standard output stream that will include _location_, _title_, _artist_, and _album_ elements for each audio file where available.
24
+ By default, Spfy will output a formatted XSPF playlist to the standard output stream that will include _location_, _title_, _creator_, _album_, and _trackNum_ elements for each audio file where available.
25
25
 
26
26
  The general syntax for Spfy is `spfy [options] dir1 ... dirN`, where _dir1 ... dirN_ is one or more paths to directories containing audio files.
27
27
 
@@ -39,11 +39,12 @@ For example:
39
39
  <title>A Stitch In Time</title>
40
40
  <creator>The Smashing Pumpkins</creator>
41
41
  <album>Teargarden by Kaleidyscope</album>
42
+ <trackNum>3</trackNum>
42
43
  </track>
43
44
  </trackList>
44
45
  </playlist>
45
46
 
46
- Spfy supports multiple directory paths (e.g. `spfy /dir1 /dir2`) and traverses each directory recursively by default. Unsupported files and empty directories in a directory tree are silently ignored and will not impact spfy's output.
47
+ Spfy supports multiple directory paths (e.g. `spfy /dir1 /dir2`) and traverses each directory recursively by default. Unsupported files and empty directories in a directory tree are silently ignored and will not impact Spfy's output.
47
48
 
48
49
  Command-line arguments allow you to control which elements Spfy outputs:
49
50
 
@@ -51,11 +52,12 @@ Command-line arguments allow you to control which elements Spfy outputs:
51
52
  -t, --no-title Suppress track title in output
52
53
  -a, --no-artist Suppress artist name in output
53
54
  -l, --no-album Suppress album name in output
55
+ -n, --no-tracknum Suppress track number in output
54
56
 
55
57
  For additional options use `spfy --help`.
56
58
 
57
59
  ##License
58
- This is free software, and you are welcome to redistribute it under certain conditions. See the [GNU General Public License](http://www.gnu.org/licenses/gpl.html) for more details.
60
+ Spfy is free software, and you are welcome to redistribute it under certain conditions. See the [GNU General Public License](http://www.gnu.org/licenses/gpl.html) for more details.
59
61
 
60
62
  ##Acknowledgments
61
63
  Spfy uses the following third party software components:
@@ -31,6 +31,8 @@ class OptionReader
31
31
  options.hide_album = false
32
32
  options.hide_location = false
33
33
  options.hide_tracknum = false
34
+ options.dirs = []
35
+ options.tracks_to_process = []
34
36
 
35
37
  opts = OptionParser.new do |opts|
36
38
  opts.banner = "Usage: #{File.basename($0)} [options] dir1 ... dirN"
@@ -67,11 +69,16 @@ class OptionReader
67
69
  options.hide_tracknum = true
68
70
  end
69
71
 
72
+ opts.on("-m", "--max-tracks NUM", "Limit the output to NUM tracks") do |num|
73
+ options.tracks_to_process << num
74
+ options.track_limit = true
75
+ end
76
+
70
77
  opts.separator ""
71
78
  opts.separator "Misc options:"
72
79
 
73
80
  opts.on("-v", "--version", "Display version information") do
74
- puts "#{File.basename($0).capitalize} #{$version} Copyright (c) 2012 Marc Ransome <marc.ransome@fidgetbox.co.uk>"
81
+ puts "#{File.basename($0).capitalize} #{$spfy_version} Copyright (c) 2012 Marc Ransome <marc.ransome@fidgetbox.co.uk>"
75
82
  puts "This program comes with ABSOLUTELY NO WARRANTY, use it at your own risk."
76
83
  puts "This is free software, and you are welcome to redistribute it under"
77
84
  puts "certain conditions; type `#{File.basename($0)} --license' for details."
@@ -92,7 +99,7 @@ class OptionReader
92
99
 
93
100
  # add path to global dirs variable
94
101
  if File.directory?(dir)
95
- $dirs << dir
102
+ options.dirs << dir
96
103
  end
97
104
 
98
105
  end
data/lib/spfy.rb CHANGED
@@ -26,8 +26,7 @@ require "taglib"
26
26
  require 'find'
27
27
  require 'uri'
28
28
 
29
- $version = "0.1.9"
30
- $dirs = []
29
+ $spfy_version = "0.2.0"
31
30
 
32
31
  # The main Spfy class
33
32
  class Spfy
@@ -52,8 +51,11 @@ class Spfy
52
51
  # parse command-line arguments
53
52
  options = OptionReader.parse(ARGV)
54
53
 
54
+ # dirs for traversing
55
+ dirs = options.dirs
56
+
55
57
  # test for zero source paths
56
- if $dirs.empty?
58
+ if dirs.empty?
57
59
  puts "No source path specified."
58
60
  puts simple_usage
59
61
  exit
@@ -89,8 +91,11 @@ class Spfy
89
91
  xmlFile.write("<playlist version=\"1\" xmlns=\"http://xspf.org/ns/0/\">\n")
90
92
  xmlFile.write("\t<trackList>\n")
91
93
 
94
+ # track count for track limit option
95
+ tracks_processed = 0
96
+
92
97
  # repeat for each source dir argument
93
- $dirs.each do |dir|
98
+ dirs.each do |dir|
94
99
 
95
100
  begin
96
101
 
@@ -124,14 +129,25 @@ class Spfy
124
129
  end
125
130
 
126
131
  xmlFile.write("\t\t</track>\n")
132
+
133
+ # increment our track processed count
134
+ tracks_processed += 1
135
+
136
+ # if a maximum number track numbe has been set, test whether we have reached the limit
137
+ if options.tracks_to_process[0].to_i > 0 and tracks_processed == options.tracks_to_process[0].to_i
138
+ # write XSPF footer
139
+ xmlFile.write("\t</trackList>\n")
140
+ xmlFile.write("</playlist>\n")
141
+ xmlFile.close
142
+ print " success\n"
143
+ exit
144
+ end
127
145
  end
128
146
  end
129
- rescue SystemExit, Interrupt
147
+ rescue Interrupt
130
148
  abort("\nCancelled, exiting..")
131
- rescue Exception => e
132
- next
133
149
  end # begin
134
- end # $dirs.each do |dir|
150
+ end # dirs.each do |dir|
135
151
 
136
152
  # write XSPF footer
137
153
  xmlFile.write("\t</trackList>\n")
@@ -149,8 +165,11 @@ class Spfy
149
165
  puts "<playlist version=\"1\" xmlns=\"http://xspf.org/ns/0/\">\n"
150
166
  puts "\t<trackList>\n"
151
167
 
168
+ # track count for track limit option
169
+ tracks_processed = 0
170
+
152
171
  # repeat for each source dir argument
153
- $dirs.each do |dir|
172
+ dirs.each do |dir|
154
173
 
155
174
  begin
156
175
 
@@ -183,14 +202,23 @@ class Spfy
183
202
  end
184
203
 
185
204
  puts "\t\t</track>\n"
205
+
206
+ # increment our track processed count
207
+ tracks_processed += 1
208
+
209
+ # if a maximum number track numbe has been set, test whether we have reached the limit
210
+ if options.tracks_to_process[0].to_i > 0 and tracks_processed == options.tracks_to_process[0].to_i
211
+ # output XSPF footer
212
+ puts "\t</trackList>\n"
213
+ puts "</playlist>\n"
214
+ exit
215
+ end
186
216
  end
187
217
  end
188
- rescue SystemExit, Interrupt
218
+ rescue Interrupt
189
219
  abort("\nCancelled, exiting..")
190
- rescue Exception => e
191
- next
192
220
  end # begin
193
- end # $dirs.each do |dir|
221
+ end # dirs.each do |dir|
194
222
 
195
223
  # write XSPF footer
196
224
  puts "\t</trackList>\n"
data/spfy.gemspec CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  Gem::Specification.new do |s|
23
23
  s.name = 'spfy'
24
- s.version = '0.1.9'
24
+ s.version = '0.2.0'
25
25
  s.date = '2012-05-06'
26
26
  s.summary = 'XSPF playlist generator'
27
27
  s.description = 'Spfy is a simple command-line tool for generating XSPF playlists from metadata stored in several popular audio formats.'
@@ -31,4 +31,5 @@ Gem::Specification.new do |s|
31
31
  s.executables << 'spfy'
32
32
  s.add_runtime_dependency 'taglib-ruby', '>= 0.5.0'
33
33
  s.homepage = 'http://marcransome.github.com/spfy'
34
- end
34
+ s.license = 'GPL-3'
35
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spfy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -42,7 +42,8 @@ files:
42
42
  - license.txt
43
43
  - spfy.gemspec
44
44
  homepage: http://marcransome.github.com/spfy
45
- licenses: []
45
+ licenses:
46
+ - GPL-3
46
47
  post_install_message:
47
48
  rdoc_options: []
48
49
  require_paths: