Скрипты для foo_uie_wsh_panel_mod

Список разделов foobar2000 Секреты foobar2000

Описание: Кнопочки, конфиги, секреты, советы.

Сообщение #901 kgena_ua » 20.03.2016, 21:34

Get Covers (Artwork)
seriousstas, я согласен, в Ваших пожеланиях есть необходимость. Только может это для другой задачи :smile: (будем работать).
На данном этапе хотелось сделать скрипт для просмотра сканов диска, обложек (в т.ч вшитых), сканов буклетов и т.д. Возможность редактирования, изменения наименования файлов, удаления не нужных файлов.
У меня вся коллекция состоит из образов, с большим количеством сканов, для просмотра которых и делался скрипт...
phpBB [media]
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #902 seriousstas » 21.03.2016, 02:26

в Ваших пожеланиях есть необходимость. Только может это для другой задачи (будем работать).
Ясно ,верно, зачастую буклет полностью посмотреть не получается, либо огрызок, либо уменьшенный сильно ..
Я с недавних пор пользуюсь /viewtopic.php?p=60444#p60444
5мб , но много возможностей . Пробовал с тачем - отлично , работает свайп и есть масштабирования двумя пальцами , только меню маленькое
на 7" ..

Да, хотелось найти замену DarkOne Cover Panel, в котором много лишнего ..
Просто сборка сейчас толстая больно получается :) :
Разные папки с кешем (три штуки) и для двух видов логотипов (две штуки) - на аву в WSH плейлисты и для DarkOne Cover
Механизм для логотипов ,который придуамли Вы - лучше , тк просто берёт название станции хоть и без аватарок ..
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #903 kgena_ua » 21.03.2016, 20:07

Get Covers (Artwork)
version 21032016

Изменения:
- мелкие исправления;
- добавлен пункт меню "изменение атрибутов файла".
Безымянный.png

Код: Выделить всё
// ==PREPROCESSOR==   
// @name "Get Covers (Artwork)"
// @author "kgena_ua"
// @version "21032016"
// @feature "v1.4"   
// @feature "watch-metadb"   
// ==/PREPROCESSOR==   

function RGBA(r, g, b, a) {   return ((a << 24) | (r << 16) | (g << 8) | (b)); }
function RGB(r, g, b) { return (0xff000000 | (r << 16) | (g << 8) | (b)); }   
function getRed(color) {return ((color >> 16) & 0xff);};   
function getGreen(color) {return ((color >> 8) & 0xff);};   
function getBlue(color) {return (color & 0xff);};   

var font = gdi.Font("Arial",12, 0);   
var a_font = gdi.Font("Arial",12, 1);   
var b_font = gdi.Font("Arial",12, 0);   
var ww,wh;   

DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;

ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
};
/*
function get_color(){   
    bgcolor = window.GetColorCUI(ColorTypeCUI.background);
    a_color = window.GetColorCUI(ColorTypeCUI.text);
    b_color = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
}

get_color();

function on_colors_changed(){
    get_color();
}
*/
var bgcolor = RGB(31,41,48);
var a_color = RGB(255,255,230);
var b_color = RGB(255,255,230);

var transparent = 200;

function on_size(){
    ww = window.Width;   
    wh = window.Height;
}

var fso = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");

var dir_name, album;
var old_dir_name, old_album;

var g_img = null
var cover_name;
var cover_size;
var nocover_path = window.GetProperty("nocover path",".\\nocover\\nocover.png");
var nocover = window.GetProperty("nocover image", false);
var nocover_transparent = window.GetProperty("nocover transparent (0-255)", 100);

var covers_external = [];
var covers_dir = [];
var covers_root = [];
var covers_root_subs = [];
var covers_dir_subs = [];
var external = [];
var embedded = [];
var covers = [];
var covernumber = 0;

var root_folders = new Array("cover", "covers", "scan", "scans", "artwork", "artworks", "images");

var set_external = window.GetProperty("external", 1);
var set_embedded = window.GetProperty("embedded", 1);
var set_priority = window.GetProperty("set_priority", 0);
var cycle = window.GetProperty("auto cycle (sec)", 0);
if (cycle > 0) set_cycle_timer();
var info = window.GetProperty("info", false);

var file_operation = false;
var vbe = new ActiveXObject('ScriptControl');
vbe.Language = 'VBScript';

var delay = false;
var set_cycle = false;
var cycle_timer, step = 0;
var dis_timer, dis = 0;

var selection_mode = window.GetProperty("selection_mode", 0);
var metadb;
on_item_focus_change();

function on_paint(gr) {   
   !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);

    paint(gr);   
    draw_set(gr);
    draw_info(gr);
   
    gr.GdiDrawText("" , font, a_color, 10, 10, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );
}

function on_playlist_switch() {
    on_item_focus_change();
}

function on_playback_new_track() {
    on_item_focus_change();
}

function on_playback_dynamic_info_track() {
    on_item_focus_change();
}

function on_playback_stop() {
    on_item_focus_change();
}

function on_selection_changed(metadb) {
   on_item_focus_change();
}   

function on_item_focus_change() {   
    switch (selection_mode) {   
    case 0:   
        metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();   
        break;   
    case 1:   
       metadb = fb.GetFocusItem();
        break;    
    }   
    if (metadb) on_metadb_changed();   
}   

function on_metadb_changed() {
    if (metadb){
        dir_name = fb.Titleformat("$directory_path(%path%)").EvalWithMetadb(metadb);
        album = fb.Titleformat("%album%").EvalWithMetadb(metadb);
        if (dir_name != old_dir_name || album != old_album){
            covernumber = 0;
            old_dir_name = dir_name;
            old_album = album
            get_covers();
        }
    }
}

function get_covers() {
    g_img = null;
    cover_name = "";
    cover_size = "";

    get_embedded_covers();
    get_external_covers(dir_name);

    embedded = set_embedded == 1 ? embedded : [];
    external = set_external == 1 ? external : [];
   
    covers = [];
   
    if (set_priority == 0) {
        covers = covers.concat(external, embedded);
    } else {
        covers = covers.concat(embedded, external);
    }
 
    window.Repaint();
}

function get_embedded_covers() {   
    embedded = [];
    if ( metadb ) {
        for (var i = 0; i < 5; i++) {
            //0 - front, 1 - back, 2 - disc, 3 - icon, 4 - artist
            var temp = utils.GetAlbumArtEmbedded(metadb.RawPath, i);
            if (temp) embedded.push(temp);
        }
    }
}

function get_external_covers(path) {
    covers_dir = [];
    covers_root = [];
    covers_dir_subs = [];
    covers_root_subs = [];
    covers_external = [];
    external = [];

    try {
        dir = fso.GetFolder(path);
        get_covers_from_dir(covers_dir, dir);
       
        root = dir.ParentFolder;
        get_covers_from_dir(covers_root, root);
   
        var e = new Enumerator( dir.SubFolders );
        for(; !e.atEnd(); e.moveNext() ) {
            get_covers_from_dir(covers_dir_subs, e.item() );
        }
       
        var e = new Enumerator( root.SubFolders );
        for(; !e.atEnd(); e.moveNext() ) {
            var name = e.item().Path;
            var sub_root_name = name.substr(name.lastIndexOf("\\") + 1, name.length);
            for (i in root_folders) {
                if (sub_root_name.toLowerCase() == root_folders[i].toLowerCase()) {
                    get_covers_from_dir(covers_root_subs, e.item() );
                }
            }
        }
    } catch(e) {};
   
    covers_external = covers_external.concat(covers_dir, covers_root, covers_dir_subs, covers_root_subs);

    if (covers_external.length > 0) {
        for (i in covers_external) {
            var name = covers_external[i];
           
            if (get_file_name(name).toLowerCase() == album.toLowerCase() || name.match(/.*(cover|front|folder|album).*\.(jpg|jpeg|gif|png)$/i )) {
                external.push(name);
                covers_external[i] = null;
            }
        }
       
        for (i in covers_external) {
            if (typeof(covers_external[i]) == 'string' ) external.push(covers_external[i]);
        }
    }
}

function get_covers_from_dir(array, dir) {
    var e = new Enumerator( dir.Files );
    while (!e.atEnd()) {
        var name = e.item().Name;
        if (name.match(/\.(jpg|jpeg|png|gif|bmp|tiff)$/i)) {
            array.push( e.item().Path );
        }
        e.moveNext();
    }
}

function get_file_name(n) {
    if (!n) return;
    var file_name_ext = n.substr(n.lastIndexOf("\\") + 1, n.length);
    var file_name = file_name_ext.substr(0, file_name_ext.length - 4);
    return file_name;
}
/*
function get_covers_from_dir_2(array, dir) {
    var tmp = utils.Glob(dir + "*.*").toArray();
    for (i in tmp) {
        var name = tmp[i];
        if ( name.match(/\.(jpg|jpeg|png|gif|bmp|tiff)$/i) ) {
            array.push(name);
        }
    }
}
*/
function Eval(field) {   
    if (!metadb) return;   
    path = fb.Titleformat("%path%").EvalWithMetadb(metadb);   
    //return path.indexOf('://') > 0 ? fb.TitleFormat("[" + field + "]").Eval() : fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);   
    return fb.Titleformat("[" + field + "]").EvalWithMetadb(metadb) ? fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb) : fb.TitleFormat("[" + field + "]").Eval(true);   
}

function paint(gr){
    if (typeof covers[covernumber] == 'object' ) {
        g_img = covers[covernumber];
    } else {
        g_img = gdi.Image(covers[covernumber]);
    }

    if (!g_img && nocover){
        try {
            g_img = gdi.Image(nocover_path);        
        } catch(e) {};      
    }   
   
    if (g_img){      
      var scale_w = ww / g_img.Width;
      var scale_h = wh / g_img.Height;
      var scale = Math.min(scale_w, scale_h);
      var pos_x = 0, pos_y = 0;

      if (scale_w < scale_h) pos_y = (wh - g_img.height * scale) / 2;
      else if (scale_w > scale_h) pos_x = (ww - g_img.Width * scale) / 2;
              
        gr.DrawImage(g_img, pos_x, pos_y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height, 0, covers.length > 0 ? 255 : nocover_transparent);
        gr.DrawRoundRect(pos_x, pos_y, g_img.Width * scale, g_img.Height * scale, 1, 1, 1,bgcolor);
    }      
}      

function draw_set(gr){
    if(set_cycle){
        gr.FillSolidRect(0, 0, ww, wh, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));

        var txt_cycle = cycle == 0 ? "off" : cycle + " sec";
        gr.GdiDrawText("auto cycle:   " + txt_cycle, b_font, b_color, 0, 20, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS );
    }
}

function draw_info(gr){
    var text_h = gr.CalcTextHeight("00", font);   
    var text_y = wh -  text_h * 3 - 5;   

    if(info){   
        !set_cycle && gr.FillSolidRect(0, text_y - 5, ww, wh - text_y + 5, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));   

        if (covers[covernumber]) {
            if (typeof covers[covernumber] != 'object'){
                cover_name = covers[covernumber].substring(covers[covernumber].lastIndexOf("\\") + 1);
            }
           
            if (typeof covers[covernumber] == 'object'){
                cover_name = "embedded";
            }
           
            gr.GdiDrawText(cover_name, font, b_color, 0, text_y, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS );

            try {
                cover_size = Math.round( fso.GetFile( covers[covernumber]).size / 1024) + " KB";
            } catch(e) { cover_size = ""};

            if (g_img) gr.GdiDrawText(g_img.Width + " x " + g_img.Height + "   " + cover_size, font, b_color, 0, text_y + text_h, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS );
            gr.GdiDrawText(covernumber + 1 + " (" + covers.length + ")   " + external.length + " external   " + embedded.length + " embedded", font, b_color, 0, text_y + text_h * 2, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS );
        }
    }
   
    if (!g_img) {
        gr.GdiDrawText("no image", font, a_color, 0, 0, ww, wh, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS );
    }
}

function on_mouse_move(x, y) {
    window.SetCursor(32649);
    window.Repaint();
}

function on_mouse_leave() {
    window.SetCursor(32512);
    window.Repaint();
}

function on_mouse_lbtn_dblclk (x,y){
    if (typeof covers[covernumber] != 'object' ) {
        if (covers[covernumber]) WshShell.run( '"' + covers[covernumber] + '"' );
    }
}

function on_mouse_wheel(delta) {
    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
   
    if (!delay && !ShiftDown){
        delay = true;
        fdelay();

        if (delta < 0) {covernumber = covernumber <= 0 ? covers.length - 1 : covernumber = covernumber - 1};
        if (delta > 0) {covernumber = covernumber >= covers.length - 1 ? 0 : covernumber = covernumber + 1};
    }

    if (ShiftDown) {
        if (delta < 0) {cycle = cycle <= 0 ? 0 : cycle - 5;};
        if (delta > 0) {cycle = cycle >= 60 ? 60 : cycle + 5;};
        window.SetProperty("auto cycle (sec)", cycle);
    }

    window.Repaint();
}

function fdelay(){
    var delay_timer = window.SetTimeout(function() {
        delay = false;
        window.ClearTimeout(delay_timer);
    }, 250);
}

function on_key_down(vkey) {
    if (vkey == 16){
        set_cycle = true;
        dis_set();
        window.Repaint();
    }
}

function set_cycle_timer(){
    cycle_timer && window.ClearInterval(cycle_timer);
    cycle_timer = window.SetInterval(function() {
        step =  set_cycle || file_operation ? 0 : step + 1;
        if (cycle > 0 && step >= cycle){
            on_mouse_wheel(1);
            step = 0;
        }
    window.Repaint();
    }, 1000 );
}

function dis_set(){
    dis = 0;
    dis_timer && window.ClearInterval(dis_timer);
    dis_timer = window.SetInterval(function() {
        if (set_cycle) {
            dis++;
            if(dis == 1) {
                set_cycle = false;
                if (cycle > 0) set_cycle_timer();
                if (cycle == 0) window.ClearInterval(cycle_timer);
                window.ClearInterval(dis_timer)
                window.Repaint();
            };
        }
    }, 1000 );
}

function change_filename(){
    var c_file_name = get_file_name(covers[covernumber]);
    var n_file_name = vbe.eval("InputBox(\"Enter new file name\",\"Foobar 2000\",\"" + c_file_name + "\")");
    if (n_file_name) {
        try {
            var dir = covers[covernumber].replace(/\\([^\\]*)$/g, '');
            var ext = covers[covernumber].replace(/(.*)\.([^\.]*)$/,'$2');
            fso.MoveFile( covers[covernumber], dir + "\\" + n_file_name + "." + ext );
            get_covers();
           
            for (var i = 0; i < covers.length; i++) {
                var name = covers[i];
                if (get_file_name(name) == n_file_name) {
                    covernumber = i;
                    window.Repaint();
                }
            }
        } catch(e) {}
    }
    file_operation = false;
}

function delete_file(){ 
    var source = covers[covernumber];
   
    var button_type = is_read_write(source) ? 0x3 : 0x5;
    var icon_type = is_read_write(source) ? 0x20 : 0x10;

    var second_button_is_default = 0x100;
   
    var btn = WshShell.Popup("Delete file:\n\n" + source, 0, "Foobar 2000", button_type + icon_type + second_button_is_default);
    switch (btn) {   
    case 6:   
        try{
            fso.DeleteFile(source);
            covernumber = covernumber == covers.length - 1 ? 0 : covernumber;
            get_covers();
            window.Repaint();           
        } catch(e) {}
        break;
    case 2:   
    case 7:   
        break;
    case 4:
        delete_file();
        break;
    }
    file_operation = false;
}

function change_file_attributes(){ 
    var source = covers[covernumber];

    var txt = is_read_write(source) ? "file is \nREAD-WRITE" : "file is \nREAD-ONLY";
    var button_type = 0x3;
    var icon_type = 0x40;
   
    var btn = WshShell.Popup(source + "\n\n" + txt + "\nchange file attributes ?", 0, "Foobar 2000", button_type + icon_type);
    switch (btn) {   
    case 6:   
        try{
            var file = fso.GetFile(source);   
            file.Attributes = is_read_write(source) ? 33 : 32;
        } catch(e) {}
        break;
    case 2:   
    case 7:   
        break;
    }
    file_operation = false;
}

function is_read_write(f){ 
    if(fso.FileExists(f)) {
        var file = fso.GetFile(f);            
        var file_attributes = file.Attributes;            
        return file_attributes == 32 ? true : false;
    }
}

function on_mouse_rbtn_up (x, y){
    menu = true;     
    var _menu = window.CreatePopupMenu();
    var i = 1;

    MF_ENABLED = 0x00000000;
    MF_GRAYED = 0x00000001;
    MF_SEPARATOR = 0x00000800;
   
    _menu.AppendMenuItem(MF_ENABLED, i++, "External covers");
    _menu.CheckMenuItem(i - 1, set_external);
    _menu.AppendMenuItem(MF_ENABLED, i++, "Embedded covers");
    _menu.CheckMenuItem(i - 1, set_embedded);

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, i++, "Priority external");
    _menu.AppendMenuItem(MF_ENABLED, i++, "Priority embedded");
    _menu.CheckMenuRadioItem(i - 2, i , set_priority + 3);   
   _menu.EnableMenuItem(set_priority + 3, 1); 

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Prefer now playing");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Follow selected track");   
    _menu.CheckMenuRadioItem(i - 2, i , selection_mode + 5);   
   _menu.EnableMenuItem(selection_mode + 5, 1); 
       
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Info");   
    _menu.CheckMenuItem(i - 1, info);   

    var MF_ = covers[covernumber] && fso.FileExists(covers[covernumber]) && typeof covers[covernumber] != 'object' ? MF_ENABLED : MF_GRAYED;   
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_, i++, "Open folder");
    _menu.AppendMenuItem(MF_, i++, "Rename file");
    _menu.AppendMenuItem(MF_, i++, "Delete file");
    _menu.AppendMenuItem(MF_, i++, "Change file attributes");

    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
//    if (ShiftDown) {
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_ENABLED, 50, "Reload");
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_ENABLED, 60, "Properties");
        _menu.AppendMenuItem(MF_ENABLED, 70, "Configure ...");
//    }

    ret = _menu.TrackPopupMenu(x,y);

    switch (ret) {
    case 1:
        set_external = set_external == 0 ? 1 : set_embedded == 0 ? 1 : 0;
        window.SetProperty("external", set_external);
        get_covers();
        break;
    case 2:
        set_embedded = set_embedded == 0 ? 1 : set_external == 0 ? 1 : 0;                ;
        window.GetProperty("embedded", set_embedded);
        get_covers();
        break;
    case 3:
        set_priority = 0;
        window.SetProperty("set_priority", set_priority);
        get_covers();
        break;
    case 4:
        set_priority = 1;
        window.SetProperty("set_priority", set_priority);
        get_covers();
        break;
    case 5:
        selection_mode = 0;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 6:
        selection_mode = 1;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 7:
        window.SetProperty("info", !info);
        info = window.GetProperty("info");
        break;      
    case 8:
      if (covers[covernumber] && typeof covers[covernumber] != 'object') WshShell.run( '"' + covers[covernumber].substring(0, covers[covernumber].lastIndexOf("\\")) + '"' );
        break;
    case 9:
        file_operation = true;   
        change_filename();
        break;          
    case 10:
        file_operation = true;   
        delete_file();
        break;   
    case 11:
        file_operation = true;   
        change_file_attributes();
        break;   
    case 50:      
        window.Reload();      
        break;      
    case 60:      
        window.ShowProperties();      
        break;         
    case 70:      
        window.ShowConfigure();         
        break;         
   }
    _menu.Dispose();
    menu = false;   
    return true;   

kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #904 MC Web » 21.03.2016, 20:46

kgena_ua, приветствую.
Может для скрипта Get Covers (Artwork) можно что то позаимствовать из WSH Cover Animation.
В нем есть различные на выбор эффекты анимации при смене обложек.
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #905 kgena_ua » 22.03.2016, 12:02

MC Web, добрый день.
Я пробовал делать анимацию: движение (смещение картинок), затухание (изменяя прозрачность). Проблемы возникли на изображениях с большим разрешением - сильные фризы.

Добавлено спустя 7 часов 21 минуту:
Get Covers (Artwork)
author "kgena_ua


Исправлен вылет при вызове пеню на вшитых обложках.
Код: Выделить всё
// ==PREPROCESSOR==   
// @name "Get Covers (Artwork)"
// @author "kgena_ua"
// @version "22032016"
// @feature "v1.4"   
// @feature "watch-metadb"   
// ==/PREPROCESSOR==   

function RGBA(r, g, b, a) {   return ((a << 24) | (r << 16) | (g << 8) | (b)); }
function RGB(r, g, b) { return (0xff000000 | (r << 16) | (g << 8) | (b)); }   
function getRed(color) {return ((color >> 16) & 0xff);};   
function getGreen(color) {return ((color >> 8) & 0xff);};   
function getBlue(color) {return (color & 0xff);};   

var font = gdi.Font("Arial",12, 0);   
var a_font = gdi.Font("Arial",12, 1);   
var b_font = gdi.Font("Arial",12, 0);   
var ww,wh;   

DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;

ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
};
/*
function get_color(){   
    bgcolor = window.GetColorCUI(ColorTypeCUI.background);
    a_color = window.GetColorCUI(ColorTypeCUI.text);
    b_color = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
}

get_color();

function on_colors_changed(){
    get_color();
}
*/
var bgcolor = RGB(31,41,48);
var a_color = RGB(255,255,230);
var b_color = RGB(255,255,230);

var transparent = 200;

function on_size(){
    ww = window.Width;   
    wh = window.Height;
}

var fso = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");

var dir_name, album;
var old_dir_name, old_album;

var g_img = null
var cover_name;
var cover_size;
var nocover_path = window.GetProperty("nocover path",".\\nocover\\nocover.png");
var nocover = window.GetProperty("nocover image", false);
var nocover_transparent = window.GetProperty("nocover transparent (0-255)", 100);

var covers_external = [];
var covers_dir = [];
var covers_root = [];
var covers_root_subs = [];
var covers_dir_subs = [];
var external = [];
var embedded = [];
var covers = [];
var covernumber = 0;

var root_folders = new Array("cover", "covers", "scan", "scans", "artwork", "artworks", "images");

var set_external = window.GetProperty("external", 1);
var set_embedded = window.GetProperty("embedded", 1);
var set_priority = window.GetProperty("set_priority", 0);
var cycle = window.GetProperty("auto cycle (sec)", 0);
if (cycle > 0) set_cycle_timer();
var info = window.GetProperty("info", false);

var file_operation = false;
var vbe = new ActiveXObject('ScriptControl');
vbe.Language = 'VBScript';

var delay = false;
var set_cycle = false;
var cycle_timer, step = 0;
var dis_timer, dis = 0;

var selection_mode = window.GetProperty("selection_mode", 0);
var metadb;
on_item_focus_change();

function on_paint(gr) {   
   !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);

    paint(gr);   
    draw_set(gr);
    draw_info(gr);
   
    gr.GdiDrawText("" , font, a_color, 10, 10, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );
}

function on_playlist_switch() {
    on_item_focus_change();
}

function on_playback_new_track() {
    on_item_focus_change();
}

function on_playback_dynamic_info_track() {
    on_item_focus_change();
}

function on_playback_stop() {
    on_item_focus_change();
}

function on_selection_changed(metadb) {
   on_item_focus_change();
}   

function on_item_focus_change() {   
    switch (selection_mode) {   
    case 0:   
        metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();   
        break;   
    case 1:   
       metadb = fb.GetFocusItem();
        break;   
    }   
    if (metadb) on_metadb_changed();   
}   

function on_metadb_changed() {
    if (metadb){
        dir_name = fb.Titleformat("$directory_path(%path%)").EvalWithMetadb(metadb);
        album = fb.Titleformat("%album%").EvalWithMetadb(metadb);
        if (dir_name != old_dir_name || album != old_album){
            covernumber = 0;
            old_dir_name = dir_name;
            old_album = album
            get_covers();
        }
    }
}

function get_covers() {
    g_img = null;
    cover_name = "";
    cover_size = "";

    get_embedded_covers();
    get_external_covers(dir_name);

    embedded = set_embedded == 1 ? embedded : [];
    external = set_external == 1 ? external : [];
   
    covers = [];
   
    if (set_priority == 0) {
        covers = covers.concat(external, embedded);
    } else {
        covers = covers.concat(embedded, external);
    }
 
    window.Repaint();
}

function get_embedded_covers() {   
    embedded = [];
    if ( metadb ) {
        for (var i = 0; i < 5; i++) {
            //0 - front, 1 - back, 2 - disc, 3 - icon, 4 - artist
            var temp = utils.GetAlbumArtEmbedded(metadb.RawPath, i);
            if (temp) embedded.push(temp);
        }
    }
}

function get_external_covers(path) {
    covers_dir = [];
    covers_root = [];
    covers_dir_subs = [];
    covers_root_subs = [];
    covers_external = [];
    external = [];

    try {
        dir = fso.GetFolder(path);
        get_covers_from_dir(covers_dir, dir);
       
        root = dir.ParentFolder;
        get_covers_from_dir(covers_root, root);
   
        var e = new Enumerator( dir.SubFolders );
        for(; !e.atEnd(); e.moveNext() ) {
            get_covers_from_dir(covers_dir_subs, e.item() );
        }
       
        var e = new Enumerator( root.SubFolders );
        for(; !e.atEnd(); e.moveNext() ) {
            var name = e.item().Path;
            var sub_root_name = name.substr(name.lastIndexOf("\\") + 1, name.length);
            for (i in root_folders) {
                if (sub_root_name.toLowerCase() == root_folders[i].toLowerCase()) {
                    get_covers_from_dir(covers_root_subs, e.item() );
                }
            }
        }
    } catch(e) {};
   
    covers_external = covers_external.concat(covers_dir, covers_root, covers_dir_subs, covers_root_subs);

    if (covers_external.length > 0) {
        for (i in covers_external) {
            var name = covers_external[i];
           
            if (get_file_name(name).toLowerCase() == album.toLowerCase() || name.match(/.*(cover|front|folder|album).*\.(jpg|jpeg|gif|png)$/i )) {
                external.push(name);
                covers_external[i] = null;
            }
        }
       
        for (i in covers_external) {
            if (typeof(covers_external[i]) == 'string' ) external.push(covers_external[i]);
        }
    }
}

function get_covers_from_dir(array, dir) {
    var e = new Enumerator( dir.Files );
    while (!e.atEnd()) {
        var name = e.item().Name;
        if (name.match(/\.(jpg|jpeg|png|gif|bmp|tiff)$/i)) {
            array.push( e.item().Path );
        }
        e.moveNext();
    }
}

function get_file_name(n) {
    if (!n) return;
    var file_name_ext = n.substr(n.lastIndexOf("\\") + 1, n.length);
    var file_name = file_name_ext.substr(0, file_name_ext.length - 4);
    return file_name;
}
/*
function get_covers_from_dir_2(array, dir) {
    var tmp = utils.Glob(dir + "*.*").toArray();
    for (i in tmp) {
        var name = tmp[i];
        if ( name.match(/\.(jpg|jpeg|png|gif|bmp|tiff)$/i) ) {
            array.push(name);
        }
    }
}
*/
function Eval(field) {   
    if (!metadb) return;   
    path = fb.Titleformat("%path%").EvalWithMetadb(metadb);   
    //return path.indexOf('://') > 0 ? fb.TitleFormat("[" + field + "]").Eval() : fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);   
    return fb.Titleformat("[" + field + "]").EvalWithMetadb(metadb) ? fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb) : fb.TitleFormat("[" + field + "]").Eval(true);   
}

function paint(gr){
    if (typeof covers[covernumber] == 'object' ) {
        g_img = covers[covernumber];
    } else {
        g_img = gdi.Image(covers[covernumber]);
    }

    if (!g_img && nocover){
        try {
            g_img = gdi.Image(nocover_path);       
        } catch(e) {};     
    }   
   
    if (g_img){     
      var scale_w = ww / g_img.Width;
      var scale_h = wh / g_img.Height;
      var scale = Math.min(scale_w, scale_h);
      var pos_x = 0, pos_y = 0;

      if (scale_w < scale_h) pos_y = (wh - g_img.height * scale) / 2;
      else if (scale_w > scale_h) pos_x = (ww - g_img.Width * scale) / 2;
             
        gr.DrawImage(g_img, pos_x, pos_y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height, 0, covers.length > 0 ? 255 : nocover_transparent);
        gr.DrawRoundRect(pos_x, pos_y, g_img.Width * scale, g_img.Height * scale, 1, 1, 1,bgcolor);
    }     
}     

function draw_set(gr){
    if(set_cycle){
        gr.FillSolidRect(0, 0, ww, wh, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));

        var txt_cycle = cycle == 0 ? "off" : cycle + " sec";
        gr.GdiDrawText("auto cycle:   " + txt_cycle, b_font, b_color, 0, 20, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS );
    }
}

function draw_info(gr){
    var text_h = gr.CalcTextHeight("00", font);   
    var text_y = wh -  text_h * 3 - 5;   

    if(info){   
        !set_cycle && gr.FillSolidRect(0, text_y - 5, ww, wh - text_y + 5, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));   

        if (covers[covernumber]) {
            if (typeof covers[covernumber] != 'object'){
                cover_name = covers[covernumber].substring(covers[covernumber].lastIndexOf("\\") + 1);
            }
           
            if (typeof covers[covernumber] == 'object'){
                cover_name = "embedded";
            }
           
            gr.GdiDrawText(cover_name, font, b_color, 0, text_y, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS );

            try {
                cover_size = Math.round( fso.GetFile( covers[covernumber]).size / 1024) + " KB";
            } catch(e) { cover_size = ""};

            if (g_img) gr.GdiDrawText(g_img.Width + " x " + g_img.Height + "   " + cover_size, font, b_color, 0, text_y + text_h, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS );
            gr.GdiDrawText(covernumber + 1 + " (" + covers.length + ")   " + external.length + " external   " + embedded.length + " embedded", font, b_color, 0, text_y + text_h * 2, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS );
        }
    }
   
    if (!g_img) {
        gr.GdiDrawText("no image", font, a_color, 0, 0, ww, wh, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS );
    }
}

function on_mouse_move(x, y) {
    window.SetCursor(32649);
    window.Repaint();
}

function on_mouse_leave() {
    window.SetCursor(32512);
    window.Repaint();
}

function on_mouse_lbtn_dblclk (x,y){
    if (typeof covers[covernumber] != 'object' ) {
        if (covers[covernumber]) WshShell.run( '"' + covers[covernumber] + '"' );
    }
}

function on_mouse_wheel(delta) {
    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
   
    if (!delay && !ShiftDown){
        delay = true;
        fdelay();

        if (delta < 0) {covernumber = covernumber <= 0 ? covers.length - 1 : covernumber = covernumber - 1};
        if (delta > 0) {covernumber = covernumber >= covers.length - 1 ? 0 : covernumber = covernumber + 1};
    }

    if (ShiftDown) {
        if (delta < 0) {cycle = cycle <= 0 ? 0 : cycle - 5;};
        if (delta > 0) {cycle = cycle >= 60 ? 60 : cycle + 5;};
        window.SetProperty("auto cycle (sec)", cycle);
    }

    window.Repaint();
}

function fdelay(){
    var delay_timer = window.SetTimeout(function() {
        delay = false;
        window.ClearTimeout(delay_timer);
    }, 250);
}

function on_key_down(vkey) {
    if (vkey == 16){
        set_cycle = true;
        dis_set();
        window.Repaint();
    }
}

function set_cycle_timer(){
    cycle_timer && window.ClearInterval(cycle_timer);
    cycle_timer = window.SetInterval(function() {
        step =  set_cycle || file_operation ? 0 : step + 1;
        if (cycle > 0 && step >= cycle){
            on_mouse_wheel(1);
            step = 0;
        }
    window.Repaint();
    }, 1000 );
}

function dis_set(){
    dis = 0;
    dis_timer && window.ClearInterval(dis_timer);
    dis_timer = window.SetInterval(function() {
        if (set_cycle) {
            dis++;
            if(dis == 1) {
                set_cycle = false;
                if (cycle > 0) set_cycle_timer();
                if (cycle == 0) window.ClearInterval(cycle_timer);
                window.ClearInterval(dis_timer)
                window.Repaint();
            };
        }
    }, 1000 );
}

function change_filename(){
    var c_file_name = get_file_name(covers[covernumber]);
    var n_file_name = vbe.eval("InputBox(\"Enter new file name\",\"Foobar 2000\",\"" + c_file_name + "\")");
    if (n_file_name) {
        try {
            var dir = covers[covernumber].replace(/\\([^\\]*)$/g, '');
            var ext = covers[covernumber].replace(/(.*)\.([^\.]*)$/,'$2');
            fso.MoveFile( covers[covernumber], dir + "\\" + n_file_name + "." + ext );
            get_covers();
           
            for (var i = 0; i < covers.length; i++) {
                var name = covers[i];
                if (get_file_name(name) == n_file_name) {
                    covernumber = i;
                    window.Repaint();
                }
            }
        } catch(e) {}
    }
    file_operation = false;
}

function delete_file(){
    var source = covers[covernumber];
   
    var button_type = is_read_write(source) ? 0x3 : 0x5;
    var icon_type = is_read_write(source) ? 0x20 : 0x10;

    var second_button_is_default = 0x100;
   
    var btn = WshShell.Popup("Delete file:\n\n" + source, 0, "Foobar 2000", button_type + icon_type + second_button_is_default);
    switch (btn) {   
    case 6:   
        try{
            fso.DeleteFile(source);
            covernumber = covernumber == covers.length - 1 ? 0 : covernumber;
            get_covers();
            window.Repaint();           
        } catch(e) {}
        break;
    case 2:   
    case 7:   
        break;
    case 4:
        delete_file();
        break;
    }
    file_operation = false;
}

function change_file_attributes(){
    var source = covers[covernumber];

    var txt = is_read_write(source) ? "file is \nREAD-WRITE" : "file is \nREAD-ONLY";
    var button_type = 0x3;
    var icon_type = 0x40;
   
    var btn = WshShell.Popup(source + "\n\n" + txt + "\nchange file attributes ?", 0, "Foobar 2000", button_type + icon_type);
    switch (btn) {   
    case 6:   
        try{
            var file = fso.GetFile(source);   
            file.Attributes = is_read_write(source) ? 33 : 32;
        } catch(e) {}
        break;
    case 2:   
    case 7:   
        break;
    }
    file_operation = false;
}

function is_read_write(f){
    if(fso.FileExists(f)) {
        var file = fso.GetFile(f);           
        var file_attributes = file.Attributes;           
        return file_attributes == 32 ? true : false;
    }
}

function on_mouse_rbtn_up (x, y){
    menu = true;     
    var _menu = window.CreatePopupMenu();
    var i = 1;

    MF_ENABLED = 0x00000000;
    MF_GRAYED = 0x00000001;
    MF_SEPARATOR = 0x00000800;
   
    _menu.AppendMenuItem(MF_ENABLED, i++, "External covers");
    _menu.CheckMenuItem(i - 1, set_external);
    _menu.AppendMenuItem(MF_ENABLED, i++, "Embedded covers");
    _menu.CheckMenuItem(i - 1, set_embedded);

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, i++, "Priority external");
    _menu.AppendMenuItem(MF_ENABLED, i++, "Priority embedded");
    _menu.CheckMenuRadioItem(i - 2, i , set_priority + 3);   
   _menu.EnableMenuItem(set_priority + 3, 1);

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Prefer now playing");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Follow selected track");   
    _menu.CheckMenuRadioItem(i - 2, i , selection_mode + 5);   
   _menu.EnableMenuItem(selection_mode + 5, 1);
       
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Info");   
    _menu.CheckMenuItem(i - 1, info);   

    var MF_ = covers[covernumber] && typeof covers[covernumber] != 'object' ? MF_ENABLED : MF_GRAYED;   
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_, i++, "Open folder");
    _menu.AppendMenuItem(MF_, i++, "Rename file");
    _menu.AppendMenuItem(MF_, i++, "Delete file");
    _menu.AppendMenuItem(MF_, i++, "Change file attributes");

    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
//    if (ShiftDown) {
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_ENABLED, 50, "Reload");
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_ENABLED, 60, "Properties");
        _menu.AppendMenuItem(MF_ENABLED, 70, "Configure ...");
//    }

    ret = _menu.TrackPopupMenu(x,y);

    switch (ret) {
    case 1:
        set_external = set_external == 0 ? 1 : set_embedded == 0 ? 1 : 0;
        window.SetProperty("external", set_external);
        get_covers();
        break;
    case 2:
        set_embedded = set_embedded == 0 ? 1 : set_external == 0 ? 1 : 0;                ;
        window.GetProperty("embedded", set_embedded);
        get_covers();
        break;
    case 3:
        set_priority = 0;
        window.SetProperty("set_priority", set_priority);
        get_covers();
        break;
    case 4:
        set_priority = 1;
        window.SetProperty("set_priority", set_priority);
        get_covers();
        break;
    case 5:
        selection_mode = 0;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 6:
        selection_mode = 1;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 7:
        window.SetProperty("info", !info);
        info = window.GetProperty("info");
        break;     
    case 8:
      if (covers[covernumber] && typeof covers[covernumber] != 'object') WshShell.run( '"' + covers[covernumber].substring(0, covers[covernumber].lastIndexOf("\\")) + '"' );
        break;
    case 9:
        file_operation = true;   
        change_filename();
        break;         
    case 10:
        file_operation = true;   
        delete_file();
        break;   
    case 11:
        file_operation = true;   
        change_file_attributes();
        break;   
    case 50:     
        window.Reload();     
        break;     
    case 60:     
        window.ShowProperties();     
        break;         
    case 70:     
        window.ShowConfigure();         
        break;         
   }
    _menu.Dispose();
    menu = false;   
    return true;   
}

Добавлено спустя 2 минуты 53 секунды:
Если вылет на строке
var fso = new ActiveXObject("Scripting.FileSystemObject");
проверьте отсутствие галочки Safe mode в насиройке панели WSH/

Добавлено спустя 2 минуты 6 секунд:
:smile: ого опечаток сколько. Куда делась кнопка "править" или как она там.....
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #906 seriousstas » 22.03.2016, 19:47

Куда делась кнопка "править" или как она там
отключается автоматом через какое-то время ...
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #907 kgena_ua » 24.03.2016, 02:11

seriousstas, онаружил, что WSH Biography подтормаживает другие скрипты с динамическим выводом, во время различных манипуляций с панелью.
Занялся оптимизацией.
Для наглядности видео, что получилось.
Обратите внимание на бегушую строку и пикметр до и после оптимизации.

phpBB [media]
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #908 seriousstas » 24.03.2016, 02:20

Для наглядности видео, что получилось.
хорошо видно, что стало лучше теперь :dance:
прокрутка текста ещё влияет на таймеры строки , а так - норм!
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #909 kgena_ua » 24.03.2016, 02:28

seriousstas, я после того, как Вам выложил еще немного почистил.
Добавил режим фейдера для картинок.
Теперь осталось потестировать, навести порядок и можно обновлять.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #910 AHAPXICT » 24.03.2016, 07:53

kgena_ua, приветствую. Как раз собирался спросить. Есть возможность остановки выполнения VBScript при отключении панели БИО?
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #911 kgena_ua » 24.03.2016, 12:11

AHAPXICT, доброе утро.
Первое - зачем.
Второе. Через обмен данными между WSH панелями. Например через кнопку включения (отключения), находящейся в другой панели.
Код передающей панели (кнопка):
Код: Выделить всё
var panel_bio_on_of = false;
function on_mouse_lbtn_down(x, y) {
    panel_bio_on_of = panel_bio_on_of ? false : true;
    window.NotifyOthers("bio_panel", panel_bio_on_of);
}
в принимающей (Bio):
Код: Выделить всё
var panel_bio_on_of;
function on_notify_data(name, info) {
     if(name == "bio_panel") {
       panel_bio_on_of = info;
       window.Repaint();
     }
}
где по состоянию panel_bio_on_of что-то делать или не делать.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #912 AHAPXICT » 24.03.2016, 16:43

kgena_ua:Первое - зачем.
Вы меня не правильно поняли. Это я по поводу оптимизации говорил. После переключения c БИО на другую панель (PSS) скрипт VBScript продолжает работать, то есть качает картинки - удаляет картинки. Вот я и поставил вопрос подобным образом :smile:
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #913 kgena_ua » 24.03.2016, 17:03

AHAPXICT, да нет, я понял :smile: И идея хорошая.
Это самое оно, только для WSH и WSH.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #914 AHAPXICT » 24.03.2016, 18:07

Вот и я думаю про это, и прекрасно понимаю что всё не так просто. Может всё таки есть лазейка? Сейчас опишу о чём думаю. Если очистить WSH панель (удалить скрипт) то VBScript перестаёт работать, ну это и так понятно. Вопрос в чём(я не очень понимаю как описать), если в WSH оставить только запускающую команду, а сам исполняющий скрипт держать, к примеру, там же где и VBScript. Так что бы результат получился такой, что при отключении панели БИО или при переключении на другую панель VBScript становился не активным.

Добавлено спустя 13 минут 44 секунды:
kgena_ua:WSH и WSH.
Да так бы проблем никаких не было! Хоть переделывай кнопки переключения с PSS на WSH :cry:
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #915 MC Web » 24.03.2016, 18:44

AHAPXICT:После переключения c БИО на другую панель (PSS) скрипт VBScript продолжает работать, то есть качает картинки - удаляет картинки. Вот я и поставил вопрос подобным образом
Тут есть свои плюсы и минусы, если говорим про скрипт WSH Biography Text & Picture last.fm от kgena_ua, тем более если обещают модифицированный.
При его де активации большой экономии ресурсов не получим, а не удобств будет больше при открытии окна, начнется поиск картинок и биографии - это трата времени, а так в фоновом режиме.
Соглашусь, когда ресурсоёмкая панель, у меня например отключается панель Визуализации на milkdrop2, когда она не активна. При ее открытии проходит какое то время для запуска, но это экономит ресурсы.
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #916 Mechanic » 25.03.2016, 23:12

Народ всем привет нужна такая вещь нужен пик метер с выбором цветов но только нужно что была 1 полоса
место 2 двух например вы в DUI интерфеисе ставити пик метер так вот тама 2 полосы а мне нужна одна
отдельно для левого канала и отдельно для правого

Ну вроде более менее как то обьеснил
Mechanic M
Репутация: 0
С нами: 8 лет 9 месяцев

Сообщение #917 kgena_ua » 26.03.2016, 10:49

Mechanic, тут были, правда давненько, скрипты для пикметеров.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #918 MC Web » 26.03.2016, 18:19

kgena_ua, приветствую.

Столкнулся с одной "проблемой" при работе скрипта WSH Biography Text & Picture Last.fm, возможно кому то тоже попадалась.
Решил послушать альбомы In-Grid с EX.UA, на одном не хочет выводить ни фото ни биографию. Сначала думал загвоздка в "тире", тогда почему на других работает? Оказалось перед именем исполнителя стоит пробел, вроде не заметно, а не работает и сам никак не исправишь.

Возможно внести коррективы в работу скрипта для подобных случаев?
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #919 seriousstas » 26.03.2016, 18:24

не хочет выводить ни фото ни биографию
Я это давно заметил ..
для подобных случаев?
выложи пару примеров - я свои потерял, на EX.UA не часто ..
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #920 MC Web » 26.03.2016, 18:31

Ссылка на страницу альбома, где не показывает: http://www.ex.ua/99295549?r=99295810,3,23776
Все альбомы: http://www.ex.ua/99295810?r=3,23776

Примечание: плейлист у меня работает не по прямым ссылкам. :smile:
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Пред.След.

Вернуться в Секреты foobar2000