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
|
||||
-- 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 ftable then ftable = {} end
|
||||
hstr = hstr or filename
|
||||
|
||||
local file = io.open('/' .. filename or "", "r") --read
|
||||
|
@ -70,6 +71,7 @@ function get_tags(filename, hstr)
|
|||
return file:read(count)
|
||||
end
|
||||
|
||||
-- check the header and get size + #entries
|
||||
local tagcache_header = readchrs(DATASZ) or ""
|
||||
local tagcache_sz = 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 ftable = {}
|
||||
table.insert(ftable, 1, hstr)
|
||||
for k, v in pairs(ftable) do ftable[k] = nil end -- clear table
|
||||
ftable[1] = hstr
|
||||
|
||||
local tline = #ftable + 1
|
||||
ftable[tline] = ""
|
||||
|
@ -94,7 +96,7 @@ function get_tags(filename, hstr)
|
|||
tag_len = bytesLE_n(readchrs(DATASZ))
|
||||
readchrs(DATASZ) -- idx = bytesLE_n(readchrs(DATASZ))
|
||||
str = readchrs(tag_len) or ""
|
||||
str = string.match(str, "(%Z+)%z")
|
||||
str = string.match(str, "(%Z+)%z") -- \0 terminated string
|
||||
|
||||
if str then
|
||||
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()"
|
||||
|
||||
|
@ -18,10 +40,12 @@ local sERRORMENUENTRY = "Error finding menu entry"
|
|||
local sBLANKLINE = "##sBLANKLINE##"
|
||||
local sDEFAULTMENU = "customfilter"
|
||||
|
||||
local sFILEOUT = "/.rockbox/tagnavi_custom.config"
|
||||
local sFILEHEADER = "#! rockbox/tagbrowser/2.0"
|
||||
local sMENUSTART = "%menu_start \"custom\" \"Database\""
|
||||
local sMENUTITLE = "title = \"fmt_title\""
|
||||
local sFILEOUT = "/.rockbox/tagnavi_custom.config"
|
||||
local sFILEHEADER = "#! rockbox/tagbrowser/2.0"
|
||||
local sMENUSTART = "%menu_start \"custom\" \"Database\""
|
||||
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 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
|
||||
lines_next(sFILEHEADER)
|
||||
lines_next("#")
|
||||
lines_next("# MAIN MENU")
|
||||
lines_next("# CUSTOM MENU")
|
||||
lines_next(sMENUSTART)
|
||||
else
|
||||
local file = io.open(filename, "r") -- read
|
||||
|
@ -130,6 +154,7 @@ local function savedata(filename, ts_tags, cond, menuname)
|
|||
return
|
||||
end
|
||||
|
||||
-- copy all existing lines to table we will overwrite existing file
|
||||
for line in file:lines() do
|
||||
lines_next(line)
|
||||
end
|
||||
|
@ -144,17 +169,22 @@ local function savedata(filename, ts_tags, cond, menuname)
|
|||
|
||||
replaceemptylines(lines, sBLANKLINE, menupos)
|
||||
|
||||
-- remove reload menu, we will add it at the end
|
||||
replacelines(lines, sRELOADSEARCH, sBLANKLINE)
|
||||
|
||||
local existmenupos = checkexistingmenu(lines, menuname)
|
||||
if existmenupos and existmenupos < 1 then return end -- user canceled
|
||||
|
||||
local lastcond = ""
|
||||
local n_cond = COND_OR
|
||||
local tags, tagtype
|
||||
local tagpos = 0
|
||||
|
||||
local function buildtag(e_tagtype)
|
||||
if ts_tags[e_tagtype] then
|
||||
tagpos = tagpos + 1
|
||||
n_cond = (cond[e_tagtype] or COND_OR)
|
||||
if e_tagtype > 1 then
|
||||
if tagpos > 1 then
|
||||
lines_append(" " .. ts_CONDSYMBOLS[n_cond])
|
||||
end
|
||||
tags = ts_tags[e_tagtype]
|
||||
|
@ -183,10 +213,12 @@ local function savedata(filename, ts_tags, cond, menuname)
|
|||
buildtag(TAG_ALBUM)
|
||||
buildtag(TAG_GENRE)
|
||||
buildtag(TAG_COMPOSER)
|
||||
-- add reload menu
|
||||
lines_next(sRELOADMENU .. "\n")
|
||||
|
||||
lines_next("\n")
|
||||
else
|
||||
rb.splash(rb.HZ, "Nothing to save")
|
||||
return
|
||||
end
|
||||
|
||||
local file = io.open(filename, "w+") -- overwrite
|
||||
|
@ -219,7 +251,7 @@ local function print_tags(ftable, settings, t_selected)
|
|||
|
||||
if not settings then
|
||||
settings = {}
|
||||
settings.justify = "center"
|
||||
settings.justify = "left"
|
||||
settings.wrap = true
|
||||
settings.msel = true
|
||||
end
|
||||
|
@ -249,7 +281,7 @@ end -- print_tags
|
|||
-- uses print_table to display a menu
|
||||
function main_menu()
|
||||
local menuname = sDEFAULTMENU
|
||||
local t_tags
|
||||
local t_tags = {}
|
||||
local ts_tags = {}
|
||||
local cond = {}
|
||||
local sel = {}
|
||||
|
@ -265,8 +297,9 @@ function main_menu()
|
|||
[9] = ts_TAGTYPE[TAG_GENRE],
|
||||
[10] = ts_CONDITIONALS[cond[TAG_COMPOSER] or COND_OR],
|
||||
[11] = ts_TAGTYPE[TAG_COMPOSER],
|
||||
[12] = "Save to Tagnav",
|
||||
[13] = "Exit"
|
||||
[12] = "",
|
||||
[13] = "Save to Tagnav",
|
||||
[14] = "Exit"
|
||||
}
|
||||
|
||||
local function sel_cond(item, item_mt)
|
||||
|
@ -277,7 +310,7 @@ function main_menu()
|
|||
end
|
||||
|
||||
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])
|
||||
if ts_tags[item] then
|
||||
mt[item_mt] = ts_TAGTYPE[item] .. " [" .. #sel[item] .. "]"
|
||||
|
@ -319,16 +352,17 @@ function main_menu()
|
|||
[11] = function(COMP)
|
||||
sel_tag(TAG_COMPOSER, COMP, t_tags)
|
||||
end,
|
||||
|
||||
[12] = function(SAVET)
|
||||
[12] = function(B) mt[B] = "TNC Bilgus 2018" end,
|
||||
[13] = function(SAVET)
|
||||
menuname = menuname or sDEFAULTMENU
|
||||
menuname = rb.kbd_input(menuname)
|
||||
menuname = string.match(menuname, "%w+")
|
||||
menuname = string.match(menuname or "", "%w+")
|
||||
if menuname == "" then menuname = nil end
|
||||
menuname = menuname or sDEFAULTMENU
|
||||
savedata(sFILEOUT, ts_tags, cond, menuname)
|
||||
if menuname then
|
||||
savedata(sFILEOUT, ts_tags, cond, menuname)
|
||||
end
|
||||
end,
|
||||
[13] = function(EXIT_) return true end
|
||||
[14] = function(EXIT_) return true end
|
||||
}
|
||||
|
||||
print_menu(mt, ft, 2) --start at item 2
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue