WSH Panel mod: Wildcards mit utils.Glob() auf Bilddateien beschränken?

Begonnen von tedgo, 06. März 2010, 08:38:37

Vorheriges Thema - Nächstes Thema

tedgo

Ich bin gerade an einem Script, um Bilddateien (Cover, Artist Pictures) anzuzeigen.
Für die Cover nutze ich den Artreader, für die Artist Pictures wollte ich utils.Glob wie im folgenden Schema benutzen, um die erste gefundene Datei anzuzeigen:


var bild = window.GetProperty("Picture 1","");
var arr = utils.Glob(fb.TitleFormat(bild.Eval() + ".*").toArray();
g_artreader = gdi.Image(arr[0]);
g_img = g_artreader;


Blöderweise kommt es aber u. U. vor, dass die so gefundene Datei keine Bilddatei ist (z. B. bei Eingabe von $directory_path(%path%)\%artist% - %title% im Properties Fenster), sondern z. B. eine FLAC. Das haut dann natürlich nicht hin...

Weiß jemand, wie ich die "Suche" auf Bilddateien beschränken kann?
Oder wie ich es hinbekomme, dass mir in g_artreader automatisch die erste gefundene Bilddatei geladen wird?

Oder muss ich das tatsächlich so machen (ist nur eine ungetestete Idee):

for (var i = 0; i < arr.length; i++) {
if (arr[i].match(/\.(bmp|gif|jpg|png|tif)$/m)) {
g_artreader = gdi.Image(arr[i]);
} else g_artreader = null;
}

(Obwohl ich noch gar nicht ausprobiert habe, welche Bilddateien das WSH panel mod eigentlich schluckt...)

Danke :)

EDIT: Ne, so gehts nicht. Habs gerade ausprobiert. Da muss wohl ein Fehler drin sein...
Nutze ich match() falsch? Oder habe ich einen Denkfehler drin?

EDIT2: Hab den Fehler entdeckt: Ich mus else g_artreader = null weglassen, dann klappt es.
Scheint so, als wäre mein Problem gelöst.
Oder ist meine Lösung aus irgendeinem Grund vielleicht doch nicht so gut?

tedgo

So, jetzt muss ich doch noch mal nachfragen.
Kann das mal jemand überprüfen?


var f1 = window.GetProperty("Picture 1","");
var f2 = window.GetProperty("Picture 2","");
var f3 = window.GetProperty("Picture 3","");
var f4 = window.GetProperty("Picture 4","");
var f5 = window.GetProperty("Picture 5","");
var f_arr = new Array(f1, f2, f3, f4, f5);

var g_ext = window.GetProperty("File extension order", "jpg|png|gif|bmp|tif");
var g_arr = g_ext.split("|");
var g_artreader = null;
g_state = 0 // wird mit linker Maustaste geswitcht

var arr = utils.Glob(fb.TitleFormat(f_arr[g_state]).Eval() + ".*").toArray();
var g_break = false;
for (var n = 0; n < g_arr.length && !g_break; n++) {
   for (var i = 0; i < arr.length; i++) {
       var re = new RegExp("\." + g_arr[n] + "$", "i");
       if (arr[i].match(re)) {
           g_artreader = gdi.Image(arr[i]);
           g_break = true;
           break;
       }
   }
}
f_img = g_artreader;

Damit soll f_img ausgegeben werden, wenn eine bestimmte Dateiendung, also nur Bilddateien, durch utils.Glob() erkannt wird. Und zwar in einer vom User übers Properties-Fenster festlegbaren Reihenfolge.
Der Scriptschnipsel scheint zu funktionieren, ich bin mir nur nicht sicher, ob ich nicht irgendeinen Bockmist da gescriptet habe (hab mir das ganze jetzt im Netz zusammen gesucht)...
Schaut sich mal einer an, ob ich einen Fehler drin hab oder hat jemand eine bessere Idee für meine Problemlösung?