forked from len0rd/rockbox
lua update tagnav.lua with reload menu and bug fixes
Change-Id: I0e7364a3432bf867cb368c131bf83643115f9d0b
This commit is contained in:
parent
501404d703
commit
9d2af8777f
2 changed files with 61 additions and 25 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
--dbgettags.lua Bilgus 2018
|
-- dbgettags.lua Bilgus 2017
|
||||||
--[[
|
--[[
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* __________ __ ___.
|
* __________ __ ___.
|
||||||
|
|
@ -48,10 +48,11 @@ end
|
||||||
|
|
||||||
-- uses database files to retrieve database tags
|
-- uses database files to retrieve database tags
|
||||||
-- adds all unique tags into a lua table
|
-- adds all unique tags into a lua table
|
||||||
function get_tags(filename, hstr)
|
-- ftable is optional
|
||||||
|
function get_tags(filename, hstr, ftable)
|
||||||
|
|
||||||
if not filename then return end
|
if not filename then return end
|
||||||
|
if not ftable then ftable = {} end
|
||||||
hstr = hstr or filename
|
hstr = hstr or filename
|
||||||
|
|
||||||
local file = io.open('/' .. filename or "", "r") --read
|
local file = io.open('/' .. filename or "", "r") --read
|
||||||
|
|
@ -70,6 +71,7 @@ function get_tags(filename, hstr)
|
||||||
return file:read(count)
|
return file:read(count)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- check the header and get size + #entries
|
||||||
local tagcache_header = readchrs(DATASZ) or ""
|
local tagcache_header = readchrs(DATASZ) or ""
|
||||||
local tagcache_sz = readchrs(DATASZ) or ""
|
local tagcache_sz = readchrs(DATASZ) or ""
|
||||||
local tagcache_entries = readchrs(DATASZ) or ""
|
local tagcache_entries = readchrs(DATASZ) or ""
|
||||||
|
|
@ -82,8 +84,8 @@ function get_tags(filename, hstr)
|
||||||
|
|
||||||
-- local tag_entries = bytesLE_n(tagcache_entries)
|
-- local tag_entries = bytesLE_n(tagcache_entries)
|
||||||
|
|
||||||
local ftable = {}
|
for k, v in pairs(ftable) do ftable[k] = nil end -- clear table
|
||||||
table.insert(ftable, 1, hstr)
|
ftable[1] = hstr
|
||||||
|
|
||||||
local tline = #ftable + 1
|
local tline = #ftable + 1
|
||||||
ftable[tline] = ""
|
ftable[tline] = ""
|
||||||
|
|
@ -94,7 +96,7 @@ function get_tags(filename, hstr)
|
||||||
tag_len = bytesLE_n(readchrs(DATASZ))
|
tag_len = bytesLE_n(readchrs(DATASZ))
|
||||||
readchrs(DATASZ) -- idx = bytesLE_n(readchrs(DATASZ))
|
readchrs(DATASZ) -- idx = bytesLE_n(readchrs(DATASZ))
|
||||||
str = readchrs(tag_len) or ""
|
str = readchrs(tag_len) or ""
|
||||||
str = string.match(str, "(%Z+)%z")
|
str = string.match(str, "(%Z+)%z") -- \0 terminated string
|
||||||
|
|
||||||
if str then
|
if str then
|
||||||
if ftable[tline - 1] ~= str then -- Remove dupes
|
if ftable[tline - 1] ~= str then -- Remove dupes
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,26 @@
|
||||||
-- BILGUS 2018
|
-- tagnav.lua BILGUS 2018
|
||||||
|
--[[
|
||||||
|
/***************************************************************************
|
||||||
|
* __________ __ ___.
|
||||||
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||||
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||||
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||||
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||||
|
* \/ \/ \/ \/ \/
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 William Wilgus
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
]]
|
||||||
|
|
||||||
--local scrpath = rb.current_path()"
|
--local scrpath = rb.current_path()"
|
||||||
|
|
||||||
|
|
@ -18,10 +40,12 @@ local sERRORMENUENTRY = "Error finding menu entry"
|
||||||
local sBLANKLINE = "##sBLANKLINE##"
|
local sBLANKLINE = "##sBLANKLINE##"
|
||||||
local sDEFAULTMENU = "customfilter"
|
local sDEFAULTMENU = "customfilter"
|
||||||
|
|
||||||
local sFILEOUT = "/.rockbox/tagnavi_custom.config"
|
local sFILEOUT = "/.rockbox/tagnavi_custom.config"
|
||||||
local sFILEHEADER = "#! rockbox/tagbrowser/2.0"
|
local sFILEHEADER = "#! rockbox/tagbrowser/2.0"
|
||||||
local sMENUSTART = "%menu_start \"custom\" \"Database\""
|
local sMENUSTART = "%menu_start \"custom\" \"Database\""
|
||||||
local sMENUTITLE = "title = \"fmt_title\""
|
local sMENUTITLE = "title = \"fmt_title\""
|
||||||
|
local sRELOADSEARCH = "^\"Reload\.\.\.\"%s*%->.+"
|
||||||
|
local sRELOADMENU = "\"Reload...\" -> %reload"
|
||||||
|
|
||||||
local TAG_ARTIST, TAG_ALBARTIST, TAG_ALBUM, TAG_GENRE, TAG_COMPOSER = 1, 2, 3, 4, 5
|
local TAG_ARTIST, TAG_ALBARTIST, TAG_ALBUM, TAG_GENRE, TAG_COMPOSER = 1, 2, 3, 4, 5
|
||||||
local ts_TAGTYPE = {"Artist", "AlbumArtist", "Album", "Genre", "Composer"}
|
local ts_TAGTYPE = {"Artist", "AlbumArtist", "Album", "Genre", "Composer"}
|
||||||
|
|
@ -121,7 +145,7 @@ local function savedata(filename, ts_tags, cond, menuname)
|
||||||
if rb.file_exists(filename) ~= true then
|
if rb.file_exists(filename) ~= true then
|
||||||
lines_next(sFILEHEADER)
|
lines_next(sFILEHEADER)
|
||||||
lines_next("#")
|
lines_next("#")
|
||||||
lines_next("# MAIN MENU")
|
lines_next("# CUSTOM MENU")
|
||||||
lines_next(sMENUSTART)
|
lines_next(sMENUSTART)
|
||||||
else
|
else
|
||||||
local file = io.open(filename, "r") -- read
|
local file = io.open(filename, "r") -- read
|
||||||
|
|
@ -130,6 +154,7 @@ local function savedata(filename, ts_tags, cond, menuname)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- copy all existing lines to table we will overwrite existing file
|
||||||
for line in file:lines() do
|
for line in file:lines() do
|
||||||
lines_next(line)
|
lines_next(line)
|
||||||
end
|
end
|
||||||
|
|
@ -144,17 +169,22 @@ local function savedata(filename, ts_tags, cond, menuname)
|
||||||
|
|
||||||
replaceemptylines(lines, sBLANKLINE, menupos)
|
replaceemptylines(lines, sBLANKLINE, menupos)
|
||||||
|
|
||||||
|
-- remove reload menu, we will add it at the end
|
||||||
|
replacelines(lines, sRELOADSEARCH, sBLANKLINE)
|
||||||
|
|
||||||
local existmenupos = checkexistingmenu(lines, menuname)
|
local existmenupos = checkexistingmenu(lines, menuname)
|
||||||
if existmenupos and existmenupos < 1 then return end -- user canceled
|
if existmenupos and existmenupos < 1 then return end -- user canceled
|
||||||
|
|
||||||
local lastcond = ""
|
local lastcond = ""
|
||||||
local n_cond = COND_OR
|
local n_cond = COND_OR
|
||||||
local tags, tagtype
|
local tags, tagtype
|
||||||
|
local tagpos = 0
|
||||||
|
|
||||||
local function buildtag(e_tagtype)
|
local function buildtag(e_tagtype)
|
||||||
if ts_tags[e_tagtype] then
|
if ts_tags[e_tagtype] then
|
||||||
|
tagpos = tagpos + 1
|
||||||
n_cond = (cond[e_tagtype] or COND_OR)
|
n_cond = (cond[e_tagtype] or COND_OR)
|
||||||
if e_tagtype > 1 then
|
if tagpos > 1 then
|
||||||
lines_append(" " .. ts_CONDSYMBOLS[n_cond])
|
lines_append(" " .. ts_CONDSYMBOLS[n_cond])
|
||||||
end
|
end
|
||||||
tags = ts_tags[e_tagtype]
|
tags = ts_tags[e_tagtype]
|
||||||
|
|
@ -183,10 +213,12 @@ local function savedata(filename, ts_tags, cond, menuname)
|
||||||
buildtag(TAG_ALBUM)
|
buildtag(TAG_ALBUM)
|
||||||
buildtag(TAG_GENRE)
|
buildtag(TAG_GENRE)
|
||||||
buildtag(TAG_COMPOSER)
|
buildtag(TAG_COMPOSER)
|
||||||
|
-- add reload menu
|
||||||
|
lines_next(sRELOADMENU .. "\n")
|
||||||
|
|
||||||
lines_next("\n")
|
|
||||||
else
|
else
|
||||||
rb.splash(rb.HZ, "Nothing to save")
|
rb.splash(rb.HZ, "Nothing to save")
|
||||||
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local file = io.open(filename, "w+") -- overwrite
|
local file = io.open(filename, "w+") -- overwrite
|
||||||
|
|
@ -219,7 +251,7 @@ local function print_tags(ftable, settings, t_selected)
|
||||||
|
|
||||||
if not settings then
|
if not settings then
|
||||||
settings = {}
|
settings = {}
|
||||||
settings.justify = "center"
|
settings.justify = "left"
|
||||||
settings.wrap = true
|
settings.wrap = true
|
||||||
settings.msel = true
|
settings.msel = true
|
||||||
end
|
end
|
||||||
|
|
@ -249,7 +281,7 @@ end -- print_tags
|
||||||
-- uses print_table to display a menu
|
-- uses print_table to display a menu
|
||||||
function main_menu()
|
function main_menu()
|
||||||
local menuname = sDEFAULTMENU
|
local menuname = sDEFAULTMENU
|
||||||
local t_tags
|
local t_tags = {}
|
||||||
local ts_tags = {}
|
local ts_tags = {}
|
||||||
local cond = {}
|
local cond = {}
|
||||||
local sel = {}
|
local sel = {}
|
||||||
|
|
@ -265,8 +297,9 @@ function main_menu()
|
||||||
[9] = ts_TAGTYPE[TAG_GENRE],
|
[9] = ts_TAGTYPE[TAG_GENRE],
|
||||||
[10] = ts_CONDITIONALS[cond[TAG_COMPOSER] or COND_OR],
|
[10] = ts_CONDITIONALS[cond[TAG_COMPOSER] or COND_OR],
|
||||||
[11] = ts_TAGTYPE[TAG_COMPOSER],
|
[11] = ts_TAGTYPE[TAG_COMPOSER],
|
||||||
[12] = "Save to Tagnav",
|
[12] = "",
|
||||||
[13] = "Exit"
|
[13] = "Save to Tagnav",
|
||||||
|
[14] = "Exit"
|
||||||
}
|
}
|
||||||
|
|
||||||
local function sel_cond(item, item_mt)
|
local function sel_cond(item, item_mt)
|
||||||
|
|
@ -277,7 +310,7 @@ function main_menu()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function sel_tag(item, item_mt, t_tags)
|
local function sel_tag(item, item_mt, t_tags)
|
||||||
t_tags = get_tags(rb.ROCKBOX_DIR .. "/" .. ts_DBPATH[item], ts_TAGTYPE[item])
|
t_tags = get_tags(rb.ROCKBOX_DIR .. "/" .. ts_DBPATH[item], ts_TAGTYPE[item], t_tags)
|
||||||
sel[item], ts_tags[item] = print_tags(t_tags, nil, sel[item])
|
sel[item], ts_tags[item] = print_tags(t_tags, nil, sel[item])
|
||||||
if ts_tags[item] then
|
if ts_tags[item] then
|
||||||
mt[item_mt] = ts_TAGTYPE[item] .. " [" .. #sel[item] .. "]"
|
mt[item_mt] = ts_TAGTYPE[item] .. " [" .. #sel[item] .. "]"
|
||||||
|
|
@ -319,16 +352,17 @@ function main_menu()
|
||||||
[11] = function(COMP)
|
[11] = function(COMP)
|
||||||
sel_tag(TAG_COMPOSER, COMP, t_tags)
|
sel_tag(TAG_COMPOSER, COMP, t_tags)
|
||||||
end,
|
end,
|
||||||
|
[12] = function(B) mt[B] = "TNC Bilgus 2018" end,
|
||||||
[12] = function(SAVET)
|
[13] = function(SAVET)
|
||||||
menuname = menuname or sDEFAULTMENU
|
menuname = menuname or sDEFAULTMENU
|
||||||
menuname = rb.kbd_input(menuname)
|
menuname = rb.kbd_input(menuname)
|
||||||
menuname = string.match(menuname, "%w+")
|
menuname = string.match(menuname or "", "%w+")
|
||||||
if menuname == "" then menuname = nil end
|
if menuname == "" then menuname = nil end
|
||||||
menuname = menuname or sDEFAULTMENU
|
if menuname then
|
||||||
savedata(sFILEOUT, ts_tags, cond, menuname)
|
savedata(sFILEOUT, ts_tags, cond, menuname)
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
[13] = function(EXIT_) return true end
|
[14] = function(EXIT_) return true end
|
||||||
}
|
}
|
||||||
|
|
||||||
print_menu(mt, ft, 2) --start at item 2
|
print_menu(mt, ft, 2) --start at item 2
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue