spfy 0.1.7 → 0.1.8
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.md +19 -18
- data/lib/spfy.rb +24 -7
- data/lib/spfy/optionreader.rb +5 -0
- data/spfy.gemspec +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -3,24 +3,27 @@
|
|
3
3
|
##Overview
|
4
4
|
**Spfy** is a command-line tool for generating [XSPF](http://xspf.org/) playlists from metadata stored in several popular audio formats, and is developed entirely in [Ruby](http://www.ruby-lang.org/). It takes one or more local directory paths as input, extracts metadata tags from any audio files that it encounters, and generates a valid XSPF playlist.
|
5
5
|
|
6
|
-
##
|
7
|
-
|
6
|
+
##Prerequisites
|
7
|
+
A working Ruby installation version 1.9 or greater is assumed for Spfy to work, but this is outside the scope of this guide. For more information refer to the [official installation procedure](http://www.ruby-lang.org/en/downloads/).
|
8
|
+
|
9
|
+
[TagLib](http://developer.kde.org/~wheeler/taglib.html) is also required for Spfy to function. Follow the steps below (taken from the [taglib-ruby installation guide](http://robinst.github.com/taglib-ruby/)) to install the necessary files for your respective system type:
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
| System: | Command: |
|
12
|
+
|---------------|------------------------------------|
|
13
|
+
| Debian/Ubuntu | `sudo apt-get install libtag1-dev` |
|
14
|
+
| Fedora/RHEL | `sudo yum install taglib-devel` |
|
15
|
+
| Brew | `brew install taglib` |
|
16
|
+
| MacPorts | `sudo port install taglib` |
|
15
17
|
|
16
|
-
|
18
|
+
##Installation
|
19
|
+
With the prerequisites above taken care of Spfy can be installed with the following command:
|
17
20
|
|
18
21
|
gem install spfy
|
19
|
-
|
20
|
-
##Using spfy
|
21
|
-
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.
|
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.
|
25
|
+
|
26
|
+
The general syntax for Spfy is `spfy [options] dir1 ... dirN`, where _dir1 ... dirN_ is one or more paths to directories containing audio files.
|
24
27
|
|
25
28
|
For example:
|
26
29
|
|
@@ -42,7 +45,7 @@ For example:
|
|
42
45
|
|
43
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.
|
44
47
|
|
45
|
-
Command-line arguments allow you to control which elements
|
48
|
+
Command-line arguments allow you to control which elements Spfy outputs:
|
46
49
|
|
47
50
|
-f, --no-location Suppress file location output
|
48
51
|
-t, --no-title Suppress track title in output
|
@@ -52,7 +55,7 @@ Command-line arguments allow you to control which elements spfy outputs:
|
|
52
55
|
For additional options use `spfy --help`.
|
53
56
|
|
54
57
|
##License
|
55
|
-
|
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.
|
56
59
|
|
57
60
|
##Acknowledgments
|
58
61
|
Spfy uses the following third party software components:
|
@@ -60,6 +63,4 @@ Spfy uses the following third party software components:
|
|
60
63
|
* [taglib-ruby](http://robinst.github.com/taglib-ruby/) by Robin Stocker
|
61
64
|
|
62
65
|
##Comments or suggestions?
|
63
|
-
|
64
|
-
|
65
|
-
Follow [@marcransome](http://www.twitter.com/marcransome) on Twitter for the latest news.
|
66
|
+
Email me at [marc.ransome@fidgetbox.co.uk](marc.ransome@fidgetbox.co.uk) with bug reports, feature requests or general comments and follow [@marcransome](http://www.twitter.com/marcransome) for updates.
|
data/lib/spfy.rb
CHANGED
@@ -26,7 +26,7 @@ require "taglib"
|
|
26
26
|
require 'find'
|
27
27
|
require 'uri'
|
28
28
|
|
29
|
-
$version = "0.1.
|
29
|
+
$version = "0.1.8"
|
30
30
|
$dirs = []
|
31
31
|
|
32
32
|
# The main Spfy class
|
@@ -72,6 +72,7 @@ class Spfy
|
|
72
72
|
# start processing source paths
|
73
73
|
begin
|
74
74
|
if options.output.any?
|
75
|
+
# source path(s) provided, output should be to disk
|
75
76
|
|
76
77
|
xmlFile = File.open(options.output[0], "w")
|
77
78
|
|
@@ -94,12 +95,13 @@ class Spfy
|
|
94
95
|
tag = fileref.tag
|
95
96
|
|
96
97
|
# skip files with no tags
|
97
|
-
next if tag.
|
98
|
+
next if tag.nil?
|
98
99
|
|
99
100
|
# write track metadata
|
100
101
|
xmlFile.write("\t\t<track>\n")
|
101
102
|
|
102
103
|
if !options.hide_location
|
104
|
+
# generate a percent encoded string from the local path
|
103
105
|
encoded_path = URI.escape(path)
|
104
106
|
xmlFile.write("\t\t\t<location>file://#{encoded_path}</location>\n")
|
105
107
|
end
|
@@ -107,6 +109,13 @@ class Spfy
|
|
107
109
|
xmlFile.write("\t\t\t<title>#{tag.title}</title>\n") if !options.hide_title and !tag.title.nil?
|
108
110
|
xmlFile.write("\t\t\t<creator>#{tag.artist}</creator>\n") if !options.hide_artist and !tag.artist.nil?
|
109
111
|
xmlFile.write("\t\t\t<album>#{tag.album}</album>\n") if !options.hide_album and !tag.album.nil?
|
112
|
+
|
113
|
+
if !options.hide_tracknum and !tag.track.nil?
|
114
|
+
if tag.track > 0
|
115
|
+
xmlFile.write("\t\t\t<trackNum>#{tag.track}</trackNum>\n")
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
110
119
|
xmlFile.write("\t\t</track>\n")
|
111
120
|
end
|
112
121
|
rescue Exception => e
|
@@ -123,7 +132,10 @@ class Spfy
|
|
123
132
|
|
124
133
|
print " success\n"
|
125
134
|
|
126
|
-
else
|
135
|
+
else
|
136
|
+
# no source path(s) provided, output to stdout
|
137
|
+
|
138
|
+
# write XSPF header
|
127
139
|
puts "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
128
140
|
puts "<playlist version=\"1\" xmlns=\"http://xspf.org/ns/0/\">\n"
|
129
141
|
puts "\t<trackList>\n"
|
@@ -140,8 +152,8 @@ class Spfy
|
|
140
152
|
tag = fileref.tag
|
141
153
|
|
142
154
|
# skip files with no tags
|
143
|
-
next if tag.
|
144
|
-
|
155
|
+
next if tag.nil?
|
156
|
+
|
145
157
|
# output track metadata
|
146
158
|
puts "\t\t<track>\n"
|
147
159
|
|
@@ -153,10 +165,15 @@ class Spfy
|
|
153
165
|
puts "\t\t\t<title>#{tag.title}</title>\n" if !options.hide_title and !tag.title.nil?
|
154
166
|
puts "\t\t\t<creator>#{tag.artist}</creator>\n" if !options.hide_artist and !tag.artist.nil?
|
155
167
|
puts "\t\t\t<album>#{tag.album}</album>\n" if !options.hide_album and !tag.album.nil?
|
168
|
+
|
169
|
+
if !options.hide_tracknum and !tag.track.nil?
|
170
|
+
if tag.track > 0
|
171
|
+
puts "\t\t\t<trackNum>#{tag.track}</trackNum>\n"
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
156
175
|
puts "\t\t</track>\n"
|
157
176
|
end
|
158
|
-
rescue SystemExit, Interrupt
|
159
|
-
# allow user interrupt
|
160
177
|
rescue Exception => e
|
161
178
|
next
|
162
179
|
end
|
data/lib/spfy/optionreader.rb
CHANGED
@@ -30,6 +30,7 @@ class OptionReader
|
|
30
30
|
options.hide_artist = false
|
31
31
|
options.hide_album = false
|
32
32
|
options.hide_location = false
|
33
|
+
options.hide_tracknum = false
|
33
34
|
|
34
35
|
opts = OptionParser.new do |opts|
|
35
36
|
opts.banner = "Usage: #{File.basename($0)} [options] dir1 ... dirN"
|
@@ -62,6 +63,10 @@ class OptionReader
|
|
62
63
|
options.hide_album = true
|
63
64
|
end
|
64
65
|
|
66
|
+
opts.on("-n", "--no-tracknum", "Suppress track number in output") do
|
67
|
+
options.hide_tracknum = true
|
68
|
+
end
|
69
|
+
|
65
70
|
opts.separator ""
|
66
71
|
opts.separator "Misc options:"
|
67
72
|
|
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.
|
24
|
+
s.version = '0.1.8'
|
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.'
|
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.
|
4
|
+
version: 0.1.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -61,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
61
61
|
version: '0'
|
62
62
|
requirements: []
|
63
63
|
rubyforge_project:
|
64
|
-
rubygems_version: 1.8.
|
64
|
+
rubygems_version: 1.8.23
|
65
65
|
signing_key:
|
66
66
|
specification_version: 3
|
67
67
|
summary: XSPF playlist generator
|