Lo que tú has hecho, a mí no me funciona. Pero no pasa nada.
Y mira que te gusta complicarte la vida.
No hay que crear otra tabla paralela, sino crear la original pero filtrada.
Por lo que veo, lo único que hay que hacer es aplicar el filtro obtenido por el plugin, o la función que derivé yo, a la creación de music.db, para que se cree solo con los elementos filtrados, no con toda la base de datos.
El filtro se almacena en
fe.list.search_rule
que según el código del Mickelson, es el filtro a aplicar en cada momento.
A mí me funciona para sacar las carátulas filtradas en el CoverFlow perfectamente. Y sin carátulas duplicadas.
Pero como el music.db no está filtrado, pues va a su bola... Incluso con la tabla paralela que has creado.
Si el music.db no se puede filtrar con fe.list.search_rule, se puede crear una variable con el dato a buscar e intentar filtrar con ella.
Y eso es lo que yo no consigo: meterle un filtro a los foreach que has hecho tú para crear la music.db.
Este es el código más reducido que me permite filtrar las wheel sin problemas. En él está definida la variable de la que te hablo más arriba. Y sí, tenías razón, había código innecesario que ya he eliminado.
// Search
class Search
{
last_search="";
my_key="custom1";
constructor()
{
fe.add_signal_handler(this, "on_search_signal")
}
function normalize(my_search)
{
local words = split(my_search, " ");
local temp="";
foreach (w in words)
{
if (temp.len() > 0)
temp += " ";
local f = w.slice(0, 1);
temp += "["+f.toupper()+f.tolower()+"]"+w.slice(1);
}
return temp;
}
function on_search_signal(signal)
{
if (signal == my_key)
{
last_search = fe.overlay.edit_dialog(
"Search for:",
last_search);
// Esta es la variable que se podría utilizar para filtrar
// si no se puede hacer con el fe.list.search_rule =
local sel_game = "";
if (last_search.len() < 1)
fe.list.search_rule = "";
else
{
sel_game = last_search.toupper();
fe.list.search_rule = "Name contains "
+ normalize(last_search);
}
// ::print("DEBUG: fe.list: " + fe.list.search_rule + "\n");
return true;
}
return false;
}
}
local jbfs = Search();