summaryrefslogtreecommitdiff
path: root/scripts/context/lua/mtx-flac.lua
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2013-09-30 21:00:37 +0300
committerMarius <mariausol@gmail.com>2013-09-30 21:00:37 +0300
commitfc15d93f32bf84b94217ab306a452d3a39ee4063 (patch)
treeb129c66bb27eaed588cf688a351ce740160ab1a7 /scripts/context/lua/mtx-flac.lua
parent8e052e94b8b3ca08900ab4fe0a5bf110f6a52327 (diff)
downloadcontext-fc15d93f32bf84b94217ab306a452d3a39ee4063.tar.gz
beta 2013.09.30 19:49
Diffstat (limited to 'scripts/context/lua/mtx-flac.lua')
-rw-r--r--scripts/context/lua/mtx-flac.lua37
1 files changed, 29 insertions, 8 deletions
diff --git a/scripts/context/lua/mtx-flac.lua b/scripts/context/lua/mtx-flac.lua
index 2155b24be..4e01abc99 100644
--- a/scripts/context/lua/mtx-flac.lua
+++ b/scripts/context/lua/mtx-flac.lua
@@ -56,11 +56,20 @@ readers.default = function(f,size,target)
f:seek("cur",size)
end
+local valid = {
+ ["fLaC"] = true,
+ ["ID3♥"] = false,
+}
+
function flac.getmetadata(filename)
local f = io.open(filename, "rb")
if f then
- local banner = readstring(f,4)
- if banner == "fLaC" then
+ local banner = readstring(f,4)
+ local whatsit = valid[banner]
+ if whatsit ~= nil then
+ if whatsit == false then
+ flac.report("suspicious flac file: %s (%s)",filename,banner)
+ end
local data = {
banner = banner,
filename = filename,
@@ -96,13 +105,14 @@ function flac.savecollection(pattern,filename)
local files = dir.glob(pattern)
flac.report("%s files found, analyzing files",#files)
local music = { }
+ table.sort(files)
for i=1,#files do
local data = flac.getmetadata(files[i])
if data then
- local tags = data.tags
- local info = data.info
- local artist = tags.artist
- local album = tags.album
+ local tags = data.tags
+ local info = data.info
+ local artist = tags.artist or "no-artist"
+ local album = tags.album or "no-album"
local albums = music[artist]
if not albums then
albums = { }
@@ -134,8 +144,18 @@ function flac.savecollection(pattern,filename)
f:write("\t<artist>\n")
f:write("\t\t<name>",lpegmatch(p_escaped,artist),"</name>\n")
f:write("\t\t<albums>\n")
- for album, data in sortedpairs(albums) do
- nofalbums = nofalbums + 1
+ local list = table.keys(albums)
+ table.sort(list,function(a,b)
+ local ya, yb = albums[a].year or 0, albums[b].year or 0
+ if ya == yb then
+ return a < b
+ else
+ return ya < yb
+ end
+ end)
+ for nofalbums=1,#list do
+ local album = list[nofalbums]
+ local data = albums[album]
f:write("\t\t\t<album year='",data.year or 0,"'>\n")
f:write("\t\t\t\t<name>",lpegmatch(p_escaped,album),"</name>\n")
f:write("\t\t\t\t<tracks>\n")
@@ -179,6 +199,7 @@ local helpinfo = [[
<category name="basic">
<subcategory>
<flag name="collect"><short>collect albums in xml file</short></flag>
+ <flag name="pattern"><short>use pattern for locating files</short></flag>
</subcategory>
</category>
</flags>