Модификация темы DarkOne v4

Список разделов Аудиоплеер foobar2000 Сборки Релизы сборок

Описание: Проверенные финальные версии сборок.

Сообщение #1 AHAPXICT » 04.10.2014, 02:44

Модификация DarkOne v4 оригинального автора tedGo включает в себя: DarkOne v4, DarkOne v3.1, CompactOne v1.0.1.
Концепция данной модификации, это использование различных визуализаций для создания соответствующей атмосферы при прослушивании музыки.
Важно: Для корректной работы DarkOne v4 требуется разрешение экрана монитора 1280*х и выше!
Проверьте наличие установленного DirectX 9 на вашем компьютере, необходим для работы foo_vis_shpeck

Скачать DirectX 9 можно здесь: microsoft.com
Для тех у кого возникают проблемы с плагином foo_prettypop код ошибки: Failed to load DLL: foo_prettypop.dll. Есть два варианта решения проблемы: 1. Удалить плагин. 2. Установить расширенный пакет NET Framework 3.5 включающий в себя пакеты 2.0 и 3.0 необходимые для работы foo_prettypop. Скачать: Microsoft .NET Framework 3.5 Скачать foo_prettypop с web.archive.org: Pretty Popup 1.2.5
Изображение
DarkOne v3.1 Поддерживает разрешение экрана 1024х768
Изображение
CompactOne v1.0
Изображение
Переключение VU meter осуществляется путём нажатия кнопок мыши на панели:
Нажатие левой кнопки при нажатой правой - предыдущий индикатор в группе.
Нажатие правой кнопки при нажатой левой - следующий индикатор в группе.

Код: Выделить всё
Дата сборки: 18.02.2020
Оригинальный автор: tedGo
Модифицировал: AHAPXICT
Версия сборки: 1.38 & 1.5.2
Версия плеера: Foobar2000 v1.3.20 & v1.5.2.0
История версий:
1.38 & 1.5.2
1. Основные изменения только в версии DarkOne_4_JS_v1.5.2. Обновлена версия плеера v1.5.2.0 и компонент foo_ui_columns-1.4.0. На панелях управления добавлены новые функции для кнопок, режим быстрого переключения предустановок DSP и выбора звукового устройства.

v1.37 & 1.4.8.2
1. Для Display Panel в DarkOne v.4 добавлено последовательное переключение Playback Order путём нажатия ЛКМ на пиктограмму.
2. Изменил концепцию масштабирования часов. Теперь часы общие для лайаутов 1280х  1366х с привязкой даты к левому краю, дня и месяца соответственно к правому краю. Версия Digital Clock FULL HD (Unfinished) тоже переделана, но так и осталась незаконченной (Unfinished)
3. Исправлена ошибка плавного фейдера громкости (скрипт позаимствован у kgena_ua). Теперь при нажатии СКМ на часах а потом на ручке громкости это не приводит к ошибке панели, а громкость восстанавливается до 0ДБ.
4. Новая версия Scroll Text теперь управляется СКМ и колесом мыши, а так же добавлен режим слева направо.
5. Специально для VU meter slim by kutuzof в DarkOne v.4 добавлен ещё один слот в дисплей панели.
6. В версии DarkOne v.3.1 в Menubar Panel так же добавлена возможность последовательного переключения Playback Order. Переключение между режимами СКМ на пиктограмме. По умолчанию установлен выбор, как раньше, через контекстное меню.
7. Переделан лайаут CompactOne.
8. Другие изменения и исправления.
9. Главное в конце)) Эта версия имеет частичную совместимость с пред идущими версиями, но возможен перенос файлов конфигурации(.fcl) из старых версий и наоборот.

v1.36 & 1.4.8.1
1. Заменён скрипт БИО на новый "Biography, albums, title, similar artist info www.last.fm 07112019" by kgena_ua
2. Добавлен VU Meter на дисплей панель. Рамка (border) кликабельная с переключением трёх видов отображения.
Список установленных плагинов:
foo_ac3
foo_adpcm
foo_cuefilter
foo_discogs
foo_dynamic_range
foo_hdcd
foo_http_sjis_patch2
foo_input_dts
foo_input_dvda
foo_input_monkey
foo_input_sacd
foo_logitech_lcd
foo_midi
foo_out_asio
foo_playcount
foo_prettypop
foo_quicksearch
foo_stop_after_queue
foo_ui_columns
foo_ui_hacks
foo_uie_albumlist
foo_uie_biography
foo_uie_elplaylist
foo_uie_esplaylist
foo_uie_explorer
foo_uie_lyrics3
foo_uie_panel_splitter
foo_uie_vis_channel_spectrum
foo_uie_vis_peakmeter_spectrum
foo_uie_wsh_panel_mod
foo_vis_shpeck
foo_vis_vumeter
foo_vst
foo_wave_seekbar
Важно! Дополнительные инструкции, а так же дополнительные сведения находятся в папке foobar2000 в файле Readme.txt
Установка:
1.Разархивировать архив в любое удобное для вас место на вашем компьютере.

Например: C:\Program Files; D:\; F:\; Съёмный диск(флешка) и Т.Д.

2.Запускается плейер с файла foobar2000.exe находящегося в папке: foobar2000\foobar2000.exe

Если вы хотите отправить ярлык на рабочий стол, на файле foobar2000.exe сделайте щелчок правой кнопкой мыши

и выберите в появившемся контекстном меню: Отправить\Рабочий стол(создать ярлык)

3.При первом запуске плейер предложит выбрать звуковое устройство: Выберите ваше звуковое устройство.

Настройка аудио параметров находится: Menu\File\Preferences\Playback\Output в пункте меню Device

выберите устройство вывода DirectSound, WASAPI или ASIO.

4.Добавление ваших медиа файлов в музыкальную библиотеку(Media Library) осуществляется через пункт меню:

Menu\Library\Configure или Menu\File\Preferences\Media Library -> кнопка меню Add... укажите расположение ваших медиа файлов.

Например: C:\Documents and Settings\Пользователь\Мои документы\Моя музыка; D:\Моя музыка\Rock и Т.Д.

Примичание: При первом запуске меню можно активировать кнопкой с передней панели - Album List

5.Плейер полностью готов к работе ;). Создавайте свои плейлисты и наслаждайтесь любимой музыкой!!!

Функции кнопок передней панели:

С функциями(левая панель):
Menu\view\Album List - Музыкальная библиотека
Menu\view\Layout - Переключение обложек. В Compact One смена обложек происходит через пункт меню: Menu\view\Layout
Menu\view\Playlist Manager - Менеджер плейлистов
Menu\view\DSP - открывает первые четыре плагина в списке DSP Manager

С функциями(правая панель) для воспроизводимого на данный момент файла(Now Playing):

Menu\Now Playing\Open containing folder - Открыть папку с файлом
Menu\Now Playing\File Operation\Copy to\... - копировать файл( Возможно копирование "стрим" потоков. Подходит не для всех)
Menu\Now Playing\Properties - Свойства
Menu\Now Playing\File Operation\Delete file - Удалить файл
Menu\Now Playing\Convert\... - Конвертировать
Menu\Now Playing\Tagging\Discogs\Write Tags... - Поиск тегов
Menu\Now Playing\Dynamic Range Meter - Измеритель динамического диапазона (Не работает для радио и "стрим" потоков)
Menu\Playback/Seek/Back by 30 seconds - Перемотка на 30 секунд назад (В скрипте можно поставить нужное время для перемотки)
Menu\Playback/Seek/Ahead by 30 seconds - Перемотка на 30 секунд вперёд
VolumeMute ON\OFF - Управление громкостью - режим отключить звук ВКЛ\ВЫКЛ

С функциями(верхняя панель) для плагина foo_ui_hacks, смотреть пункт 36. foo_ui_hacks by DRON:

View/Fullscreen - выполняет функцию включения полноэкранного режима вкл\выкл

View/Show or Hide caption - выполняет функцию: Показать или скрыть заголовок.

Важно!!!

При скрытом заголовке плеер перетаскивается за ту же кнопку, только за пиктограмму!

Отображение заголовка производится путём нажания на эту же кнопку в любом свободном месте от пиктограммы!

При двойном клике ПКМ на пиктограмме кнопки при скрытом заголовке - открывается полноэкранный режим, но с панелью меню пуск!
Код: Выделить всё
Примечания: 1. При использовании штатного эквалайзера, вызов его на экран кнопкой DSP на панели, вызовет "крэш" плеера. Что обусловлено особенностью эквалайзера или плагина foo_vst.
2. В VIS панели используются три аналоговых VU Meter для мониторов с высоким разрешением, сделанные из исходников macarych, имеющие индекс HD в названиях, находятся в папке USER VU Meter плагина foo_vis_vumeter. При возрастании нагрузки на процессор(для слабых ПК) их можно заменить на такие же из корневой папки плагина foo_vis_vumeter но без индекса в названии.
3. В активных DSP установлен штатный лимиттер, так как некоторые интернет радиостанции, из плей листа, имеют выходной уровень сигнала выше 0 ДБ.

Скачать с Google Диск:
DarkOne_4_v1.38 Версия плеера 1.3.20, версия WSH Panel Mod (Панель WSH) 1.5.10 (foo_uie_wsh_panel_mod.dll), Columns UI 0.5.1 (foo_ui_columns.dll). Системные требования WIN XP и выше.
DarkOne_4_JS_v1.5.2 Версия плеера 1.5.2.0, версия JScript Panel v2.3.5 by marc2003 (foo_jscript_panel.dll), Columns UI 1.4.0 (foo_ui_columns.dll). Системные требования WIN 7 и выше.

Старые версии
Скачать с Google Диск:
DarkOne_4_v1.37
DarkOne_4_JS_v1.4.8.2
DarkOne_4_JS_v1.4.8.1
DarkOne_4_JS_v1.4.8 Версия плеера 1.4.8
DarkOne_4_JS_v1.4.6 Версия плеера 1.4.6
DarkOne_4_JS_v1.4.3 Версия плеера v1.4.3, версия JS v2.2.1, Columns UI 1.0.0
DarkOne_4_JS_v1.4.2 Версия плеера v1.4.2, версия JS v2.2.0, Columns UI 1.0.0
DarkOne_4_JS_v1.4 Версия плеера v1.4, версия JS v2.1.7.2
DarkOne_4_JS_v1.34 Собрана на foo_jscript_panel (JS) v1.24
DarkOne_4_v1.36
DarkOne_4_v1.35
DarkOne_4_v1.34
DarkOne_4_v1.33
DarkOne_4_v1.33 Waveform Minibar (mod) Trash

Radio Logos
multi _logos.jpg

Установка:
Для отображения логотипов интернет станций в плей листах достаточно поместить папку Radio Logos с логотипами в папку с плеером.
Путь: foobar2000/Radio Logos

1. DarkOne Cover Panel by tedGo
Данную функцию можно активировать из контекстного меню по щелчку ПКМ(правая кнопка мыши) на панели(Cover Panel). Пункт меню: "Radio Logos: ON/OFF". Выбор в контекстном меню доступен в режиме "Стоп" или при воспроизведении интернет радио. В папке foobar2000 автоматически создаст папку Radio Logos, если она ещё не создана. В папку можно добавлять картинки с логотипами для интернет станций. Названия картинок должны соответствовать названиям станций, служебные символы виндовс не используются. Для упрощения операции переименования своих картинок в пункт контекстного меню добавлена функция Copy filename to clipboard. Функция становится доступной в режиме воспроизведения и если включено отображение логотипов Radio Logos: ON. Функция копирует название интернет станции в буфер обмена сразу заменяя запрещённые символы допустимыми, в результате получается готовое название для переименования файла (картинки). Рекомендуется переименовывать картинки из меню свойства ПКМ по картинке. Других действий не требуется.

2. CoverFlow View by Br3tt
Функцию можно активировать из всплывающей панели инструментов Toolbar в верхней части панели, пункт контекстного меню: Radio Logos

Для удобства обложки разделены по плейлистам, а также в архивах присутствуют сами плейлисты в формате .fpl:

Скачать с Google Диск:
Radio Logos
Radio Logos by kutuzof More logos, more stations!
Новые изображения для DarkOne и VU Meter by kutuzof. Рекомендую!
Alternative images & VU Meters for DarkOne by kutuzof
Изображение
Скачать с Google Диск: Image for DarkOne
Add-ons DarkOne v4.0 by kutuzof
Описание будет добавляться!
Изображение
Изображение
Изображение
Скачать с Google Диск:
DarkOne v4.0 (JS).rar Системные требования WIN 7 и выше.
DarkOne v4.0 (WSH).rar Системные требования WIN XP и выше.
Последний раз редактировалось AHAPXICT 23.02.2020, 09:40, всего редактировалось 125 раз(а).
Media Library it's bad - explorer it's good!
AHAPXICT M
Автор темы, Гуру
Аватара
Возраст: 49
Откуда: Киев
Репутация: 224
С нами: 6 лет 4 месяца


Сообщение #61 kairat1968 » 18.03.2015, 22:32

Всё наоборот стараются уйти от того, что-бы звук программно на компе обрабатывался. Твоя звуковая карта не при делах,
по HDMI с видеокарты намного проще и пролазит всё, самые тяжёлые форматы.
Настраивай в винде вывод звука правильно, можешь почитать тему на ХОБОТЕ, посвящённую выводу по HDMI.

спс за подсказку. тема HDMI уже в прошлом. все равно управлять с пульта ресивера ПК не возможно через ХДМЭ.согласен с вами фубар в обход винды звучит интересней. тестил на медне ресивер макинош в паре с аймаком звук супер хотя не хватает резкости фубара да и уже привычного звучания совкогова эс-90.думаю продать часть коллекции винила да прикупить боченок от эйпл. уже достал меня сонни .брал из-за 4К. сплошное разочарование.глубины звука и желаемое звучание получаешь тока через фубар. в ресивере да и в плеере никаких настроек тупо как есть и все. акустика от сони срезает верхи а саб просто бубнит соседям. ямаха до этого звучала по грамотней хотя из китая .у пк харман на среднем усиление звучит по бархатней. может зажрался но усилитель от макинтош дал мне понять что вся моя бытовая техника которую собирал годами отстой (((.да и даже по моему субъективному мнению ламповый усилитель уступает макинтошу.стоит не мерено но хочется.
kairat1968
Новичок
Репутация: 0
С нами: 5 лет 6 месяцев

Сообщение #62 vladj » 19.03.2015, 12:19

kairat1968 писал(а):управлять с пульта ресивера ПК не возможно через ХДМЭ
Мне нравится управлять фубаром со смартфона на Андроиде купленным на маркете приложением,
"foobar 2000 controller PRO". В фубаре для этого устанавливается плагин foo_httpcontrol.
kairat1968 писал(а):не хватает резкости фубара да и уже привычного звучания совкогова эс-90
Нет никакой резкости, фубар честно выгоняет по цифре (HDMI или SPDIF) всё, что мы ему предлагаем.
У совковых АС 90 были приличные низы (по которым приходится скучать) и никакие средина и верха.
Замена мидов и твиттеров на современные поправит это. Ну и естествено...самую большую роль в тракте
играет именно то, какой усилитель используется, имхо.
HTPC Termaltake, eGlobal i5-7200, Asrock Beebox J3160, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 388
С нами: 10 лет 2 месяца

Сообщение #63 kgena_ua » 13.04.2015, 09:50

AHAPXICT, немного баловства :smile:
Скрипт: "бегущая строка".
Дополнение: плавное изменение цвета при переключении цвета.
Скрипт не изменял, что-то заремил, новое с пометкой //added.
Код: Выделить всё
// Scroll Text
// author kgena_ua
// modifed AHAPXICT for DarkOne v4.0 by tedGo
// version 2.0
// WSH Panel Mod component by Tianpeng Wang

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
MF_SEPARATOR = 0x00000800;
MF_STRING = 0x00000000;
var font = gdi.Font("DarkOne",29,0);  //FONT
var ww,wh;

var txt_row = 4;
var s = 10, step, step1 = window.Width, step2 = window.Width;
var text1, text2, t_width, t_width1, t_width2, dir, mode, sw = 1;
var t1 = "", t2 = "", t3 = "", ti = "";
var show1, show2, show3, showi, showr;

get_color();    //added

function on_paint(gr) {
   
//    if (window.GetProperty("|6| Color") == 1) var font_rgb = RGB(191,228,255), block_rgb = RGB(24,37,46);   //Default   
//    if (window.GetProperty("|6| Color") == 2) var font_rgb = RGB(128,192,255), block_rgb = RGB(22,36,46);   //Blue   
//    if (window.GetProperty("|6| Color") == 3) var font_rgb = RGB(0,255,0), block_rgb = RGB(18,38,38);       //Green   
//    if (window.GetProperty("|6| Color") == 4) var font_rgb = RGB(255,0,0), block_rgb = RGB(38,26,34);       //Red   
//    if (window.GetProperty("|6| Color") == 5) var font_rgb = RGB(255,255,255), block_rgb = RGB(26,38,46);   //White   
//    if (window.GetProperty("|6| Color") == 6) var font_rgb = RGB(255,255,0), block_rgb = RGB(26,38,38);     //Yellow   

    show1 = window.GetProperty("|1| Title",1);
    show2 = window.GetProperty("|2| Artist",1);
    show3 = window.GetProperty("|3| Album",1);
    mode = window.GetProperty("|5| Mode",1);
    showi = window.GetProperty("|4| Info",1);
   
    if (show1 == 1) {t1 = fb.TitleFormat("$upper([%title%])").Eval();
    } else {t1 = "";}

    if (show2 == 1) {t2 = fb.TitleFormat("$upper([%artist%])").Eval();
    } else {t2 = "";}

    if (show3 == 1) {t3 = fb.TitleFormat("$upper([%album%])[ - %date%]").Eval();
    } else {t3 = "";}
   
    if (showi == 1) {ti = fb.TitleFormat("[$info(encoding)][ | $info(codec)][ $info(codec_profile)][ | $info(bitrate) kbps][ | $info(samplerate) Hz][ | $info(bitspersample) bps][ | $channels()]$if($stricmp($ext(%filename_ext%),cue), | '['cue']',[ | %filesize_natural%])$if($strcmp($info(cue_embedded),yes), | '['embedded cue']',)").Eval();
    } else {ti = "";}
 
    text1 = t1 + (show1 > 0 && t2 != "" ? " - " : "") + t2 + ((show1 > 0 || show2 > 0) && t3 != "" ? " - " : "") + t3;
    text2 = showi == 1 ? ti : text1;
    text1 = showi == 1 && text1 == "" ? text2 : text1;
    t_width2 = gr.CalcTextWidth(text2, font);
    t_width1 = gr.CalcTextWidth(text1, font);
   
    if (mode == 1) {
        step = sw == 1 ? step1 : step2;
        t_width = sw == 1 ? t_width1 : t_width2;
        if (sw == 1) {step2 = ww};
        if (sw == 2) {step1 = ww};
        if (t_width < ww - s * 2) {
            if (step >= ww) {dir = "left"; step = ww };
            if (step + t_width >= ww - s) {dir = "left"};
            if (step <= 0 + s) {dir = "right"};
        } else {
            if (step + t_width <= ww - s) {dir = "right"};
            if (step >= 0 + s) {dir = "left"};
        }
    }
    if (mode == 0) { dir = "left";
        if (sw == 1) {
            if (step1 + t_width1 > ww/2) {step2 = ww};
            if (step1 + t_width1 <= 0) {step1 = ww; sw = 2};

        } else {
            if (step2 + t_width2 > ww/2) {step1 = ww};
            if (step2 + t_width2 <= 0) {step2 = ww; sw = 1};
        }
    }
 String.prototype.repeat = function(n) {
return new Array(n + 1).join(this);
}   
// ========BACKGROUND & BLOCKS======== //
//  gr.FillSolidRect (0, 0, ww, wh, RGB(19,30,38));
    gr.GdiDrawText( "\u2598".repeat(18), font, block_rgb, 0, txt_row, ww, wh);
// ========TEXT======== //   
    gr.GdiDrawText( text1, font, font_rgb, step1, txt_row, t_width1, wh);
    gr.GdiDrawText( text2, font, font_rgb, step2, txt_row, t_width2, wh);
}

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

var seek_timer;
var speed = window.GetProperty("|7| Speed Scroll", 50);
function on_playback_new_track(info) {
    seek_timer && window.ClearInterval(seek_timer);
    seek_timer = window.SetInterval(function() {
        if (dir == "right") {step1 = step1 + 1};
        if (dir == "right") {step2 = step2 + 1};
        if (dir == "left") {step1 = step1 - 1};
        if (dir == "left") {step2 = step2 - 1};
    window.Repaint();
    }, speed );
}

function on_playback_stop() {
    window.ClearInterval(seek_timer);
    window.Repaint();
}

function on_playback_time(){
    if(!seek_timer) on_playback_new_track();
}

function on_mouse_lbtn_up (x, y){     
    var _menu = window.CreatePopupMenu();
    var i = 1;
   
    _menu.AppendMenuItem(0x00000000, i++, "title");
    _menu.CheckMenuItem(i-1, show1);   
    _menu.AppendMenuItem(0x00000000, i++, "artist");
    _menu.CheckMenuItem(i-1, show2);   
    _menu.AppendMenuItem(0x00000000, i++, "album");
    _menu.CheckMenuItem(i-1, show3);
    _menu.AppendMenuItem(0x00000000, i++, "info");
    _menu.CheckMenuItem(i-1, showi);
    _menu.AppendMenuItem(0x00000000, i++, "scrolling mode: " + (mode == 0 ? "L-R" : "L"));

    ret = _menu.TrackPopupMenu(x, y);
    if (ret == 0) return;

    switch (ret) {
    case 1:
        window.SetProperty("|1| Title", show1 == 0 ? 1 : 0);
        break;
    case 2:
        window.SetProperty("|2| Artist", show2 == 0 ? 1 : 0);
        break;
    case 3:
        window.SetProperty("|3| Album", show3 == 0 ? 1 : 0);
        break;
    case 4:
        window.SetProperty("|4| Info", showi == 0 ? 1 : 0);
        break;
    case 5:
        window.SetProperty("|5| Mode", mode == 0 ? 1 : 0);
        break;
    }
    _menu.Dispose();
    return true;
}
// ========Menu======== //
function on_mouse_rbtn_up(x, y) {

    var _menu = window.CreatePopupMenu();
   
    _menu.AppendMenuItem(MF_STRING, 1, "Default");
    _menu.AppendMenuItem(MF_STRING, 2, "Blue");
    _menu.AppendMenuItem(MF_STRING, 3, "Green");
    _menu.AppendMenuItem(MF_STRING, 4, "Red");
    _menu.AppendMenuItem(MF_STRING, 5, "White");
    _menu.AppendMenuItem(MF_STRING, 6, "Yellow")
    _menu.CheckMenuRadioItem(1, 6, window.GetProperty("|6| Color", 1));   

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0)
    _menu.AppendMenuItem(MF_STRING, 7, "Properties...");
    _menu.AppendMenuItem(MF_STRING, 8, "Configure...");

    idx = _menu.TrackPopupMenu(x, y);
    switch (idx) {

    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
//        window.SetProperty("|6| Color", idx);   
        ch_color(idx);  //added
//        window.Repaint();   
        break;   
    case 7:
        window.ShowProperties();
        break;
    case 8:
        window.ShowConfigure();
        break;
}
    _menu.Dispose();
return true
}

//added

var block_rgb, font_rgb;

function get_color() {
    if (window.GetProperty("|6| Color") == 1)  font_rgb = RGB(191,228,255), block_rgb = RGB(24,37,46);   //Default   
    if (window.GetProperty("|6| Color") == 2)  font_rgb = RGB(128,192,255), block_rgb = RGB(22,36,46);   //Blue   
    if (window.GetProperty("|6| Color") == 3)  font_rgb = RGB(0,255,0), block_rgb = RGB(18,38,38);       //Green   
    if (window.GetProperty("|6| Color") == 4)  font_rgb = RGB(255,0,0), block_rgb = RGB(38,26,34);       //Red   
    if (window.GetProperty("|6| Color") == 5)  font_rgb = RGB(255,255,255), block_rgb = RGB(26,38,46);   //White   
    if (window.GetProperty("|6| Color") == 6)  font_rgb = RGB(255,255,0), block_rgb = RGB(26,38,38);     //Yellow
}

function getRed(color) {
   return ((color >> 16) & 0xff);
}

function getGreen(color) {
   return ((color >> 8) & 0xff);
}

function getBlue(color) {
   return (color & 0xff);
}

var g_timer;

function ch_color(idx) {
    get_color();

    old_R = getRed(font_rgb);   
    old_G = getGreen(font_rgb);   
    old_B = getBlue(font_rgb);

    window.SetProperty("|6| Color", idx);   
//    window.SetProperty("Color", idx);
   
    get_color();

    new_R = getRed(font_rgb);   
    new_G = getGreen(font_rgb);   
    new_B = getBlue(font_rgb);

    step_R = (new_R - old_R)/255; step_G = (new_G - old_G)/255; step_B = (new_B - old_B)/255;

    g_timer = window.SetInterval(function() {
        old_R = old_R + step_R; old_G = old_G + step_G; old_B = old_B + step_B;
        R = old_R; G = old_G; B = old_B;
        font_rgb = RGB(R,G,B)
        window.Repaint();
       
        if (
            step_R < 0 && R <= new_R || step_G < 0 && G <= new_G || step_B < 0 && B <= new_B ||
            step_R > 0 && R >= new_R || step_G > 0 && G >= new_G || step_B > 0 && B >= new_B
        ) {window.ClearInterval(g_timer); R = new_R; G = new_G; B = new_B; font_rgb = RGB(R,G,B)};
    }, 5);
}


I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 56
Откуда: Украина, Днепр
Репутация: 459
С нами: 6 лет 11 месяцев

в последний раз по картинкам.

Сообщение #64 АНАРХИСТ » 27.04.2015, 21:15

качаю всё с одного и того же трекера, где к контенту относятся очень бережно. В папках с флаками и апе, почти всегда сканы обложек. Которые ни одна сборка не хочет показывать. Если по способу предложенному вами, добавлять картинку с Last.fm , то она показывается, но в папке, в которую она добавляется, картинок уже навалом, а показывает только свежескачанную. Как быть? Как видеть скачанные вместе с контентом качественные сканы и ничего вручную не подгружать?
АНАРХИСТ
Гость

Сообщение #65 AHAPXICT. » 28.04.2015, 07:22

АНАРХИСТ, скажу вам как анархист - анархисту: Как правило на всех трекерах сканы обложек входящих в контент находятся в папках с какими угодно названиями, но только не Covers, Cover, Artwork и т.д., а сами картинки в названиях не имеют нечего общего с folder, front, cover, back, cd и т.п.. Потому у вас не одна сборка и не хочет их показывать))) И если вы сидер то менять названия не выход. У меня сейчас нет возможности сделать файл конфигурации .fcl, поэтому попробуйте сами сделать следующее:
1. Сохраните свой файл конфигурации: Menu\File\Preferences\Display\Columns UI\Main - FCL importing and exporting - Export...
2. Сделайте щелчок ПКМ на окне Cover Panel ----> Configure...
3. Замените исходный скрипт на скрипт от Maxim Terpilovsky, этот скрипт показывает любые картинки, многие его используют в своих сборках.
Спойлер
Код: Выделить всё
// Maxim Terpilovsky's script
// http://terpilovsky.ru
// Artwork / Updated 27-01-2014

DT_END_ELLIPSIS = 0x00008000;
DT_EDITCONTROL = 0x00002000;
DT_TOP = 0x00000000;
DT_LEFT = 0x00000000;
DT_CENTER = 0x00000001;
DT_RIGHT = 0x00000002;
DT_VCENTER = 0x00000004;
DT_BOTTOM = 0x00000008;
DT_WORDBREAK = 0x00000010;
MF_STRING = 0x00000000;
MK_CONTROL = 0x0008; 
DT_CALCRECT = 0x00000400;
MF_POPUP = 0x00000010;
MK_SHIFT = 0x0004; 
DT_NOPREFIX = 0x00000800;

function StrFmt(alignH,alignV,trim,flag){ return ((alignH<<28)|(alignV<<24)|(trim<<20)|flag); }
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r,g,b,a){ return ((a<<24)|(r<<16)|(g<<8)|(b)); }

var FSO = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");
var ww, wh;
var g_hover = 0;

if ( utils.CheckFont( "Segoe UI" ) ) {
    var g_font       = gdi.Font("Segoe UI", 13);
    var g_font2      = gdi.Font("Segoe UI", 12, 0);
    var g_font_small = gdi.Font("Segoe UI", 11, 0);
} else {
   var g_font       = gdi.Font("Tahoma", 13);
    var g_font2      = gdi.Font("Tahoma", 11, 1);
    var g_font_small = gdi.Font("Tahoma", 10, 1);
}



/*var arrow_left, arrow_right, info_hover = 0;
try {
    var arrow_left  = gdi.Image( fb.FoobarPath + "\\s7e_files\\images\\arrow_left.png" );
    var arrow_right = gdi.Image( fb.FoobarPath + "\\s7e_files\\images\\arrow_right.png" );
    var picture = gdi.Image( fb.FoobarPath + "\\s7e_files\\images\\picture.png" );
    var user_image     = gdi.Image( fb.FoobarPath + "\\s7e_files\\images\\user.png" );
} catch(e) {
    // fb.trace(e.message);
}
*/



function CoverShow( metadb ) {

   this.CachedPath = 0;
    this.CachedCoversNumber = 0;


    // Current Mode
    this.CurrentMode        = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'displayed_cover', 1) );

    // Current Mode
    this.DisplayMode        = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'disp_mode', 1) );

   // Priority
   this.Priority           = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'cover_priority', 2) );

   // Exclude
   this.Exclude            = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'exclude_covers', 0) );

   // Pattern
    // 1 - *keywords*.*
    // 2 - keywords.*
   this.MatchPattern       = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'match_pattern', 1) );

   // Aspect ratio
   this.Aspect             = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'covers_aspect', 1) );

   // Gesture
   this.GestureInverted    = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'gesture_inverted', 0) );

   // Covers from Root folder
   this.RootCovers         = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'root_covers', 1) );

   // Covers from subfolders
   this.SubCovers          = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'sub_covers', 1) );


   // Interval
   this.Interval           = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'interval', 1) );
    this.Intervals          = new Array(5000, 15000, 30000, 60000, 120000);

    cache_path              = utils.ReadINI(fb.FoobarPath + 's7e.ini', 'bio', 'cache_path');
    this.CachePath          = cache_path ? cache_path : false;


   // No Cover and Case
   //try {
      //this.NoCover = gdi.Image( fb.ProfilePath + "s7e_files\\images\\nocover.png" );
      //this.Case = gdi.Image( fb.ProfilePath + "s7e_files\\images\\case.png" );
   //}
   //catch(e) { }

   // Metadb
   this.OutputMetadb = function() {

        return ( this.CurrentMode == 3 || !fb.IsPlaying ? fb.GetFocusItem(true) : fb.GetNowPlaying() );

   }


    this.FormatMeta = function( meta, db ) {

        if ( db )  {
          s     = fb.TitleFormat("%" + meta + "%").EvalWithMetadb( db );
          s     = s.replace(/[\/\\\:\*\?\"\<\>\|]/g,'-');
            s     = s.replace(/(^\s+)|(\s+$)/g, "");
            return s;
        } else return '';

    }

   // Search for files
   this.Search = function( 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();
      }

   }

   // Find all covers in the folder
   this.GetExternalCovers = function( path ) {

      var files = [];
      var files_this = [];
      var files_subs = [];
      var covers = [];

      try {
         var dir  = FSO.GetFolder( path );
            var root = dir.ParentFolder;

         this.Search(files_this, dir);
            this.Search(files_this, root);

            if ( this.SubCovers ) {

             var e = new Enumerator( dir.SubFolders );

             for(; !e.atEnd(); e.moveNext() ) {
                this.Search(files_subs, e.item() );
             }

            }

      } catch(e) {
            // fb.trace( 'this.GetExternalCovers / path: ' + e.message );
        }


      if ( files_this.length > 0 || files_subs.length > 0 ) {

            files_this.sort();
            files_subs.sort();
            files = files.concat(files_this, files_subs);

            var k = files.length;
            files.reverse();
            while (k--){

            var name = files[k];

                if ( this.MatchPattern == 1 ) {
                    if ( name.match(/.*(cover|front|folder)([^\\]*)\.(jpg|jpeg|gif|png|bmp|tiff)$/i) ) {
                        covers.push( name );
                        files[k] = null;
                    }
                }
                else {
                    if ( name.match(/\\(cover|front|folder)\.(jpg|jpeg|gif|png|bmp|tiff)$/i) ) {
                        covers.push( name );
                        files[k] = null;
                    }
                }
         }

         overall = covers;


         k = files.length;
            while (k--){
                var cur = files[k];
            if ( typeof( cur ) == 'string' ) overall.push( cur );
         }

         return overall;

      }
      else return new Array();

   }


   this.GetCovers = function( path ) {

      switch ( this.Exclude ) {

         case 0:
               var embedded  = this.DisplayMode == 2 && this.CachePath ? [] : this.GetEmbeddedCovers( this.Metadb );
               var external  = this.GetExternalCovers( path );

               var allcovers = [];

               if ( this.Priority == 1 ) allcovers = allcovers.concat(embedded, external);
               else                      allcovers = allcovers.concat(external, embedded);

               this.Covers = allcovers;
            break;


         case 1:
               var external = this.GetExternalCovers( path );
               this.Covers = external;
            break;


         case 2:
               var embedded = this.DisplayMode == 2 && this.CachePath ? [] : this.GetEmbeddedCovers( this.Metadb );
               this.Covers = embedded;
            break;

      }


      if ( this.Covers.length > 0 ) {

         try {

                var temp = this.Covers[0];
                return ( typeof temp == 'object' ? temp.Clone( 0, 0, temp.Width, temp.Height ) : gdi.LoadImageAsync( window.ID, temp ) );

         }
         catch(e) { return undefined; }

      }
      else {
         this.Covers = false;
         return 0;
      }

   }


   this.GetEmbeddedCovers = function( metadb ) {

        if ( metadb ) {
            var embedded = [];
            var c = 5;
            while ( c-- ) {

                if ( c == 3 ) continue;

                var temp = utils.GetAlbumArtEmbedded( metadb.RawPath, c );
                if ( temp ) embedded.push( temp );

            }
            return embedded;
        } else return [];

   }


   this.CompareDirs = function() {

        metadb = this.OutputMetadb();
        try {
            artist = this.Eval( this.Metadb, 'artist'  );
            metapath = metadb.Path;
            metapath = this.DisplayMode == 2 && this.CachePath && FSO.FolderExists( this.CachePath + '\\' + artist ) ? this.CachePath + '\\' + artist : metapath.replace(/\\([^\\]*)$/g, '');
        }
        catch (e) { metapath = 0; }

        if ( metapath ) {

            switch ( this.Exclude ) {

                case 0:
                        var embedded  = this.DisplayMode == 2 && this.CachePath ? [] : this.GetEmbeddedCovers( this.Metadb );
                        var external  = this.GetExternalCovers( metapath );

                        var allcovers = [];

                        if ( this.Priority == 1 ) allcovers = allcovers.concat(embedded, external);
                        else                      allcovers = allcovers.concat(external, embedded);

                        //this.Covers = allcovers;
                    break;


                case 1:
                        var allcovers = this.GetExternalCovers( metapath );
                        //this.Covers = external;
                    break;


                case 2:
                        var allcovers = this.DisplayMode == 2 && this.CachePath ? [] : this.GetEmbeddedCovers();
                       
                        //this.Covers = embedded;
                    break;

            }

         var allcovers = new Array();
            allcovers = allcovers.concat(embedded, external);

            return this.CachedCoversNumber == allcovers.length;
        }
    }


   this.ChangeImage = function( val ) {
      this.CurrentCover = val;
   }


   this.NextCover = function() {

      if ( this.Covers && this.Covers.length > 1 ) {

         this.CurrentCoverNumber = this.CurrentCoverNumber + 1 == this.Covers.length ? 0 : this.CurrentCoverNumber + 1;

         try {

                var temp = this.Covers[ this.CurrentCoverNumber ];
                var img = ( typeof temp == 'object' ) ? temp.Clone(0,0,temp.Width,temp.Height) : gdi.LoadImageAsync(window.ID, temp);

         } catch (e) { var img = undefined; }


            this.ChangeImage( img );
            window.Repaint();

      }
        else if ( !this.Covers ) { this.Update();  }

   }

    this.MultipleCovers = function() {

        return ( this.Covers && this.Covers.length > 1 );

    }

   this.PrevCover = function() {

      if ( this.Covers && this.Covers.length > 1 ) {

         this.CurrentCoverNumber = ( this.CurrentCoverNumber == 0 ) ? this.Covers.length - 1 : this.CurrentCoverNumber - 1;

         try {

                var temp = this.Covers[ this.CurrentCoverNumber ];
                var img = ( typeof temp == 'object' ) ? temp.Clone(0,0,temp.Width,temp.Height) : gdi.LoadImageAsync(window.ID, temp);

         } catch (e) { var img = undefined; }

            this.ChangeImage( img );
            window.Repaint();

      }
        else if ( !this.Covers ) { this.Update(); }

   }


   this.StopTimer = function() {
      this.CycleTimer ? window.ClearInterval(this.CycleTimer) : '';
   }

   this.StartTimer = function() {

        if ( this.CycleTimer ) window.ClearInterval( this.CycleTimer );
      if ( this.CurrentMode == 2 ) this.CycleTimer = window.SetInterval( function() { Cover.NextCover() }, this.Intervals[ this.Interval ] );

   }

    this.Reset  = function() {

        this.Covers = false;
        this.CoverX = null;
        this.CoverY = null;
        this.CurrentCoverNumber = 0;
        this.CurrentCover = 0;
        this.CachedPath = '';
        this.CachedCoversNumber = 0;
        this.CachedArtist = '';
    }


   this.Eval = function( meta, field ) {

        path = meta ? meta.Path : '';
      if ( path ) return path.indexOf('://') > 0 ?  fb.TitleFormat("[%" + field + "%]").Eval( true ) : fb.TitleFormat("[%" + field + "%]").EvalWithMetadb( meta );

   }


   this.Update = function( metadb ) {

      this.Metadb = metadb ? metadb : this.OutputMetadb();
       
        artist = this.Eval( this.Metadb, 'artist'  );

      try {
            dir = this.Metadb.Path;
            dir = dir.replace(/\\([^\\]*)$/g, '');
            this.MetaPath = this.DisplayMode == 2 && this.CachePath && FSO.FolderExists( this.CachePath + '\\' + artist ) ? this.CachePath + '\\' + artist : dir;
        }
      catch (e) { this.MetaPath = 0; }

      if ( this.MetaPath && artist ) {

            var artist_temp = this.Eval( this.Metadb, 'artist'  );
            var a = this.CachedPath ? this.CachedPath : ' ';
            var b = this.MetaPath;

            if ( a != b || ( this.CachedArtist != artist_temp ) ) {

                this.Covers             = false;
            this.CurrentCoverNumber = 0;
                this.CurrentCover       = this.GetCovers( this.MetaPath );
                this.CachedPath         = this.MetaPath;
                this.CachedCoversNumber = this.Covers != undefined ? this.Covers.length : 0;
                this.CachedArtist       = artist_temp;
                window.Repaint();

         }

      }
      else {

            this.Reset();
            window.Repaint();

        }

   }

   //this.Update( metadb);
    this.CachedArtist = '';
    this.CachedCoversNumber = this.Covers != undefined ? this.Covers.length : 0;
   this.CycleTimer = 0;
   this.TimerStarted = false;
    this.LbtnPressed = 0;
    this.X1 = 0;
    this.X2 = 0;
    this.X  = 0;
    this.MouseGesture = 0;
    this.CoverX = null;
    this.CoverY = null;
    this.Covers = undefined;
}


var Cover = new CoverShow();


function on_size() {

    ww = window.Width;
    wh = window.Height;
///    if ( ww && wh ) { Cover.Reset(); Cover.Update(); }

}


function on_paint( gr ) {

    //d = new Date();
    //t = d.getTime();

        gr.SetSmoothingMode( 4 );
        gr.SetInterpolationMode( 1 );
///        gr.FillSolidRect(0, 0, ww, wh, RGB(255,255,255));


        if ( Cover.Covers ) {

            // Bottom box
///            gr.FillSolidRect( 0, wh - 27, ww, 27, RGBA(255,255,255,150));


            // Check if it's corrupted or not loaded
            if ( !Cover.CurrentCover ) {

                Cover.CoverX = null;
                Cover.CoverY = null;

                var cov = Cover.Covers[ Cover.CurrentCoverNumber ];

                if ( typeof cov == 'object' ) {

                    Cover.CurrentCover = cov == null ? false : cov.Clone(0,0,cov.Width,cov.Height);
                    var image_name = 'Embedded image';

                }
                else {

                    Cover.CurrentCover = gdi.Image( cov );
                    if ( Cover.CurrentCover == null ) Cover.CurrentCover = false;
                    var image_name = 'Image';

                }

                if ( !Cover.CurrentCover ) gr.GdiDrawText( image_name + ' is probably corrupted and cannot be displayed.', g_font, RGB(0,0,0), 0, 0, ww, wh, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);               
                if ( !Cover.CurrentCover ) gr.GdiDrawText( image_name + ' is probably corrupted and cannot be displayed.', g_font, RGB(140,164,179), 0, 0, ww, wh, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);               

            }


            if ( typeof Cover.CurrentCover == 'object' ) {

                var img = Cover.CurrentCover;

                // Width, height, coords
///                var resulting_height = wh - 53;

                if ( Cover.Aspect ) {

                    if ( img.Width > ww || img.Height > wh ) {
//                    if ( img.Width > ww || img.Height > resulting_height ) {
                        var iw1 = ww;
                        var iw2 = img.Width / ( img.Height / wh );
///                        var iw2 = img.Width / ( img.Height / resulting_height );
                        var ih1 = wh;
///                        var ih1 = resulting_height;
                        var ih2 = img.Height / ( img.Width / ww );
                        var iw = Math.min(iw1, iw2);
                        var ih = Math.min(ih1, ih2);

                    }
                    else {
                        var iw = img.Width;
                        var ih = img.Height;
                    }

                }
                else {

                    var iw = ( img.Width > ww ) ? ww : img.Width;
                    var ih = ( img.Height > wh ) ? wh : img.Height;
///                    var ih = ( img.Height > resulting_height ) ? resulting_height : img.Height;

                }

                img = img.CreateRawBitmap();

                var x = (iw < ih) ? ((iw < ww) ? ((ww - iw)/2) : 0 ) : ((iw >= ww) ? 0 : ((ww - iw)/2));
                var y = (iw > ih) ? ((ih < wh) ? ((wh - ih)/2) : 0 ) : ((ih >= wh) ? 0 : ((wh - ih)/2));
///                var y = (iw > ih) ? ((ih < resulting_height) ? ((wh - ih)/2) : 0 ) : ((ih >= resulting_height) ? 0 : ((wh - ih)/2));

                Cover.CoverX = x;
                Cover.CoverY = y;

                // Draw cover
                gr.GdiDrawBitmap( img, x, y, iw, ih, 0, 0, img.Width, img.Height );

                if((wh - ih)/2 < 15 && g_hover == 1){
                    gr.FillSolidRect (0, 0, ww, 18, RGBA(0,20,30,150));                 
                    gr.FillSolidRect (0, wh - 18, ww, wh, RGBA(0,20,30,150)); 
                }

                // Resolution
///                gr.GdiDrawText( Cover.CurrentCover.Width + " × " + Cover.CurrentCover.Height, g_font_small, RGB(0,0,0), 0, wh - 25, ww, 25, DT_CENTER | DT_VCENTER | DT_CALCRECT);
                if (g_hover == 1) {
                    gr.GdiDrawText( Cover.CurrentCover.Width + " X " + Cover.CurrentCover.Height, g_font_small, RGB(0,0,0), 7, 1, ww, 18, DT_LEFT| DT_VCENTER | DT_END_ELLIPSIS | DT_CALCRECT);
                    gr.GdiDrawText( Cover.CurrentCover.Width + " X " + Cover.CurrentCover.Height, g_font_small, RGB(140,164,179), 6, 0, ww, 18, DT_LEFT| DT_VCENTER | DT_END_ELLIPSIS | DT_CALCRECT);
                }

                // Filesize
///                try { var size = Math.round( FSO.GetFile( Cover.Covers[ Cover.CurrentCoverNumber ] ).size / 1024 ) + " KB"; }
///                catch(e) { var size = ''; }
///                gr.GdiDrawText( size, g_font_small, RGB(0,0,0), 6, wh - 25, ww, 25, DT_LEFT| DT_VCENTER | DT_CALCRECT);


                // Release graphics
                var graphics = Cover.CurrentCover.GetGraphics();
                Cover.CurrentCover.ReleaseGraphics( graphics );
                Cover.CurrentCover.Dispose();
                Cover.CurrentCover = 0;

            }
            else if ( typeof Cover.CurrentCover == 'number' ) {

                gr.GdiDrawText( 'Loading...', g_font2, RGB(0,0,0), 1, 1, ww, wh, DT_CENTER | DT_VCENTER | DT_CALCRECT);
                gr.GdiDrawText( 'Loading...', g_font2, RGB(140,164,179), 0, 0, ww, wh, DT_CENTER | DT_VCENTER | DT_CALCRECT);

            }

            // Cover Number

            if (g_hover == 1) {
                gr.GdiDrawText( (Cover.CurrentCoverNumber+1) + "/" + Cover.Covers.length, g_font_small, RGB(0,0,0), -5, wh - 20, ww, 25, DT_RIGHT | DT_VCENTER | DT_CALCRECT);
                gr.GdiDrawText( (Cover.CurrentCoverNumber+1) + "/" + Cover.Covers.length, g_font_small, RGB(140,164,179), -6, wh - 21, ww, 25, DT_RIGHT | DT_VCENTER | DT_CALCRECT);
            }
///            gr.DrawLine( 0, wh - 25, ww, wh - 25, 1, RGB(218,219,220));

            // Filename
            if ( typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) var filename = 'Embedded';
            else if ( Cover.Covers[ Cover.CurrentCoverNumber ] ) var filename = Cover.Covers[ Cover.CurrentCoverNumber ].replace(/(.*)\\(.*)$/i,"$2");

///            estimate = gr.EstimateLineWrap(filename, g_font_small, ww - 10);
///            estimate = estimate.toArray();

///            if ( picture && user_image ) gr.DrawImage( Cover.DisplayMode == 2 ? user_image : picture, 5, 5, picture.Width, picture.Height, 0, 0, picture.Width, picture.Height, angle = 0, alpha = 255);
            if (g_hover == 1) {
                gr.GdiDrawText( filename, g_font_small, RGB(0,0,0), 6, wh - 17, ww - 39, 18, DT_LEFT| DT_VCENTER | DT_END_ELLIPSIS | DT_CALCRECT);
                gr.GdiDrawText( filename, g_font_small, RGB(140,164,179), 5, wh - 18, ww - 40, 18, DT_LEFT| DT_VCENTER | DT_END_ELLIPSIS | DT_CALCRECT);
            }
///            gr.DrawLine( 0, 25, ww, 25, 1, RGB(218,219,220));


        }
        else {

            metadb = Cover.OutputMetadb();
            if ( metadb ) info = fb.TitleFormat(Cover.DisplayMode == 2 ? "[%artist%]" : "[%artist%][ — %album%]").EvalWithMetadb( metadb );
            else          info = false;

            Cover.CoverX = null;
            Cover.CoverY = null;
            gr.GdiDrawText( 'No images', g_font2, RGB(0,0,0), 1, 1, ww, wh, DT_CENTER | DT_VCENTER | DT_CALCRECT);
            gr.GdiDrawText( 'No images', g_font2, RGB(140,164,179), 0, 0, ww, wh, DT_CENTER | DT_VCENTER | DT_CALCRECT);

            // ARTIST BAR
///            if ( info ) {
///                gr.FillSolidRect(0, 0, ww, 25, RGB(255,255,255));
///                gr.GdiDrawText( info, g_font2, RGB(0, 0, 0), 24, 0, ww - 50, 25, DT_LEFT | DT_VCENTER | DT_EDITCONTROL | DT_END_ELLIPSIS | DT_CALCRECT | DT_NOPREFIX);
///                gr.DrawLine( 0, 25, ww, 25, 1, RGB(218,219,220));
///                if ( picture && user_image ) gr.DrawImage( Cover.DisplayMode == 2 ? user_image : picture, 5, 4, user_image.Width, user_image.Height, 0, 0, user_image.Width, user_image.Height, angle = 0, alpha = 255);
///            }


        }

    //d = new Date();
    //t2 = d.getTime();
    //fb.trace( 'Repaint: ' + (t2 - t) + ' ms' );

}


function on_load_image_done(cookie, image) {

    Cover.CurrentCover = image == null ? false : image;
    window.Repaint();

}



function on_mouse_move(x, y) {

    if ( !g_hover ) {

        g_hover = 1;
            window.Repaint(); 

        if ( !Cover.CompareDirs() ) {

          Cover.Reset();
            Cover.Update();

        }

    }

   if ( Cover.MultipleCovers() && Cover.X1 ) {
        Cover.X2 = x;
    }

}


function on_mouse_leave() {

   g_hover    = 0;
    info_hover = 0;

    Cover.X1   = 0;
    Cover.X2   = 0;
    Cover.X    = 0;
    Cover.MouseGesture = 0;
    window.Repaint(); 
}

function on_mouse_wheel( step ) {

    (step < 0) ? Cover.NextCover() : Cover.PrevCover();

}


function on_mouse_lbtn_down(x, y, mask) {

    if ( mask == 1 ) {
        Cover.LbtnPressed = 1;
        Cover.X1 = x;
    }

}


function on_mouse_lbtn_up(x, y, mask) {

   if ( !mask && Cover.MultipleCovers() && Cover.X1 ) {

        Cover.X2 = x;

        if ( Cover.X1 < Cover.X2 && Math.abs( Cover.X1 - Cover.X2 ) > 8 ) Cover.GestureInverted == 1 ? Cover.NextCover() : Cover.PrevCover();
        else if ( Cover.X1 > Cover.X2 && Math.abs( Cover.X1 - Cover.X2 ) > 8 ) Cover.GestureInverted == 1 ? Cover.PrevCover() : Cover.NextCover();
        else if ( Cover.X1 > ww / 2 ) Cover.NextCover();
        else if ( Cover.X1 < ww / 2 ) Cover.PrevCover();

        Cover.LbtnPressed = 0;
        Cover.X1 = 0;
        Cover.X2 = 0;
        Cover.X = 0;
        Cover.MouseGesture = 0;

   }
   else if ( mask == MK_CONTROL ) {
      if ( typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) WshShell.run( '"' + Cover.MetaPath.replace(/\\([^\\]*)$/g, '') + '"' );
        else if ( Cover.Covers[ Cover.CurrentCoverNumber ] ) WshShell.run( '"' + Cover.Covers[ Cover.CurrentCoverNumber ] + '"' );
    }
    else if ( mask == MK_SHIFT ) {

        WshShell.run( '"' + Cover.MetaPath.replace(/\\([^\\]*)$/g, '') + '"' );

    }

}

function on_mouse_rbtn_up(x, y) {
   var _menu = window.CreatePopupMenu();
   var _firstgroup = window.CreatePopupMenu();
   var _secondgroup = window.CreatePopupMenu();
   var _thirdgroup = window.CreatePopupMenu();
   var _fourthgroup = window.CreatePopupMenu();
   var _fivthgroup = window.CreatePopupMenu();
   var _sixthgroup = window.CreatePopupMenu();
   var _seventhgroup = window.CreatePopupMenu();
   var _eighthgroup = window.CreatePopupMenu();
   var _ninthgroup = window.CreatePopupMenu();
    var _tenthgroup = window.CreatePopupMenu();
   var i = 1;
   var ret;

    artist = Cover.FormatMeta('artist', Cover.OutputMetadb() );

   _firstgroup.AppendMenuItem(MF_STRING, i++, "Playing item (no cycle)");
   _firstgroup.AppendMenuItem(MF_STRING, i++, "Playing item (cycle images)");
   _firstgroup.AppendMenuItem(MF_STRING, i++, "Current selection");

   _firstgroup.EnableMenuItem( Cover.CurrentMode, 1 );
   _firstgroup.CheckMenuRadioItem( 1, i-1, Cover.CurrentMode );

    _firstgroup.AppendMenuSeparator();

   _firstgroup.AppendMenuItem(MF_STRING, i++, "Artwork: front, back, disc, etc.");
   _firstgroup.AppendMenuItem(MF_STRING, i++, "Artist images");
    _firstgroup.EnableMenuItem( i-1 , !Cover.CachePath ? 1 : 0 );
   _firstgroup.EnableMenuItem( Cover.DisplayMode + 3, 1 );
   _firstgroup.CheckMenuRadioItem( i-2, i-1, Cover.DisplayMode + 3 );

   _secondgroup.AppendMenuItem(MF_STRING, i++, "Embedded covers");
   _secondgroup.AppendMenuItem(MF_STRING, i++, "External covers");

   _secondgroup.EnableMenuItem( Cover.Priority + 5, 1 );
   _secondgroup.CheckMenuRadioItem( i-2, i-1, Cover.Priority + 5 );

   _thirdgroup.AppendMenuItem(MF_STRING, i++, "Embedded covers");
   _thirdgroup.AppendMenuItem(MF_STRING, i++, "External covers");

   if ( Cover.Exclude ) {
//      _thirdgroup.EnableMenuItem( Cover.Exclude + 5, 1 );
      _thirdgroup.CheckMenuRadioItem( i-2, i-1, Cover.Exclude + 7 );
   }

   _fourthgroup.AppendMenuItem(MF_STRING, i++, "*keywords*.*");
   _fourthgroup.AppendMenuItem(MF_STRING, i++, " keywords.*");

    _fourthgroup.EnableMenuItem( Cover.MatchPattern + 9, 1 );
    _fourthgroup.CheckMenuRadioItem( i-2, i-1, Cover.MatchPattern + 9 );


   _fivthgroup.AppendMenuItem(MF_STRING, i++, "5 sec");
   _fivthgroup.AppendMenuItem(MF_STRING, i++, "15 sec");
   _fivthgroup.AppendMenuItem(MF_STRING, i++, "30 sec");
   _fivthgroup.AppendMenuItem(MF_STRING, i++, "1 min");
   _fivthgroup.AppendMenuItem(MF_STRING, i++, "2 mins");

   _fivthgroup.EnableMenuItem( Cover.Interval + 12, 1 );
   _fivthgroup.CheckMenuRadioItem( i-5, i-1, Cover.Interval + 12 );

   _sixthgroup.AppendMenuItem(MF_STRING, i++, "No aspect ratio");
   _sixthgroup.AppendMenuItem(MF_STRING, i++, "Correct aspect ratio");

   _sixthgroup.EnableMenuItem( Cover.Aspect + 17, 1 );
   _sixthgroup.CheckMenuRadioItem( i-2, i-1, Cover.Aspect + 17 );

   _seventhgroup.AppendMenuItem(MF_STRING, i++, "Inverted left/right gesture");
   _seventhgroup.CheckMenuItem( i-1, Cover.GestureInverted );

   _eighthgroup.AppendMenuItem(MF_STRING, i++, "Show covers from root folder");
   _eighthgroup.CheckMenuItem( i-1, Cover.RootCovers );
    _eighthgroup.AppendMenuItem(MF_STRING, i++, "Show covers from subfolders");
   _eighthgroup.CheckMenuItem( i-1, Cover.SubCovers );

   _ninthgroup.AppendMenuItem(MF_STRING, i++, "cover.*");
   _ninthgroup.AppendMenuItem(MF_STRING, i++, "folder.*");
   _ninthgroup.AppendMenuItem(MF_STRING, i++, "front.*");
   _ninthgroup.AppendMenuItem(MF_STRING, i++, "back.*");
   _ninthgroup.AppendMenuItem(MF_STRING, i++, "disc.*");
   _ninthgroup.AppendMenuItem(MF_STRING, i++, "%album%.*");

    _tenthgroup.AppendMenuItem(MF_STRING, i, "Current image");

    if ( Cover.Covers && typeof Cover.Covers[ Cover.CurrentCoverNumber ] != 'object' ) {
            fb.trace( Cover.Covers );
            var imagepath = Cover.Covers[ Cover.CurrentCoverNumber ];
            var dir       = imagepath.replace(/\\([^\\]*)$/g, '');
            var imagename = imagepath.replace(/\\([^\\]*)$/g, "$1");
            var ext       = imagename.replace(/(.*)\.([^\.]*)$/,'$2');

            if ( imagename == ('cover.'  + ext )  || FSO.FileExists( dir + '\\cover.'  + ext  ) ) _ninthgroup.EnableMenuItem(   22, 1 );
            if ( imagename == ('folder.' + ext )  || FSO.FileExists( dir + '\\folder.' + ext  ) ) _ninthgroup.EnableMenuItem(   23, 1 );
            if ( imagename == ('front.'  + ext )  || FSO.FileExists( dir + '\\front.'  + ext  ) ) _ninthgroup.EnableMenuItem(   24, 1 );
            if ( imagename == ('back.'   + ext )  || FSO.FileExists( dir + '\\back.'   + ext  ) ) _ninthgroup.EnableMenuItem(   25, 1 );
            if ( imagename == ('disc.'   + ext )  || FSO.FileExists( dir + '\\disc.'   + ext  ) ) _ninthgroup.EnableMenuItem(   26, 1 );

            var album = fb.Titleformat("$replace(%album%,/,-,\,-,:,-,*,-,?,-,\",-,<,-,>,-,|,-)").EvalWithMetadb( Cover.OutputMetadb() );
            if ( imagename == (album + '.' + ext ) || FSO.FileExists( dir + '\\' + album + '.' + ext  ) ) _ninthgroup.EnableMenuItem( 27, 1 );
    }
    else {
            _ninthgroup.EnableMenuItem( 22, 1 );
            _ninthgroup.EnableMenuItem( 23, 1 );
            _ninthgroup.EnableMenuItem( 24, 1 );
            _ninthgroup.EnableMenuItem( 25, 1 );
            _ninthgroup.EnableMenuItem( 26, 1 );
            _ninthgroup.EnableMenuItem( 27, 1 );
            _tenthgroup.EnableMenuItem( 28, 1 );
    }


   _firstgroup.AppendTo(   _menu, MF_STRING, "Focus settings");
   _secondgroup.AppendTo(  _menu, MF_STRING, "Priority settings");
   _thirdgroup.AppendTo(   _menu, MF_STRING, "Exclude from search");
   _fourthgroup.AppendTo(  _menu, MF_STRING, "Cover match settings");
   _fivthgroup.AppendTo(   _menu, MF_STRING, "Interval settings");
   _sixthgroup.AppendTo(   _menu, MF_STRING, "Aspect settings");
    _seventhgroup.AppendTo( _menu, MF_STRING, "Mouse settings");
    _eighthgroup.AppendTo(  _menu, MF_STRING, "Additional settings");

    _menu.AppendMenuSeparator(); 

   _ninthgroup.AppendTo( _menu, MF_STRING, "Rename current image to...");
   _tenthgroup.AppendTo( _menu, MF_STRING, "Delete...");

    _menu.AppendMenuSeparator();
   _menu.AppendMenuItem(MF_STRING, ++i, "Update covers");
    _menu.AppendMenuSeparator();
    _menu.AppendMenuItem(MF_STRING, ++i, "Open folder");
    _menu.AppendMenuItem(MF_STRING, ++i, "Open cover");

    // Open cover option handle
    if ( !Cover.Covers || typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) {
        _menu.EnableMenuItem( 31, 1 );
    }

    if ( !Cover.CachePath && !FSO.FolderExists( Cover.CachePath + '\\' + artist ) ) {
        _menu.EnableMenuItem( 29, 1 );
    }

    _menu.AppendMenuSeparator(); 
    _menu.AppendMenuItem(MF_STRING, ++i, "Settings");

   ret = _menu.TrackPopupMenu(x, y);
   if (ret >= 1 && ret <= 3) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'displayed_cover', Cover.CurrentMode = ret );
        Cover.StopTimer();
      Cover = new CoverShow();
        Cover.Update();
        Cover.StartTimer();
   }
   else if (ret >= 4 && ret <= 5) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'disp_mode',       Cover.DisplayMode = ret - 3);
        Cover.Reset();
        Cover.Update();
   }
   else if (ret >= 6 && ret <= 7) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'cover_priority',  Cover.Priority = ret - 5);
        Cover = new CoverShow();
        Cover.Update();
   }
   else if (ret >= 8 && ret <= 9) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'exclude_covers', ( ret - 7 == Cover.Exclude ) ? Cover.Exclude = 0 : Cover.Exclude = ret - 7 );
        Cover.Reset();
        Cover.Update();
   }
   else if (ret >= 10 && ret <= 11) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'match_pattern', Cover.MatchPattern = ret - 9 );
        Cover.Reset();
        Cover.Update();
   }
   else if (ret >= 12 && ret <= 16) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'interval', Cover.Interval = ret - 12);
      Cover.StopTimer();
        Cover.StartTimer();
   }
   else if (ret >= 17 && ret <= 18) {
      utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'covers_aspect', Cover.Aspect = ret - 17 );
        Cover.Reset();
        Cover.Update();
   }
   else if (ret == 19) {
        utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'gesture_inverted', Cover.GestureInverted = Cover.GestureInverted == 1 ? 0 : 1);
    }
   else if (ret == 20) {
        utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'root_covers', Cover.RootCovers = Cover.RootCovers == 1 ? 0 : 1);
        Cover.Reset();
        Cover.Update();
    }
   else if (ret == 21) {
        utils.WriteINI( fb.FoobarPath + 's7e.ini', 'artwork-settings', 'sub_covers', Cover.SubCovers = Cover.SubCovers == 1 ? 0 : 1);
        Cover.Reset();
        Cover.Update();
    }
   else if (ret == 22) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\cover.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
   else if (ret == 23) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\folder.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
   else if (ret == 24) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\front.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
    else if (ret == 25) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\back.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
    else if (ret == 26) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\disc.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
    else if (ret == 27) {
        try {
            FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\' + album  + '.' + ext );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
    else if (ret == 28 ) {
      try {
            FSO.DeleteFile( Cover.Covers[ Cover.CurrentCoverNumber ] );
          Cover.Reset();
            Cover.Update();
        } catch(e) { }
   }
   else if (ret == 29 ) {
      Cover.Reset();
        Cover.Update();
   }
   else if (ret == 30 ) {
      WshShell.run( '"' + Cover.MetaPath + '"' );
   }
   else if (ret == 31 ) {
      if ( Cover.Covers[ Cover.CurrentCoverNumber ] ) WshShell.run( '"' + Cover.Covers[ Cover.CurrentCoverNumber ] + '"' );
   }
    else if (ret == 32 ) {
        window.ShowConfigure();
    }
   return true;
}

function on_playback_dynamic_info_track() {

    Cover.Reset();
    Cover.Update();

}

function on_playback_starting() {
    // some
}

function on_playback_stop( Reason ) {
   Cover.StopTimer();
   if ( Reason == 0 ) on_item_focus_change();
}


function on_item_focus_change() {
   
    if ( !fb.IsPlaying || Cover.CurrentMode == 3) { Cover.Update(); }
}

function on_playlist_items_added(playlist) { Cover.Update(); }

function on_playlist_items_removed(playlist, new_count) { Cover.Update(); }

function on_playlist_switch() { Cover.Update(); }

function on_playback_new_track( metadb ){

    Cover.Update( metadb );
    Cover.StartTimer();

}

function on_mouse_mbtn_up(x,y) {

    artist = Cover.FormatMeta('artist', Cover.OutputMetadb() );
    if ( (Cover.CachePath && FSO.FolderExists( Cover.CachePath + '\\' + artist )) || Cover.DisplayMode == 2 ) {
        utils.WriteINI(fb.FoobarPath + 's7e.ini', 'artwork-settings', 'disp_mode', Cover.DisplayMode = Cover.DisplayMode == 1 ? 2 : 1);
        Cover.Reset();
        Cover.Update();
    }

}

function on_notify_data( name, info) {

    if ( info == 'refresh' && name == '314FBCC4-9383-48CD-B2DA-45593D3BE1FF' ) {
        Cover.Reset();
        Cover.Update();
    }
    else if ( info == true && name == '314FBCC4-9383-48CD-B2DA-45593D3BE1FF' ) {
        on_mouse_mbtn_up();
    }
    else if ( name == '314FBCC4-9383-48CD-B2DA-45593D3BE1FF' ) {
        Cover.CachePath = info;
        Cover.Reset();
        Cover.Update();
    }

}

function on_key_down(vkey) {

    if ( vkey == 0x00000021 || vkey == 0x00000026 ) {

        Cover.PrevCover();

    }
    else if ( vkey == 0x00000022 || vkey == 0x00000028 ) {

        Cover.NextCover();

    }
    else if ( vkey == 0x00000023  ) {

        if ( Cover.Covers != undefined ) {

            Cover.CurrentCoverNumber = Cover.Covers.length - 1;

            var tmp = Cover.Covers[ Cover.CurrentCoverNumber ];
            var img;

         try       { img = ( typeof tmp == 'object' ) ? tmp.Clone(0,0,tmp.Width,tmp.Height) : gdi.LoadImageAsync( window.ID, Cover.Covers[ Cover.CurrentCoverNumber ] ); }
            catch (e) { img = undefined; }

            Cover.ChangeImage( img );
            window.Repaint();

        }

    }
    else if ( vkey == 0x00000024  ) {

        if ( Cover.Covers != undefined ) {

            Cover.CurrentCoverNumber = 0;

            var tmp = Cover.Covers[ Cover.CurrentCoverNumber ];
            var img;

         try       { img = ( typeof tmp == 'object' ) ? tmp.Clone(0,0,tmp.Width,tmp.Height) : gdi.LoadImageAsync( window.ID, Cover.Covers[ Cover.CurrentCoverNumber ] ); }
            catch (e) { img = undefined; }

            Cover.ChangeImage( img );
            window.Repaint();

        }

    }

}



function on_timer(id) {
   //if ( Cover.CurrentMode == 2 && Cover.CycleTimer.ID == id ) Cover.NextCover();
}
AHAPXICT.
Гость

Сообщение #66 aspiens » 28.04.2015, 08:20

В продолжении темы картинок и предложенного скрипта

Изображение
вот такая беда. Правда эксперименты продолжаю уже не с вашей сборкой. Не смог победить рандомное воспроизведение и не смог привыкнуть к шрифтам.
aspiens
Новичок
Репутация: 0
С нами: 4 года 11 месяцев

Сообщение #67 Yarylka » 12.05.2015, 18:46

Шикарная сборка, были проблемы с тормозами плеера, но разобрался - отключил при загрузке компа kxmixer (использую драйвера к Creative SB Live 5.1 от kXProject). При установленной галочке Default было Random воспроизведение треклиста чего-то нащелкал, когда осваивал интерфейс - сейчас все нормально. Огромное человеческое спасибо за сборку!
Yarylka
Гость

Сообщение #68 vladj » 12.05.2015, 23:07

aspiens, попробуй поменять скрипт на этот...
Код: Выделить всё
//Maxim Terpilovsky's script Artwork (http://terpilovsky.ru))\\\
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_WORDBREAK = 0x00000010;
DT_CALCRECT = 0x00000400;
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r,g,b,a){ return ((a<<24)|(r<<16)|(g<<8)|(b)); }
var WshShell = new ActiveXObject("WScript.Shell");
var FSO = new ActiveXObject("Scripting.FileSystemObject");
var g_font = gdi.Font("Tahoma", 11);
function CoverShow( metadb ) {
   this.CachedPath = 0;
   // Search for files
   this.Search = function( array, dir) {
      var e = new Enumerator( dir.Files );
      while( !e.atEnd() ) {
         var name = e.item().Name;
         if( name.match(/\.(jpg|jpeg|png|gif|tif|bmp)$/i) ) {
            array.push( e.item().Path );
         }
         e.moveNext();
      }
   }
   
    // Find all covers in the folder
   this.GetExternalCovers = function( path ) {
      var files = [];
      var covers = [];
      try {
         var dir = FSO.GetFile( path ).ParentFolder;
         this.Search(files, dir);
         var e = new Enumerator( dir.SubFolders );
         for(; !e.atEnd(); e.moveNext() ) {
            this.Search(files, e.item() );
         }
      } catch(e) { fb.trace( 'this.GetExternalCovers / path: ' + e.message ); }
      if ( files.length > 0 ) {
         for ( key in files ) {
            var name = files[key];
            if ( name.match(/.*(cover|front|folder).*\.(jpg|jpeg|gif|png)$/i) ) {
               covers.push( name );
               files[key] = null;
            }
         }
         overall = covers;
         for ( key in files ) {
            if ( typeof( files[key] ) == 'string' ) overall.push( files[key] );
         }
         return overall;
      }
      else return new Array();
   }
   this.GetCovers = function( path ) {
               var embedded = this.GetEmbeddedCovers();
               var external = this.GetExternalCovers( path );
               var allcovers = new Array();
               if ( 2== 1 ) allcovers = allcovers.concat(embedded, external);
               else allcovers = allcovers.concat(external, embedded);
               this.Covers = allcovers;
      if ( this.Covers.length > 0 ) {
         try {
            if ( typeof this.Covers[0] == 'object' ) return this.Covers[0];
            else return gdi.Image( this.Covers[0] );
         }
         catch(e) { fb.trace( 'return this.Covers: ' + e.message ); return null; }
      }
      else {
         this.Covers = null;
         return null;
      }
   }
   this.GetEmbeddedCovers = function() {
      var embedded = [];
      for ( c = 0; c < 5; c++) {
         if ( c == 3 ) continue;
         if ( utils.GetAlbumArtEmbedded( this.Metadb.RawPath, c ) )
         embedded.push( utils.GetAlbumArtEmbedded( this.Metadb.RawPath, c ) );
      }
      return embedded;
   }
   this.FindEmbeddedCover = function() {
      return utils.GetAlbumArtEmbedded( this.Metadb.RawPath, art_id = 0);
   }
   this.DrawCover = function(gr) {
    gr.FillGradRect(0,0,window.Width/2,window.Height, -60,RGB(19,30,38),RGB(100,100,100));
    gr.FillGradRect(window.Width/2,0,window.Width/2,window.Height,60,RGB(100,100,100),RGB(19,30,38));
        if ( this.Covers != undefined && !this.CurrentCover ) {
            if ( typeof this.Covers[ this.CurrentCoverNumber ] == 'object' ) {
                this.CurrentCover = this.Covers[ this.CurrentCoverNumber ].Clone(0, 0, this.Covers[ this.CurrentCoverNumber ].Width, this.Covers[ this.CurrentCoverNumber ].Height);
            }
            else {
                this.CurrentCover = gdi.Image( this.Covers[ this.CurrentCoverNumber ] );
            }   
        }
      if ( !this.CurrentCover ) {
        var img = gdi.Image( fb.ProfilePath + "images\\nocover.png" );
        if ( img.Width > window.Width || img.Height > window.Height ) {
                    if ( img.Width / img.Height > window.Width / window.Height ) {
                        var iw = window.Width;
                        var ih = img.Height / ( img.Width / window.Width );
                        img = img.Resize( iw, ih);
                    }
                    else {
                        var ih = window.Height;
                        var iw = img.Width / ( img.Height / window.Height );
                        img = img.Resize( iw, ih);
                    }
                }
                }
      else {
            var img = this.CurrentCover;
                if ( img.Width > window.Width || img.Height > window.Height ) {
                    if ( img.Width / img.Height > window.Width / window.Height ) {
                        var iw = window.Width;
                        var ih = img.Height / ( img.Width / window.Width );
                        img = img.Resize( iw, ih);
                    }
                    else {
                        var ih = window.Height;
                        var iw = img.Width / ( img.Height / window.Height );
                        img = img.Resize( iw, ih);
                    }
                  }
                }
                var iw = ( img.Width > window.Width ) ? window.Width : img.Width;
                var ih = ( img.Height > window.Height ) ? window.Height : img.Height;
                img = img.Resize( iw, ih);
            gr.DrawImage( img,
                (iw < ih) ? ((iw < window.Width) ? ((window.Width - iw)/2) : 0 ) : ((iw >= window.Width) ? 0 : ((window.Width - iw)/2)),
                (iw > ih) ? ((ih < window.Height) ? ((window.Height - ih)/2) : 0 ) : ((ih >= window.Height) ? 0 : ((window.Height - ih)/2)),
                img.Width, img.Height, 0,0, img.Width, img.Height );
   }
     this.ChangeImage = function( val ) {
      this.CurrentCover = val;
   }
   this.NextCover = function() {
      if ( this.Covers != null && this.Covers.length > 1 ) {
         this.CurrentCoverNumber++;
         if ( this.CurrentCoverNumber == this.Covers.length ) {
            this.CurrentCoverNumber = 0;
         }
         try {
            if ( typeof this.Covers[ this.CurrentCoverNumber ] == 'object' ) var temp = this.Covers[ this.CurrentCoverNumber ];
            else var temp = gdi.Image( this.Covers[ this.CurrentCoverNumber ] );
            if ( temp ) {
               this.ChangeImage( temp );
               window.Repaint();
            }
            else this.NextCover();
         } catch (e) {
            this.NextCover();
         }
      }
   }
   this.PrevCover = function() {
      if ( this.Covers != null && this.Covers.length > 1 ) {
         this.CurrentCoverNumber--;
         if ( this.CurrentCoverNumber < 0 ) {
            this.CurrentCoverNumber = this.Covers.length;
         }
         try {
            if ( typeof this.Covers[ this.CurrentCoverNumber ] == 'object' ) var temp = this.Covers[ this.CurrentCoverNumber ];
            else var temp = gdi.Image( this.Covers[ this.CurrentCoverNumber ] );
            if ( temp ) {
               this.ChangeImage( temp );
               window.Repaint();
            }
            else this.PrevCover();
         } catch (e) {
            this.PrevCover();
         }
      }
   }
   this.StopTimer = function() {
      this.CycleTimer ? window.KillTimer( this.CycleTimer ) : '';
   }
   this.StartTimer = function() {
         this.CycleTimer = window.CreateTimerInterval( 7000 );
   }
      this.OutputMetadb = function() {
      return ( fb.IsPlaying ? fb.GetNowPlaying() : ( fb.GetFocusItem(true) ? fb.GetFocusItem(true) : false ));
   }
   this.Update = function( metadb ) {
      this.Metadb = metadb ? metadb : this.OutputMetadb();
      try { this.MetaPath = this.Metadb.Path ? this.Metadb.Path : 0; }
      catch (e) { fb.trace( 'this.Update / this.MetaPath = ' + e.message); this.MetaPath = 0; }
      if ( this.MetaPath ) {
           // fb.trace( 'UPDATED!' );
         this.CurrentCoverNumber = 0;
         this.CurrentCover = this.GetCovers( this.MetaPath );
         this.CachedPath = this.MetaPath;
      }
      else {
         this.Covers = null;
         this.CurrentCover = this.NoCover;
         this.CurrentCover = null;
        }
   }
   this.Update(metadb);
   this.CycleTimer = 0;
   this.TimerStarted = false;
}
var Cover = new CoverShow();
var a, b, g_hover = 0;
 function on_paint( gr ) {
    var text, measure;
    Cover.DrawCover( gr );
    if ( Cover.Covers != null && g_hover ) {
       if ( Cover.Covers.length > 0 ) {
         text = "wheel - on, double-click - view";
         measure = gr.MeasureString( text, g_font, 0, 0, window.Width, 0, 0);
         gr.FillSolidRect( 0, 0, window.Width, 2*measure.Height, RGBA(32,32,32,100));
         gr.GdiDrawText( text, g_font, RGB(255,255,255), 0, 0, window.Width, measure.Height, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);
         if ( typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) text = "Enclosing the track" + Cover.MetaPath.replace(/(.*)\\(.*)\.(.*)$/,'$2.$3') + '"' + " [" + (Cover.CurrentCoverNumber+1) + "/" + Cover.Covers.length + "]";
         else text = Cover.Covers[ Cover.CurrentCoverNumber ].replace(/(.*)\\(.*)\.(.*)$/,'$2.$3') + " [" + (Cover.CurrentCoverNumber+1) + "/" + Cover.Covers.length + "]";
      }
      measure = gr.MeasureString( text, g_font, 5, 0, window.Width-6, 0, 0);
      gr.FillSolidRect( 0, window.Height - measure.Height, window.Width, measure.Height, RGBA(32,32,32,100));
      gr.GdiDrawText( text, g_font, RGB(204,219,216), 0, window.Height - measure.Height, window.Width,  measure.Height, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);
   }
}
function on_playback_new_track( metadb ){
    Cover.Update( metadb );
    Cover.StartTimer();
    window.Repaint();
}
function on_mouse_move(x, y) {
   if ( !g_hover ) {
      g_hover = 1;
      window.Repaint();
   }
}
function on_mouse_leave() {
   g_hover = 0;
   window.Repaint();
}
function on_mouse_wheel( step ) {
    (step < 0) ? Cover.NextCover() : Cover.PrevCover();
}
function on_mouse_lbtn_dblclk(x, y) {
 if ( Cover.Covers != undefined )
 {
if( Cover.Covers[ Cover.CurrentCoverNumber ] ) WshShell.run( '"' + Cover.Covers[ Cover.CurrentCoverNumber ] + '"' );
   }
}
function on_playback_stop( Reason ) {
   Cover.StopTimer();
}
function on_playlist_switch() {
    var a = Cover.CachedPath ? Cover.CachedPath : ' ';
    var b = Cover.OutputMetadb() ? Cover.OutputMetadb().Path : ' ';
    if ( a.replace(/(.*)\\(.*)\.(.*)$/,'$1') != b.replace(/(.*)\\(.*)\.(.*)$/,'$1') ) {
      Cover.Update();
      window.Repaint();
   }
}
function on_timer(id) {
   if ( Cover.CycleTimer.ID == id ) {
      Cover.NextCover();
   }
}
Для нормальной работы этого скрипта в корне фубара нужна папка images и в ней любая картинка с названием nocover.png
HTPC Termaltake, eGlobal i5-7200, Asrock Beebox J3160, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 388
С нами: 10 лет 2 месяца

Сообщение #69 AHAPXICT » 13.05.2015, 01:53

vladj, я не отвечал aspiens потому что он указал что использует другую сборку, а в других сборках и проблемы другие, да и вопрос у него был скорее риторический))) В моей "поделке" установлен WSH v1.5.10 и изначально проверил на ней оригинальный скрипт от Maxim Terpilovsky, потом понял что его всё равно нужно чуть переделать и воспользовался уже готовым со сборки Сборка foobar2000 maybe от kgena_ua, который выложил для АНАРХИСТА отлично работает у меня ХР, а этот при переключении уходит в "крэш" (папку создал, Line: 178, Col: 10) Так что тут как говорится 50/50 :smile:
Yarylka, и вам спасибо. Я так понимаю многим пользователям не очень нравится не предсказуемое переключение треков в ELP Playlist при выбранном последовательном воспроизведении треков в случае если оставлен курсор мыши (функция Hover) на самом плей листе. Попытаюсь объяснить как избавится от этой "проблемы" за пару кликов мыши))))
1. Первый вариант уже описывал. Если переключается в зависимости от положения курсора на плейлисте то отключить функцию Menu/Playback/Playback follows cursor
2. Второй вариант. Если функция Playback follows cursor нужна, но раздражает случайное переключение треков в ELP Playlist при оставленном на нём курсоре: Клик ПКМ в окне ELP Playlist --> Setting... -->Вкладка Behaviour --> Mouse Hover Action --> Либо снять галочку, либо изменить функции Item: и Group: на (None) или Popup. Для Popup выбрать нужное время задержки.
Спойлер
ELP.jpg
P.S. На всякий случай, файлы конфигурации для ELP Playlist хранятся в папке B:\themes\DarkOne_v4.0\Others\Settings (где B:\ виртуальный диск)
Media Library it's bad - explorer it's good!
AHAPXICT M
Автор темы, Гуру
Аватара
Возраст: 49
Откуда: Киев
Репутация: 224
С нами: 6 лет 4 месяца

Сообщение #70 sot » 31.05.2015, 20:30

Как сделать чтобы в DarkOne отображались не только cover, back, cd, а также inlay, inside и буклеты?
Пробовал так:
Замените исходный скрипт на скрипт от Maxim Terpilovsky, этот скрипт показывает любые картинки, многие его используют в своих сборках.
При этом в консоли всплывает такая ошибка:
Спойлер
Error: WSH Panel Mod ({FF1A308A-F5B2-49E1-B98F-594F180E0BA6}): Ошибка выполнения Microsoft JScript:
Невозможно создание объекта сервером программирования объектов
File: <main>
Ln: 26, Col: 1
<source text only available at compile time>
Код в 26 строке такой:
Код: Выделить всё
var FSO = new ActiveXObject("Scripting.FileSystemObject");
Если его закомментировать то лезет еще одна аналогичная ошибка
Строчка кода в скрипте:
Код: Выделить всё
var WshShell = new ActiveXObject("WScript.Shell");

Мне непонятно почему не создаются объекты, указанные в этих строках кода.
sot
Новичок
Репутация: 1
С нами: 11 лет 2 месяца

Сообщение #71 AHAPXICT » 31.05.2015, 23:50

sot, честно говоря - без понятия чего не ему не хватает? Судя по заданному вопросу вы опытный пользователь и в системе есть всё что нужно. Может кто из гуру подскажет. В оригинальном скрипте от tedGo по клику средней кнопкой мыши или по ПКМ из меню доступен выбор альтернативных картинок(настройка в меню свойства), туда можно повесить inlay, inside (5 max). Но это не выход так как требуется точное указание пути и названий. У меня этот скрипт, как и сборка foobar2000 maybe и от Максима, работает без проблем, описывал это в предыдущем сообщении. Ждём пока кто что посоветует. :smoke:
Media Library it's bad - explorer it's good!
AHAPXICT M
Автор темы, Гуру
Аватара
Возраст: 49
Откуда: Киев
Репутация: 224
С нами: 6 лет 4 месяца

Сообщение #72 sot » 01.06.2015, 00:07

AHAPXICT
Спасибо, что интересуетесь этой проблемой.
У меня этот скрипт, как и сборка foobar2000 maybe и от Максима, работает без проблем
И у меня этот скрипт там работает. Но хотелось бы его в сборке DarkOne запустить.
Может кто из гуру подскажет.
Надеюсь на это, у самого не хватает знаний, но есть желание учиться)
sot
Новичок
Репутация: 1
С нами: 11 лет 2 месяца

Сообщение #73 AHAPXICT » 01.06.2015, 00:14

sot, слушай чего же ты сразу не сказал что у тебя сборка другая? Как только включил в WSH панели Safe mode сразу эта ошибка и вылезла! Там нужно снять галочку!
Media Library it's bad - explorer it's good!
AHAPXICT M
Автор темы, Гуру
Аватара
Возраст: 49
Откуда: Киев
Репутация: 224
С нами: 6 лет 4 месяца

Сообщение #74 sot » 01.06.2015, 00:31

AHAPXICT, можно подробнее, где именно снять галочку?
sot
Новичок
Репутация: 1
С нами: 11 лет 2 месяца

Сообщение #75 AHAPXICT » 01.06.2015, 00:40

sot, ага...незнаешь!!!))) Menu\File\Preferences\Tools\WSH Panel Mod --> Scripting Host Setting --> Safe Mode снять галочку.
Ну ладно шутки - шутками, когда уверен что в твоей сборке всё работает, то такие вопросы ставят в тупик
Media Library it's bad - explorer it's good!
AHAPXICT M
Автор темы, Гуру
Аватара
Возраст: 49
Откуда: Киев
Репутация: 224
С нами: 6 лет 4 месяца

Сообщение #76 sot » 01.06.2015, 00:46

AHAPXICT, спасибо! Как до того, что галочка мешает дошел?
sot
Новичок
Репутация: 1
С нами: 11 лет 2 месяца

Сообщение #77 AHAPXICT » 01.06.2015, 00:50

sot, был уверен что сборка моя, а у меня галочка снята, поэтому как раз и сразу не дошёл))). Да и об этом на форуме уже сто раз говорили. Большинство скриптов работают только с отключенной Safe Mode
Media Library it's bad - explorer it's good!
AHAPXICT M
Автор темы, Гуру
Аватара
Возраст: 49
Откуда: Киев
Репутация: 224
С нами: 6 лет 4 месяца

Сообщение #78 sot » 01.06.2015, 00:53

AHAPXICT тоди з мене пыво)

Добавлено спустя 5 часов 50 минут:
AHAPXICT, вылезла одна проблемка, если проигрывается файл с расширением *.dff(оцифрованый винил) то картинка вообще никакие не показывает. Если подкинуть в такую папку, например файлик с расширением *.flac, то при его проигрывании картинки отображаются.
А вот версия скрипта приведенного выше(после твоего скрипта) от vladj работает как с *.dff так и с *.flac файлами.
Мне больше нравится первый скрипт, там больше функций прицеплено, но беда в том, что то что надо не хочет работать)
sot
Новичок
Репутация: 1
С нами: 11 лет 2 месяца

Сообщение #79 sot » 02.06.2015, 05:39

2 AHAPXICT Нашел более старую версию скрипта от Максима, в нем проблемы
если проигрывается файл с расширением *.dff(оцифрованый винил) то картинки вообще никакие не показывает
нет. Поковырявшись в 2-х скриптах удалось исправить тот скрипт, который ты выкладывал выше. Заменил 2 функции из старого в новый.
Спойлер
Код: Выделить всё
// Maxim Terpilovsky's script
// http://terpilovsky.ru
// Artwork / Updated 26-04-2011

DT_EDITCONTROL = 0x00002000;
DT_TOP = 0x00000000;
DT_LEFT = 0x00000000;
DT_CENTER = 0x00000001;
DT_RIGHT = 0x00000002;
DT_VCENTER = 0x00000004;
DT_BOTTOM = 0x00000008;
DT_WORDBREAK = 0x00000010;
MF_STRING = 0x00000000;
MK_CONTROL = 0x0008;
DT_CALCRECT = 0x00000400;
MF_POPUP = 0x00000010;
MF_SEPARATOR = 0x00000800;

function StrFmt(alignH,alignV,trim,flag){ return ((alignH<<28)|(alignV<<24)|(trim<<20)|flag); }
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r,g,b,a){ return ((a<<24)|(r<<16)|(g<<8)|(b)); }

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

if ( utils.CheckFont( "Segoe UI" ) ) {
var g_font = gdi.Font("Segoe UI", 28);
var g_font2 = gdi.Font("Segoe UI", 11, 1);
var g_font_small = gdi.Font("Segoe UI", 10, 1);
} else {
var g_font = gdi.Font("Tahoma", 12);
var g_font2 = gdi.Font("Tahoma", 11, 1);
var g_font_small = gdi.Font("Tahoma", 10, 1);
}

var tooltip = window.CreateTooltip();
tooltip.SetMaxWidth( 300 );

var arrow_left, arrow_right, info_hover = 0;
try {
var arrow_left = gdi.Image( fb.FoobarPath + "\\themes\\DarkOne\\images\\arrow_left.png" );
var arrow_right = gdi.Image( fb.FoobarPath + "\\themes\\DarkOne\\images\\arrow_right.png" );
var information = gdi.Image( fb.FoobarPath + "\\themes\\DarkOne\\images\\information.png" );
} catch(e) { fb.trace(e.message); }

function CoverShow( metadb ) {

this.CachedPath = 0;
this.CachedCoversNumber = 0;

this.SetMode = function() {

var mode = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'settings', 'displayed_cover') );
if ( !mode ) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'displayed_cover', 1);
var mode = 1;
}
return mode;

}

this.CurrentMode = this.SetMode();

this.SetPriority = function() {

var priority = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'settings', 'cover_priority') );
if ( !priority ) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'cover_priority', 2);
var priority = 2;
}
return priority;

}

this.Priority = this.SetPriority();

this.SetExclude = function() {

var exclude = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'settings', 'exclude_covers') );
if ( isNaN(exclude) ) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'exclude_covers', 0);
var exclude = 0;
}
return exclude;

}
this.Exclude = this.SetExclude();

this.SetPattern = function() {

var pattern = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'settings', 'match_pattern') );
if ( isNaN(pattern) ) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'match_pattern', 1);
var pattern = 1;
}
return pattern;

}
this.MatchPattern = this.SetPattern();

this.SetAspect = function() {

var aspect = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'settings', 'covers_aspect') );
if ( isNaN(aspect) ) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'covers_aspect', 1);
var aspect = 1;
}
return aspect;

}
this.Aspect = this.SetAspect();

this.SetGesture = function() {

var gesture = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'settings', 'gesture_inverted') );
if ( isNaN(gesture) ) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'gesture_inverted', 0);
var gesture = 0;
}
return gesture;

}
this.GestureInverted = this.SetGesture();

this.SetInterval = function() {

var interval = parseInt( utils.ReadINI(fb.FoobarPath + 's7e.ini', 'settings', 'interval') );
if ( isNaN(interval) ) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'interval', 1);
var interval = 1;
}
return interval;

}
this.Interval = this.SetInterval();
this.Intervals = new Array(5000, 15000, 30000, 60000, 120000);

try {

this.NoCover = gdi.Image( fb.ProfilePath + "s7e_files\\images\\nocover.png" );
this.Case = gdi.Image( fb.ProfilePath + "s7e_files\\images\\case.png" );

}
catch(e) { fb.trace( 'this.NoCover / this.Case:' + e.message ); }

this.OutputMetadb = function() {

switch ( this.CurrentMode ) {

case 3 :
return ( fb.GetFocusItem(true) ? fb.GetFocusItem(true) : false );
break;

default:
return ( fb.IsPlaying ? fb.GetNowPlaying() : ( fb.GetFocusItem(true) ? fb.GetFocusItem(true) : false ));

}

}

this.Search = function( array, dir) {

var e = new Enumerator( dir.Files );

while( !e.atEnd() ) {
var name = e.item().Name;
if( name.match(/\.(jpg|jpeg|png|gif|bmp)$/i) ) {
array.push( e.item().Path );
}
e.moveNext();
}

}

this.GetExternalCovers = function( path ) {

var files = [];
var covers = [];
// try - пробуйте
try {
//ParentFolder - Родительская папка
var dir = FSO.GetFile( path ).ParentFolder;
this.Search(files, dir);
var e = new Enumerator( dir.SubFolders );
// SubFolders  - вложенные
for(; !e.atEnd(); e.moveNext() ) {
this.Search(files, e.item() );
}
} catch(e) { fb.trace( 'this.GetExternalCovers / path: ' + e.message ); }

if ( files.length > 0 ) {

files.sort();
// push - нажим (на кнопку ?)
for ( key in files ) {
var name = files[key];
// MatchPattern - совпадает шаблон
if ( this.MatchPattern == 1 ) {
if ( name.match(/.*(cover|front|folder)([^\\]*)\.(jpg|jpeg|gif|png|bmp)$/i) ) {
covers.push( name );
files[key] = null;
}
}
else {
if ( name.match(/\\(cover|front|folder)\.(jpg|jpeg|gif|png|bmp)$/i) ) {
covers.push( name );
files[key] = null;
}
}

}
// overall - полный, всеобщий
overall = covers;

for ( key in files ) {
if ( typeof( files[key] ) == 'string' ) overall.push( files[key] );
}

return overall;

}
else return new Array();

}

this.GetCovers = function( path ) {

switch ( this.Exclude ) {

case 0:

var embedded = this.GetEmbeddedCovers();
var external = this.GetExternalCovers( path );

var allcovers = new Array();

if ( this.Priority == 1 ) allcovers = allcovers.concat(embedded, external);
else allcovers = allcovers.concat(external, embedded);

this.Covers = allcovers;

break;

case 1:

var external = this.GetExternalCovers( path );
this.Covers = external;

break;

case 2:

var embedded = this.GetEmbeddedCovers();
this.Covers = embedded;

break;

default:

}

if ( this.Covers.length > 0 ) {

try {
if ( typeof this.Covers[0] == 'object' ) return this.Covers[0].Clone(0, 0, this.Covers[0].Width, this.Covers[0].Height);
else return gdi.Image( this.Covers[0] );
}
catch(e) { fb.trace( 'return this.Covers: ' + e.message ); return undefined; }

}
else {

this.Covers = undefined;
return 0;

}

}

this.GetEmbeddedCovers = function() {
var embedded = [];
for ( c = 0; c < 5; c++) {
if ( c == 3 ) continue;
if ( utils.GetAlbumArtEmbedded( this.Metadb.RawPath, c ) )
embedded.push( utils.GetAlbumArtEmbedded( this.Metadb.RawPath, c ) );
}
return embedded;
}

this.FindEmbeddedCover = function() {
return utils.GetAlbumArtEmbedded( this.Metadb.RawPath, art_id = 0);
}

this.DrawCover = function(gr) {

}

this.ChangeImage = function( val ) {
this.CurrentCover = val;
}

this.NextCover = function() {

if ( this.Covers != undefined && this.Covers.length > 1 ) {

this.CurrentCoverNumber++;

if ( this.CurrentCoverNumber == this.Covers.length ) {
this.CurrentCoverNumber = 0;
}

try {

if ( typeof this.Covers[ this.CurrentCoverNumber ] == 'object' ) var temp = this.Covers[ this.CurrentCoverNumber ].Clone(0, 0, this.Covers[ this.CurrentCoverNumber ].Width, this.Covers[ this.CurrentCoverNumber ].Height);
else var temp = gdi.Image( this.Covers[ this.CurrentCoverNumber ] );

if ( temp ) {
this.ChangeImage( temp );
window.Repaint();
}
else {
this.NextCover();
}

} catch (e) {

this.NextCover();

}

}
else if ( this.Covers == undefined ) { this.Update(metadb); window.Repaint(); }

}

this.MultipleCovers = function() {

if ( this.Covers != undefined && this.Covers.length > 1 ) return true;
else return false;

}

this.PrevCover = function() {

if ( this.Covers != undefined && this.Covers.length > 1 ) {

this.CurrentCoverNumber--;

if ( this.CurrentCoverNumber < 0 ) {
this.CurrentCoverNumber = this.Covers.length;
}

try {

if ( typeof this.Covers[ this.CurrentCoverNumber ] == 'object' ) var temp = this.Covers[ this.CurrentCoverNumber ].Clone(0, 0, this.Covers[ this.CurrentCoverNumber ].Width, this.Covers[ this.CurrentCoverNumber ].Height);
else var temp = gdi.Image( this.Covers[ this.CurrentCoverNumber ] );

if ( temp ) {
this.ChangeImage( temp );
window.Repaint();
}
else {
this.PrevCover();
}

} catch (e) {

this.PrevCover();

}

}
else if ( this.Covers == undefined ) { this.Update(metadb); window.Repaint(); }

}

this.StopTimer = function() {
this.CycleTimer ? window.KillTimer( this.CycleTimer ) : '';
}

this.StartTimer = function() {

if ( this.CurrentMode == 2 ) {
this.CycleTimer = window.CreateTimerInterval( this.Intervals[ this.Interval ] );
}

}

this.Update = function( metadb) {

this.Metadb = metadb ? metadb : this.OutputMetadb();

try { this.MetaPath = this.Metadb.Path ? this.Metadb.Path : 0; }
catch (e) { fb.trace( 'this.Update / this.MetaPath = ' + e.message); this.MetaPath = 0; }

if ( this.MetaPath ) {

var a = this.CachedPath ? this.CachedPath : ' ';
var b = this.MetaPath;

if ( a.replace(/(.*)\\(.*)\.(.*)$/,'$1') != b.replace(/(.*)\\(.*)\.(.*)$/,'$1') ) {

var update = 1;

}
else {

}

if ( update == 1 ) {

this.Covers = undefined;
this.CurrentCoverNumber = 0;
this.CurrentCover = this.GetCovers( this.MetaPath );
this.CachedPath = this.MetaPath;
this.CachedCoversNumber = this.Covers != undefined ? this.Covers.length : 0;
window.Repaint();
fb.trace('s7e-artwork-panel: covers updated, files reread.');

}

}
else {

fb.trace( 's7e-artwork-panel: can\'t update.' );
this.Covers = undefined;
this.CoverX = null;
this.CoverY = null;
this.CurrentCoverNumber = 0;
this.CurrentCover = 0;
this.CachedPath = '';
this.CachedCoversNumber = 0;
window.Repaint();

}

}

this.Update( metadb);
this.CachedCoversNumber = this.Covers != undefined ? this.Covers.length : 0;
this.CycleTimer = 0;
this.TimerStarted = false;
this.LbtnPressed = 0;
this.X1 = 0;
this.X2 = 0;
this.X = 0;
this.MouseGesture = 0;

this.CoverX = null;
this.CoverY = null;

}

var Cover = new CoverShow();
var a, b, g_hover = 0;

function on_paint( gr ) {

var text, measure;

gr.SetSmoothingMode( 4 );
gr.SetInterpolationMode( 7 );

if ( Cover.Covers != undefined ) {

if ( !Cover.CurrentCover ) {

if ( typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) {
Cover.CurrentCover = Cover.Covers[ Cover.CurrentCoverNumber ].Clone(0, 0, Cover.Covers[ Cover.CurrentCoverNumber ].Width, Cover.Covers[ Cover.CurrentCoverNumber ].Height);
}
else {
Cover.CurrentCover = gdi.Image( Cover.Covers[ Cover.CurrentCoverNumber ] );
}

}

if ( !Cover.CurrentCover ) {
Cover.CoverX = null;
Cover.CoverY = null;
gr.FillSolidRect(0, 0, window.Width, window.Height, RGB(33,33,33));
gr.GdiDrawText( 'Inet Radio', g_font, RGB(128,128,128), 0, 0, window.Width, window.Height, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);
}
else {

gr.FillSolidRect(0, 0, window.Width, window.Height, RGB(33,33,33));

var img = Cover.CurrentCover;

if ( Cover.Aspect ) {

if ( img.Width > window.Width || img.Height > window.Height ) {

if ( img.Width / img.Height > window.Width / window.Height ) {

var iw = window.Width;
var ih = img.Height / ( img.Width / window.Width );
img = img.Resize( iw, ih);

}
else {

var ih = window.Height;
var iw = img.Width / ( img.Height / window.Height );
img = img.Resize( iw, ih);
}

}
else {
var iw = img.Width;
var ih = img.Height;
}

}
else {

var iw = ( img.Width > window.Width ) ? window.Width : img.Width;
var ih = ( img.Height > window.Height ) ? window.Height : img.Height;
img = img.Resize( iw, ih);

}

img = img.CreateRawBitmap();

var x = (iw < ih) ? ((iw < window.Width) ? ((window.Width - iw)/2) : 0 ) : ((iw >= window.Width) ? 0 : ((window.Width - iw)/2));
var y = (iw > ih) ? ((ih < window.Height) ? ((window.Height - ih)/2) : 0 ) : ((ih >= window.Height) ? 0 : ((window.Height - ih)/2));

Cover.CoverX = x;
Cover.CoverY = y;

gr.GdiDrawBitmap( img,
x,
y,
img.Width,
img.Height,
0,0, img.Width, img.Height );

if ( g_hover ) {

if ( information ) gr.DrawImage( information, x, y, 16, 16, 0, 0, 16, 16, 0, 150);

if ( info_hover ) {

var text = '1. Следующее изображение (Левая кн. или колесико мыши)\n\n2. Следующее изображение (Левая кн + жест мыши)\n\n3. Просмотр внешней программой(Ctrl + Левая кн. мыши)';
measure = gr.MeasureString( text, g_font_small, 0, 0, window.Width / 2, 0, DT_LEFT | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);
gr.FillSolidRect( (window.Width - measure.Width - 10) / 2, ( window.Height - measure.Height - 10 ) / 2, measure.Width + 10, measure.Height + 10, RGBA(0,0,0,150));
gr.GdiDrawText( text, g_font_small, RGB(255,255,255), (window.Width - measure.Width) / 2, ( window.Height - measure.Height ) / 2, measure.Width, measure.Height, DT_LEFT | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);

}

measure = gr.MeasureString( Cover.CurrentCover.Width + " ? " + Cover.CurrentCover.Height, g_font_small, 5, 0, window.Width-10, 0, 0);
gr.FillSolidRect( x + img.Width - measure.Width - 10, y + img.Height - measure.Height - 5, measure.Width + 10, measure.Height + 5, RGBA(32,32,32,150));
gr.GdiDrawText( Cover.CurrentCover.Width + " ? " + Cover.CurrentCover.Height, g_font_small, RGB(255,255,255), x + img.Width - measure.Width - 10, y + img.Height - measure.Height - 5, measure.Width + 10, measure.Height + 5, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);

measure = gr.MeasureString( (Cover.CurrentCoverNumber+1) + "/" + Cover.Covers.length, g_font_small, 5, 0, window.Width-10, 0, 0);
gr.FillSolidRect( x + img.Width - measure.Width - 10, y , measure.Width + 10, measure.Height, RGBA(32,32,32,150));
gr.GdiDrawText( (Cover.CurrentCoverNumber+1) + "/" + Cover.Covers.length, g_font_small, RGB(255,255,255), x + img.Width - measure.Width - 10, y , measure.Width + 10, measure.Height, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);

if ( Cover.MouseGesture ) {

if ( Cover.MouseGesture == 'next' && arrow_right ) {
gr.FillEllipse( window.Width - 18, ( window.Height - arrow_right.Height ) / 2 - 1, 18, 18, RGBA(255,255,255,255));
gr.DrawImage( arrow_right, window.Width - 16, ( window.Height - arrow_right.Height ) / 2, 16, 16, 0, 0, 16, 16, 0, 255);
}
else if ( Cover.MouseGesture == 'prev' && arrow_left ) {
gr.FillEllipse( 0, ( window.Height - arrow_left.Height ) / 2 - 1, 18, 18, RGBA(255,255,255,255));
gr.DrawImage( arrow_left, 0, ( window.Height - arrow_left.Height ) / 2, 16, 16, 0, 0, 16, 16, 0, 255);
}

}

}

var graphics = Cover.CurrentCover.GetGraphics();
Cover.CurrentCover.ReleaseGraphics( graphics );
Cover.CurrentCover.Dispose();
Cover.CurrentCover = 0;

}

}
else {

Cover.CoverX = null;
Cover.CoverY = null;
gr.FillSolidRect(0, 0, window.Width, window.Height, RGB(33,33,33));
gr.GdiDrawText( 'Inet Radio', g_font, RGB(128,128,128), 0, 0, window.Width, window.Height, DT_CENTER | DT_VCENTER | DT_WORDBREAK | DT_CALCRECT);

}

}

function on_mouse_move(x, y) {

if ( Cover.Covers != undefined && !Cover.X1 ) {

var rep = 0;

if ( Cover.Covers.length > 0 && !g_hover && Cover.Covers[ Cover.CurrentCoverNumber ] ) {

g_hover = 1;

if ( typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) var text = 'Embedded into "' + Cover.MetaPath.replace(/(.*)\\(.*)\.(.*)$/,'$2.$3') + '"';
else {
try { var a = '\nSize: ' + Math.round( FSO.GetFile( Cover.Covers[ Cover.CurrentCoverNumber ] ).size / 1024 ) + " Kb"; }
catch(e) { var a = ''; }
var b = 'Path: ' + Cover.Covers[ Cover.CurrentCoverNumber ];
var text = b + a;
}

tooltip.Text = text;
tooltip.Activate();
var rep = 1;
}

if ( info_hover == 0 && (x >= Cover.CoverX && x <= Cover.CoverX + 16) && (y >= Cover.CoverY && y <= Cover.CoverY + 16) ) {

info_hover = 1;
var rep = 1;

}
else if ( info_hover == 1 && ((x < Cover.CoverX || x > Cover.CoverX + 16) || (y < Cover.CoverY || y > Cover.CoverY + 16)) ) {

info_hover = 0;
var rep = 1;

}

if ( rep == 1 ) window.Repaint();

}
else if ( Cover.MultipleCovers() && Cover.X1 ) {

info_hover = 0;
Cover.X2 = x;

if ( Cover.X1 < Cover.X2 && Math.abs( Cover.X1 - Cover.X2 ) > 8 ) Cover.GestureInverted == 1 ? Cover.MouseGesture = 'next' : Cover.MouseGesture = 'prev';
else if ( Cover.X1 > Cover.X2 && Math.abs( Cover.X1 - Cover.X2 ) > 8 ) Cover.GestureInverted == 1 ? Cover.MouseGesture = 'prev' : Cover.MouseGesture = 'next';

if ( Cover.MouseGesture == 'prev' ^ Cover.MouseGesture == 'next' ) {
window.Repaint();
}

}

}

function on_mouse_leave() {

g_hover = 0;
info_hover = 0;

Cover.X1 = 0;
Cover.X2 = 0;
Cover.X = 0;
Cover.MouseGesture = 0;

tooltip.Deactivate();
window.Repaint();

}

function on_mouse_wheel( step ) {
(step < 0) ? Cover.NextCover() : Cover.PrevCover();
}

function on_mouse_lbtn_down(x, y, mask) {

Cover.LbtnPressed = 1;
Cover.X1 = x;

}

function on_mouse_lbtn_up(x, y, mask) {

if ( !mask && Cover.MultipleCovers() && Cover.X1 ) {

Cover.X2 = x;

if ( Cover.X1 < Cover.X2 && Math.abs( Cover.X1 - Cover.X2 ) > 8 ) Cover.GestureInverted == 1 ? Cover.NextCover() : Cover.PrevCover();
else if ( Cover.X1 > Cover.X2 && Math.abs( Cover.X1 - Cover.X2 ) > 8 ) Cover.GestureInverted == 1 ? Cover.PrevCover() : Cover.NextCover();
else Cover.NextCover();

Cover.LbtnPressed = 0;
Cover.X1 = 0;
Cover.X2 = 0;
Cover.X = 0;
Cover.MouseGesture = 0;

}
else if ( mask == MK_CONTROL ) {

if ( typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) WshShell.run( '"' + Cover.MetaPath.replace(/\\\w*\..*/, '') + '"' );
else if ( Cover.Covers[ Cover.CurrentCoverNumber ] ) WshShell.run( '"' + Cover.Covers[ Cover.CurrentCoverNumber ] + '"' );
}

}

function on_mouse_rbtn_up(x, y) {
var _menu = window.CreatePopupMenu();
var _firstgroup = window.CreatePopupMenu();
var _secondgroup = window.CreatePopupMenu();
var _thirdgroup = window.CreatePopupMenu();
var _fourthgroup = window.CreatePopupMenu();
var _fivthgroup = window.CreatePopupMenu();
var _sixthgroup = window.CreatePopupMenu();
var _seventhgroup = window.CreatePopupMenu();
var _eighthgroup = window.CreatePopupMenu();
var _ninthgroup = window.CreatePopupMenu();
var i = 1;
var ret;

_firstgroup.AppendMenuItem(MF_STRING, i++, "Переключение вручную");
_firstgroup.AppendMenuItem(MF_STRING, i++, "Переключение автоматическое");
_firstgroup.AppendMenuItem(MF_STRING, i++, "Текущий выбор");

_firstgroup.EnableMenuItem( Cover.CurrentMode, 1 );
_firstgroup.CheckMenuRadioItem( 1, i-1, Cover.CurrentMode );

_secondgroup.AppendMenuItem(MF_STRING, i++, "Вложеные обложки");
_secondgroup.AppendMenuItem(MF_STRING, i++, "Внешние обложки");

_secondgroup.EnableMenuItem( Cover.Priority + 3, 1 );
_secondgroup.CheckMenuRadioItem( i-2, i-1, Cover.Priority + 3 );

_thirdgroup.AppendMenuItem(MF_STRING, i++, "Вложеные обложки");
_thirdgroup.AppendMenuItem(MF_STRING, i++, "Внешние обложки");

if ( Cover.Exclude ) {
_thirdgroup.CheckMenuRadioItem( i-2, i-1, Cover.Exclude + 5 );
}

_fourthgroup.AppendMenuItem(MF_STRING, i++, "*ключевое слово*.*");
_fourthgroup.AppendMenuItem(MF_STRING, i++, " ключевое слово.*");

_fourthgroup.EnableMenuItem( Cover.MatchPattern + 7, 1 );
_fourthgroup.CheckMenuRadioItem( i-2, i-1, Cover.MatchPattern + 7 );

_fivthgroup.AppendMenuItem(MF_STRING, i++, "5 секунд");
_fivthgroup.AppendMenuItem(MF_STRING, i++, "15 секунд");
_fivthgroup.AppendMenuItem(MF_STRING, i++, "30 секунд");
_fivthgroup.AppendMenuItem(MF_STRING, i++, "1 минута");
_fivthgroup.AppendMenuItem(MF_STRING, i++, "2 минуты");

_fivthgroup.EnableMenuItem( Cover.Interval + 10, 1 );
_fivthgroup.CheckMenuRadioItem( i-5, i-1, Cover.Interval + 10 );

_sixthgroup.AppendMenuItem(MF_STRING, i++, "По размеру окна");
_sixthgroup.AppendMenuItem(MF_STRING, i++, "Исходное соотношение сторон");

_sixthgroup.EnableMenuItem( Cover.Aspect + 15, 1 );
_sixthgroup.CheckMenuRadioItem( i-2, i-1, Cover.Aspect + 15 );

_seventhgroup.AppendMenuItem(MF_STRING, i++, "Инвертировать лев./прав. жест");
_seventhgroup.CheckMenuItem( i-1, Cover.GestureInverted );

_eighthgroup.AppendMenuItem(MF_STRING, i++, "cover.*");
_eighthgroup.AppendMenuItem(MF_STRING, i++, "folder.*");
_eighthgroup.AppendMenuItem(MF_STRING, i++, "front.*");
_eighthgroup.AppendMenuItem(MF_STRING, i++, "back.*");
_eighthgroup.AppendMenuItem(MF_STRING, i++, "disc.*");
_eighthgroup.AppendMenuItem(MF_STRING, i++, "%album%.*");

_ninthgroup.AppendMenuItem(MF_STRING, i, "Текущее изображение");

if ( Cover.Covers && typeof Cover.Covers[ Cover.CurrentCoverNumber ] != 'object' ) {
var imagepath = Cover.Covers[ Cover.CurrentCoverNumber ];
var dir = imagepath.replace(/(.*)\\(.*)\.(.*)$/,'$1');
var imagename = imagepath.replace(/(.*)\\(.*)\.(.*)$/,'$2.$3');
var ext = imagename.replace(/(.*)\.(.*)$/,'$2');

if ( imagename == ('cover.' + ext ) || FSO.FileExists( dir + '\\cover.' + ext ) ) _eighthgroup.EnableMenuItem( 18, 1 );
if ( imagename == ('folder.' + ext ) || FSO.FileExists( dir + '\\folder.' + ext ) ) _eighthgroup.EnableMenuItem( 19, 1 );
if ( imagename == ('front.' + ext ) || FSO.FileExists( dir + '\\front.' + ext ) ) _eighthgroup.EnableMenuItem( 20, 1 );
if ( imagename == ('back.' + ext ) || FSO.FileExists( dir + '\\back.' + ext ) ) _eighthgroup.EnableMenuItem( 21, 1 );
if ( imagename == ('disc.' + ext ) || FSO.FileExists( dir + '\\disc.' + ext ) ) _eighthgroup.EnableMenuItem( 22, 1 );

var album = fb.Titleformat("$replace(%album%,/,-,\,-,:,-,*,-,?,-,\",-,<,-,>,-,|,-)").EvalWithMetadb( Cover.OutputMetadb() );
if ( imagename == (album + '.' + ext ) || FSO.FileExists( dir + '\\' + album + '.' + ext ) ) _eighthgroup.EnableMenuItem( 23, 1 );
}
else {
_eighthgroup.EnableMenuItem( 18, 1 );
_eighthgroup.EnableMenuItem( 19, 1 );
_eighthgroup.EnableMenuItem( 20, 1 );
_eighthgroup.EnableMenuItem( 21, 1 );
_eighthgroup.EnableMenuItem( 22, 1 );
_eighthgroup.EnableMenuItem( 23, 1 );
_ninthgroup.EnableMenuItem( 24, 1 );
}

_menu.AppendMenuItem(MF_STRING | MF_POPUP, _firstgroup.ID, "Режимы просмотра");
_menu.AppendMenuItem(MF_STRING | MF_POPUP, _secondgroup.ID, "Приоритет просмотра");
_menu.AppendMenuItem(MF_STRING | MF_POPUP, _thirdgroup.ID, "Исключить из просмотра");
_menu.AppendMenuItem(MF_STRING | MF_POPUP, _fourthgroup.ID, "Настройки соответствия");
_menu.AppendMenuItem(MF_STRING | MF_POPUP, _fivthgroup.ID, "Интервалы переключения");
_menu.AppendMenuItem(MF_STRING | MF_POPUP, _sixthgroup.ID, "Размер изображения");
_menu.AppendMenuItem(MF_STRING | MF_POPUP, _seventhgroup.ID, "Жесты мыши");
_menu.AppendMenuSeparator();
_menu.AppendMenuItem(MF_STRING | MF_POPUP, _eighthgroup.ID, "Переименовать изображение в...");
_menu.AppendMenuItem(MF_STRING | MF_POPUP, _ninthgroup.ID, "Удалить...");
_menu.AppendMenuSeparator();
_menu.AppendMenuItem(MF_STRING, ++i, "Остановить просмотр");
_menu.AppendMenuItem(MF_STRING, ++i, "Просмотр внешней программой");

if ( !Cover.Covers || typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) {
_menu.EnableMenuItem( 26, 1 );
}

ret = _menu.TrackPopupMenu(x, y);
if (ret >= 1 && ret <= 3) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'displayed_cover', ret);
Cover = new CoverShow();
window.Repaint();
}
else if (ret >= 4 && ret <= 5) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'cover_priority', ret - 3);
Cover = new CoverShow();
window.Repaint();
}
else if (ret >= 6 && ret <= 7) {
if ( ( ret - 5 ) == Cover.Exclude ) utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'exclude_covers', 0);
else utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'exclude_covers', ret - 5);
Cover = new CoverShow();
window.Repaint();
}
else if (ret >= 8 && ret <= 9) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'match_pattern', ret - 7 );
Cover.MatchPattern = ret - 7;
Cover = new CoverShow();
window.Repaint();
}
else if (ret >= 10 && ret <= 14) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'interval', ret - 10);
Cover.Interval = ret - 10;
Cover.StopTimer();
Cover.StartTimer();
window.Repaint();
}
else if (ret >= 15 && ret <= 16) {
utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'covers_aspect', ret - 15);
Cover.Aspect = ret - 15;
window.Repaint();
}
else if (ret == 17) {
if ( Cover.GestureInverted == 1 ) utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'gesture_inverted', 0);
else utils.WriteINI( fb.FoobarPath + 's7e.ini', 'settings', 'gesture_inverted', 1);
Cover.GestureInverted = Cover.GestureInverted == 1 ? 0 : 1;
}
else if (ret == 18) {
try {
FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], dir + '\\cover.' + ext );
Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\cover.' + ext;
window.Repaint();
} catch(e) { }
}
else if (ret == 19) {
try {
FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], dir + '\\folder.' + ext );
Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\folder.' + ext;
window.Repaint();
} catch(e) { }
}
else if (ret == 20) {
try {
FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], dir + '\\front.' + ext );
Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\front.' + ext;
window.Repaint();
} catch(e) { }
}
else if (ret == 21) {
try {
FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], dir + '\\back.' + ext );
Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\back.' + ext;
window.Repaint();
} catch(e) { }
}
else if (ret == 22) {
try {
FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], dir + '\\disc.' + ext );
Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\disc.' + ext;
window.Repaint();
} catch(e) { }
}
else if (ret == 23) {
try {
FSO.MoveFile( Cover.Covers[ Cover.CurrentCoverNumber ], dir + '\\' + album + '.' + ext );
Cover.Covers[ Cover.CurrentCoverNumber ] = dir + '\\' + album + '.' + ext;
window.Repaint();
} catch(e) { }
}
else if (ret == 24 ) {
try {
if ( Cover.Covers && Cover.Covers[ Cover.CurrentCoverNumber ] ) {
FSO.DeleteFile( Cover.Covers[ Cover.CurrentCoverNumber ] );
Cover = new CoverShow();
window.Repaint();
}
} catch(e) { }
}
else if (ret == 25 ) {
Cover = new CoverShow();
window.Repaint();
}
else if (ret == 26 ) {
if ( Cover.Covers && typeof Cover.Covers[ Cover.CurrentCoverNumber ] == 'object' ) WshShell.run( '"' + Cover.MetaPath.replace(/\\\w*\..*/, '') + '"' );
else if ( Cover.Covers && Cover.Covers[ Cover.CurrentCoverNumber ] ) WshShell.run( '"' + Cover.Covers[ Cover.CurrentCoverNumber ] + '"' );
}
return true;
}

function on_playback_stop( Reason ) {

Cover.StopTimer();
if ( Reason == 0 ) on_item_focus_change();

}

function on_item_focus_change() {

Cover.Update();

}

function on_playlist_switch() {

Cover.Update();

}

function on_playback_new_track( metadb ){

Cover.Update( metadb );

Cover.StartTimer();

}

function on_timer(id) {

if ( Cover.CurrentMode == 2 && Cover.CycleTimer.ID == id ) {
Cover.NextCover();
}

}
sot
Новичок
Репутация: 1
С нами: 11 лет 2 месяца

Сообщение #80 AHAPXICT » 02.06.2015, 18:13

sot, это хорошо что сам разобрался как .dff "пофиксить". А в том скрипте что vladj выкладывал от 12.05.2015 для корректной работы на WSH Panel Mod v1.5.10 нужно заменить строки:this.CycleTimer ? window.KillTimer( this.CycleTimer ) : ''; на this.CycleTimer ? window.ClearInterval( this.CycleTimer ) : ''; и this.CycleTimer = window.CreateTimerInterval( 7000 ); на this.CycleTimer = window.SetInterval(on_timer, 7000); . Так как старые команды удалены из новой версии WSH панели.
Media Library it's bad - explorer it's good!
AHAPXICT M
Автор темы, Гуру
Аватара
Возраст: 49
Откуда: Киев
Репутация: 224
С нами: 6 лет 4 месяца

Пред.След.

Вернуться в Релизы сборок