spfy 0.1 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/spfy/optionreader.rb +1 -6
- data/lib/spfy.rb +68 -59
- data/spfy.gemspec +2 -2
- metadata +3 -3
data/lib/spfy/optionreader.rb
CHANGED
@@ -8,10 +8,9 @@ class OptionReader
|
|
8
8
|
options.hide_title = false
|
9
9
|
options.hide_artist = false
|
10
10
|
options.hide_album = false
|
11
|
-
options.hide_tracknum = false
|
12
11
|
|
13
12
|
opts = OptionParser.new do |opts|
|
14
|
-
opts.banner = "Usage: #{File.basename($0)} [options] [
|
13
|
+
opts.banner = "Usage: #{File.basename($0)} [options] [dir1 ... dirx]"
|
15
14
|
|
16
15
|
opts.separator ""
|
17
16
|
opts.separator "Output:"
|
@@ -32,10 +31,6 @@ class OptionReader
|
|
32
31
|
options.hide_album = true
|
33
32
|
end
|
34
33
|
|
35
|
-
opts.on("-n", "--no-tracknum", "Suppress track number in output") do
|
36
|
-
options.hide_tracknum = true
|
37
|
-
end
|
38
|
-
|
39
34
|
opts.separator ""
|
40
35
|
opts.separator "Common options:"
|
41
36
|
|
data/lib/spfy.rb
CHANGED
@@ -24,15 +24,18 @@ require "optparse"
|
|
24
24
|
require "ostruct"
|
25
25
|
require "taglib"
|
26
26
|
|
27
|
-
$version = "0.1"
|
27
|
+
$version = "0.1.1"
|
28
28
|
$dirs = []
|
29
29
|
|
30
|
+
# The main Spfy class
|
30
31
|
class Spfy
|
31
32
|
|
33
|
+
##
|
34
|
+
# Starts the XSPF generator.
|
35
|
+
#
|
32
36
|
def self.generate
|
33
|
-
|
34
|
-
#
|
35
|
-
#
|
37
|
+
|
38
|
+
# start processing command line arguments
|
36
39
|
begin
|
37
40
|
|
38
41
|
# short usage banner
|
@@ -64,85 +67,90 @@ class Spfy
|
|
64
67
|
exit
|
65
68
|
end
|
66
69
|
|
67
|
-
#
|
68
|
-
# Process valid paths
|
69
|
-
#
|
70
|
+
# start processing source paths
|
70
71
|
begin
|
71
72
|
if options.output.any?
|
72
|
-
|
73
|
-
# test whether there is an option for data to output
|
74
|
-
if options.hide_title and options.hide_artist and options.hide_album
|
75
|
-
|
76
|
-
# all data has been suppressed, report to user
|
77
|
-
puts "All tags suppressed, no XML file created."
|
78
|
-
exit
|
79
|
-
end
|
80
73
|
|
81
74
|
xmlFile = File.open(options.output[0], "w")
|
82
75
|
|
83
76
|
print "Generating XML.."
|
84
|
-
|
77
|
+
|
78
|
+
# write XSPF header
|
85
79
|
xmlFile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
|
86
|
-
xmlFile.write("<playlist version=\"1\" xmlns=\"http
|
80
|
+
xmlFile.write("<playlist version=\"1\" xmlns=\"http://xspf.org/ns/0/\">\n")
|
87
81
|
xmlFile.write("\t<trackList>\n")
|
88
82
|
|
89
|
-
|
90
|
-
|
91
|
-
next if file.start_with? '.'
|
83
|
+
# repeat for each source path specified
|
84
|
+
$dirs.each do |path|
|
92
85
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
86
|
+
# repeat for each file
|
87
|
+
Dir.foreach(path).sort.each do |file|
|
88
|
+
next if file == '.' or file == '..' or
|
89
|
+
next if file.start_with? '.'
|
90
|
+
|
91
|
+
begin
|
92
|
+
TagLib::FileRef.open(path + "/" + file) do |fileref|
|
93
|
+
|
94
|
+
tag = fileref.tag
|
95
|
+
|
96
|
+
# skip files with no tags
|
97
|
+
next if tag.title.empty? and tag.artist.empty? and tag.album.empty? and tag.track.empty?
|
98
|
+
|
99
|
+
# write track metadata
|
100
|
+
xmlFile.write("\t\t<track>\n")
|
101
|
+
#xmlFile.write("\t\t<location>file:/#{path}#{file}</location>\n")
|
102
|
+
xmlFile.write("\t\t\t<title>#{tag.title}</title>\n") if !options.hide_title and !tag.title.empty?
|
103
|
+
xmlFile.write("\t\t\t<creator>#{tag.artist}</creator>\n") if !options.hide_artist and !tag.artist.empty?
|
104
|
+
xmlFile.write("\t\t\t<album>#{tag.album}</album>\n") if !options.hide_album and !tag.album.empty?
|
105
|
+
xmlFile.write("\t\t</track>\n")
|
106
|
+
end
|
107
|
+
rescue Exception => e
|
108
|
+
next
|
108
109
|
end
|
109
|
-
rescue Exception => e
|
110
|
-
next
|
111
110
|
end
|
112
111
|
end
|
113
112
|
|
113
|
+
# write XSPF footer
|
114
114
|
xmlFile.write("\t</trackList>\n")
|
115
115
|
xmlFile.write("</playlist>\n")
|
116
|
+
|
116
117
|
xmlFile.close
|
117
118
|
|
118
119
|
print " success\n"
|
120
|
+
|
119
121
|
else
|
120
122
|
puts "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
121
|
-
puts "<playlist version=\"1\" xmlns=\"http
|
123
|
+
puts "<playlist version=\"1\" xmlns=\"http://xspf.org/ns/0/\">\n"
|
122
124
|
puts "\t<trackList>\n"
|
123
125
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
126
|
+
# repeat for each source path
|
127
|
+
$dirs.each do |path|
|
128
|
+
|
129
|
+
# repeat for each file
|
130
|
+
Dir.foreach(path).sort.each do |file|
|
131
|
+
next if file == '.' or file == '..' or
|
132
|
+
next if file.start_with? '.'
|
130
133
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
next if tag.title.empty? and tag.artist.empty? and tag.album.empty?
|
135
|
-
|
136
|
-
puts "\t\t<track>\n"
|
137
|
-
#xmlFile.write("\t\t\t<location>http:##{host}#{musicDir}/#{file}</location>\n")
|
138
|
-
puts "\t\t\t<title>#{tag.title}</title>\n"
|
139
|
-
puts "\t\t\t<creator>#{tag.artist}</creator>\n"
|
140
|
-
puts "\t\t\t<album>#{tag.album}</album>\n"
|
141
|
-
puts "\t\t</track>\n"
|
134
|
+
begin
|
135
|
+
# FIX THIS AS IT MAY NOT WORK MULTIPLATFORM!!!
|
136
|
+
TagLib::FileRef.open(path + "/" + file) do |fileref|
|
142
137
|
|
138
|
+
tag = fileref.tag
|
139
|
+
|
140
|
+
# skip files with no tags
|
141
|
+
next if tag.title.empty? and tag.artist.empty? and tag.album.empty? and tag.track.empty?
|
142
|
+
|
143
|
+
# write track metadata
|
144
|
+
puts "\t\t<track>\n"
|
145
|
+
#puts "\t\t\t<location>file:/#{path}#{file}</location>"
|
146
|
+
puts "\t\t\t<title>#{tag.title}</title>\n" if !options.hide_title and !tag.title.empty?
|
147
|
+
puts "\t\t\t<creator>#{tag.artist}</creator>\n" if !options.hide_artist and !tag.artist.empty?
|
148
|
+
puts "\t\t\t<album>#{tag.album}</album>\n" if !options.hide_album and !tag.album.empty?
|
149
|
+
puts "\t\t</track>\n"
|
150
|
+
end
|
151
|
+
rescue Exception => e
|
152
|
+
next
|
143
153
|
end
|
144
|
-
rescue Exception => e
|
145
|
-
next
|
146
154
|
end
|
147
155
|
end
|
148
156
|
|
@@ -156,6 +164,7 @@ class Spfy
|
|
156
164
|
abort("Exiting.. (#{e})")
|
157
165
|
end
|
158
166
|
|
159
|
-
end
|
160
|
-
|
167
|
+
end # def self.generate
|
168
|
+
|
169
|
+
end # class Spyf
|
161
170
|
|
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.1'
|
25
25
|
s.date = '2012-05-05'
|
26
26
|
s.summary = 'XSPF playlist generator.'
|
27
27
|
s.description = 'Spfy is a simple command-line ruby tool for generating XSPF playlists from metadata stored in several popular audio formats.'
|
@@ -30,5 +30,5 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.files = `git ls-files`.split("\n")
|
31
31
|
s.executables << 'spfy'
|
32
32
|
s.add_runtime_dependency 'taglib-ruby', '>= 0.5.0'
|
33
|
-
s.homepage = 'http://
|
33
|
+
s.homepage = 'http://github.com/marcransome/spfy'
|
34
34
|
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:
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -41,7 +41,7 @@ files:
|
|
41
41
|
- lib/spfy/optionreader.rb
|
42
42
|
- license.txt
|
43
43
|
- spfy.gemspec
|
44
|
-
homepage: http://
|
44
|
+
homepage: http://github.com/marcransome/spfy
|
45
45
|
licenses: []
|
46
46
|
post_install_message:
|
47
47
|
rdoc_options: []
|
@@ -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.
|