foobar2000 auf Deutsch

foobar2000 => Customize => Default UI => Thema gestartet von: mexx in 30. November 2022, 15:52:42

Titel: Anzeige von Rating Bild im Image/Icon Folder
Beitrag von: mexx in 30. November 2022, 15:52:42
Vorab: Ich scheine hier wohl fast der Alleinunterhalter zu sein. Aber vielleicht finden sich andere Foobar Nutzer beim Umstieg auf v2 besser zurecht.  :-[

Mein Problem:

Ich habe grimes Script zum Anzeigen von flags für die Anzeige meiner Rating Bilder modifiziert, um mich auch mal mit dem Scripting zu befassen. Ich habe es dann als Konfiguration bei Icons rein kopiert.
Es gibt erst mal keine Fehleranzeige und der foobar path sowie der Rating folder werden korrekt angezeigt.

Leider erscheinen die Bilder nicht. Sie sind 1.svg, 2.svg usw. benannt. Auch gibt es ein norating.svg.
Die Einträge bei den Properties/Rating sind auc 1,2,3 bis 5.

Original Script:
//flag by grimes
//fb2k v2+, JScript Panel 3+
//DUI/CUI ready

// ==PREPROCESSOR==
// @name "flag"
// @version "2"
// @author "grimes"
// ==/PREPROCESSOR==


var cfg_foobarpath = window.GetProperty("foobar path:", fb.Profilepath);
var cfg_flag = window.GetProperty("flag folder:", "flags");
var svg_file = cfg_foobarpath + cfg_flag + "\\noflag.svg";
var svg_content = utils.ReadUTF8(svg_file);

var dui = window.IsDefaultUI;

var original = utils.LoadSVG(svg_file);

function on_paint(gr) {
    gr.FillRectangle(0, 0, window.Width, window.Height, dui == 1 ? window.GetColourDUI(1) : window.GetColourCUI(3)); 
    if (original) {
        var scale = 0;
        var x = 0,
            y = 0;
        var scale_w = window.Width / original.Width;
        var scale_h = window.Height / original.Height;

        if (scale_w <= scale_h) {
            scale = scale_w;
            y = (window.Height - original.Height * scale) / 2;
        } else {
            scale = scale_h;
            x = (window.Width - original.Width * scale) / 2;
        }
        gr.DrawImage(original, x, y, original.Width * scale, original.Height * scale, 0, 0, original.Width, original.Height);
    }
}

if(fb.IsPlaying || fb.IsPaused) {
    country = fb.TitleFormat("%country%").Eval();
    original = utils.LoadSVG(cfg_foobarpath + cfg_flag + "\\" + country + ".svg");
    window.Repaint(); 
}
else {
    original = utils.LoadSVG(svg_file);
    window.Repaint();
}

function on_playback_new_track() {
    country = fb.TitleFormat("%country%").Eval();
    original = utils.LoadSVG(cfg_foobarpath + cfg_flag + "\\" + country + ".svg");
    window.Repaint();
}

function on_playback_stop(reason) {
    original = utils.LoadSVG(svg_file);
    window.Repaint();
}

Mein angepasstes Script:
//flag by grimes
//fb2k v2+, JScript Panel 3+
//DUI/CUI ready

// ==PREPROCESSOR==
// @name "flag"
// @version "2"
// @author "grimes"
// ==/PREPROCESSOR==


var cfg_foobarpath = window.GetProperty("foobar path:", fb.Profilepath);
var cfg_rating = window.GetProperty("rating folder:", "rating");
var svg_file = cfg_foobarpath + cfg_rating + "\\norating.svg";
var svg_content = utils.ReadUTF8(svg_file);

var dui = window.IsDefaultUI;

var original = utils.LoadSVG(svg_file);

function on_paint(gr) {
    gr.FillRectangle(0, 0, window.Width, window.Height, dui == 1 ? window.GetColourDUI(1) : window.GetColourCUI(3)); 
    if (original) {
        var scale = 0;
        var x = 0,
            y = 0;
        var scale_w = window.Width / original.Width;
        var scale_h = window.Height / original.Height;

        if (scale_w <= scale_h) {
            scale = scale_w;
            y = (window.Height - original.Height * scale) / 2;
        } else {
            scale = scale_h;
            x = (window.Width - original.Width * scale) / 2;
        }
        gr.DrawImage(original, x, y, original.Width * scale, original.Height * scale, 0, 0, original.Width, original.Height);
    }
}

if(fb.IsPlaying || fb.IsPaused) {
    rating = fb.TitleFormat("%Rating%").Eval();
    original = utils.LoadSVG(cfg_foobarpath + cfg_rating + "\\" + rating + ".svg");
    window.Repaint(); 
}
else {
    original = utils.LoadSVG(svg_file);
    window.Repaint();
}

function on_playback_new_track() {
    rating = fb.TitleFormat("%Rating%").Eval();
    original = utils.LoadSVG(cfg_foobarpath + cfg_rating + "\\" + rating + ".svg");
    window.Repaint();
}

function on_playback_stop(reason) {
    original = utils.LoadSVG(svg_file);
    window.Repaint();
}

Irgendwo steckt da ein Fehler drin. Vielleicht muss Rating genauer definiert werden. Aber sowas geht dann doch über meine Script Kenntnisse hinaus.
Titel: Aw: Anzeige von Rating Bild im Image/Icon Folder
Beitrag von: grimes in 30. November 2022, 18:40:40
Auf den ersten Blick sehe ich keine Fehler.
Titel: Aw: Anzeige von Rating Bild im Image/Icon Folder
Beitrag von: mexx in 01. Dezember 2022, 17:57:58
Ich hab jetzt alle möglichen Kombinationen (Groß- und Kleinschreibung, Änderung des foobar path u.ä.) probiert. Leider keine Veränderung.

Vielleicht liegt es daran, dass bei Country ein Text vorhanden ist (Länderbezeichnung), aber bei Rating eine Zahl.
Manchmal (z.b.in Excel) muss man, je nach Verwendung, eine Zahl als Text formatieren. Vielleicht liegt ja hier der Hund begraben...
Titel: Aw: Anzeige von Rating Bild im Image/Icon Folder
Beitrag von: grimes in 01. Dezember 2022, 19:11:24
Das ist möglich.
Titel: Aw: Anzeige von Rating Bild im Image/Icon Folder
Beitrag von: mexx in 13. Februar 2023, 14:14:40
Hallo grimes. Vielleicht kannst du mir mal bei diesem Script helfen.
Ich glaube es stammt sogar von dir.

Es kommt in ein WSH Panel Mod und die Rating Pics sollen sich dabei immer der Größe des Panel Fensters anpassen.

function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }

var imgPath = fb.FoobarPath + "images\\";
var rat0 = gdi.Image(imgPath + "images.jpg");
var rat1 = gdi.Image(imgPath + "images1.jpg");
var rat2 = gdi.Image(imgPath + "images2.jpg");
var rat3 = gdi.Image(imgPath + "images3.jpg");
var rat4 = gdi.Image(imgPath + "images4.jpg");
var rat5 = gdi.Image(imgPath + "images5.jpg");

function on_playback_time(time){
    window.Repaint();
}

function Rating (x,y,w,h){
    var star = fb.TitleFormat("%rating%");
   
    this.draw = function (gr) {
    if(star.eval()==0) gr.DrawImage(rat0, 0, 0, window.Width, window.Height, 0, 0, 80, 80);
        else {if(star.eval()==1) gr.DrawImage(rat1, 0, 0, window.Width, window.Height, 0, 0, 80, 80);
                  else {if(star.eval()==2) gr.DrawImage(rat2, 0, 0, window.Width, window.Height, 0, 0, 80, 80);
                              else {if(star.eval()==3) gr.DrawImage(rat3, 0, 0, window.Width, window.Height, 0, 0, 80, 80);
                                        else {if(star.eval()==4) gr.DrawImage(rat4, 0, 0, window.Width, window.Height, 0, 0, 80, 80);
                                                  else {if(star.eval()==5) gr.DrawImage(rat5, 0, 0, window.Width, window.Height, 0, 0, 80, 80);
                        else gr.DrawImage(rat0, 0, 0, window.Width, window.Height, 0, 0, 80, 80);
}}}}}
}
}

function on_paint(gr){
    rating.draw(gr);
}

function on_size(){
    ww = window.Width;
    wh = window.Height;
    rating = new Rating(0,0,ww,wh);
}


function on_playback_new_track(metadb) {
    window.Repaint();
}

//EOF

Danke schon mal im Voraus.
Titel: Aw: Anzeige von Rating Bild im Image/Icon Folder
Beitrag von: grimes in 13. Februar 2023, 16:32:36
Ich kann dir leider nicht helfen.