From fc15d93f32bf84b94217ab306a452d3a39ee4063 Mon Sep 17 00:00:00 2001 From: Marius Date: Mon, 30 Sep 2013 21:00:37 +0300 Subject: beta 2013.09.30 19:49 --- scripts/context/lua/mtx-flac.lua | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) (limited to 'scripts/context/lua/mtx-flac.lua') 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\n") f:write("\t\t",lpegmatch(p_escaped,artist),"\n") f:write("\t\t\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\n") f:write("\t\t\t\t",lpegmatch(p_escaped,album),"\n") f:write("\t\t\t\t\n") @@ -179,6 +199,7 @@ local helpinfo = [[ collect albums in xml file + use pattern for locating files -- cgit v1.2.3