Модификация темы 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 осуществляется путём нажатия кнопок мыши на панели:
Нажатие левой кнопки при нажатой правой - предыдущий индикатор в группе.
Нажатие правой кнопки при нажатой левой - следующий индикатор в группе.

Код: Выделить всё
Дата сборки: 27.12.2021
Оригинальный автор: tedGo
Модифицировал: AHAPXICT
Версия сборки: 1.39 & 1.5.8 final
Версия плеера: Foobar2000 v1.3.20 & v1.5.8
История версий:
v1.39 & 1.5.6 final+
1. Разные изменения (скрытые)

v1.38 & 1.5.6 final
1. В версии DarkOne_4_JS_v1.5.6_final откат к предыдущей версии Columns UI 0.5.1 (foo_ui_columns.dll)
2. Обновлён плейлист с радиостанциями RADIO BEST.fpl (Спасибо kutuzof!)

v1.38 & 1.5.5
1. EL Playlist - fix http://, https:// stream

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_WSH_v1.5.8 Версия плеера 1.5.8 final, версия 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.8_final Версия плеера 1.5.8 final, версия JScript Panel v2.3.6.1 by marc2003 - kbuffington (foo_jscript_panel.dll), Columns UI 0.5.1 (foo_ui_columns.dll). Системные требования WIN 7 и выше.
foobar2000 MPV Версия DarkOne_4_JS_v1.5.8_final с встроенным mpv video player.

VU Meter for DarkOne v4 (Display Panel)

Старые версии
Скачать с Google Диск:
DarkOne_4_v1.39 Версия плеера 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_v1.38
DarkOne_4_JS_v1.5.6_final Версия плеера 1.5.6 final, версия JScript Panel v2.3.6.1 by marc2003 - kbuffington (foo_jscript_panel.dll), Columns UI 0.5.1 (foo_ui_columns.dll). Системные требования WIN 7 и выше.

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
Описание будет добавляться!
Изображение
Изображение
Изображение
тема на форуме
Последний раз редактировалось AHAPXICT 27.12.2021, 22:39, всего редактировалось 141 раз(а).
AHAPXICT M
Автор темы
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет


Сообщение #301 AHAPXICT » 11.09.2016, 04:44

infinitykappa, а я уже начинаю медленно моргать глазами)))
AHAPXICT M
Автор темы
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #302 kutuzof » 11.09.2016, 18:05

AHAPXICT, так ни чего и и не нашёл. Ещё один вопрос. Можно ли при переключении из CompactOne в DOv4 или DOv3.1 автоматически восстанавливался размер проигрывателя?
kutuzof M
Аватара
Откуда: г. Орёл, Россия
Репутация: 256
С нами: 8 лет 2 месяца

Сообщение #303 AHAPXICT » 11.09.2016, 20:04

kutuzof, есть по этой теме материал. Не сегодня, надо найти скрипты, потом отпишусь. Сразу скажу что полностью восстанавливать размер не получится, так как в "виндовс" только одно окно с промежуточным размером, но можно устанавливать "ресайзинг" масштабирование окна под нужный размер как в PSS так и WSH.
AHAPXICT M
Автор темы
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #304 AHAPXICT » 12.09.2016, 06:12

kutuzof, по поводу не корректного отображения названия радиостанции. Как вы видели на скриншоте ( прикладывал ранее к сообщению) у меня всё отображается как надо, да и infinitykappa писал что у него всё работает как часы на стандартной установке плеера. Не знаю где у вас ошибка затесалась?
WSH_PSS_BUTTONS.png
WSH_PSS_BUTTONS.png (5.21 КБ) Просмотров: 2746

Теперь по переключению лайаутов. Начну с небольшого введения. Приведу пример для темы DarkOne v4, думаю другим пользователям тоже пригодится.
Итак, то огромное количество кнопок на передней панели придумал не я, а создатель этой темы tedGo о чём он подробно описал в инструкции. Любой пользователь может спокойно их убрать с панели как выбранные так и оптом используя меню свойства(Properties). Это не составляет труда выбрав в меню свойства нужную кнопку и изменить значение с True на False или убрать всё кнопки путём очистки панели нажав на кнопку Clear. Правда потом придётся всё пере подписывать))) Для чего всё это пишу. Если вам необходимо вывести нужную функцию к примеру открытие настроек выхода звуковых устройств нужно по ПКМ в правой или левой панели попасть в скрипт и изменить не нужную функцию на эту:
Пример для левой панели:
Не нужная функция для вызова плейлист менеджера легко заменяется
function(){fb.RunMainMenuCommand("Playlist Manager")}, "Playlist Manager");
на нужную для быстрого доступа выбора звуковых устройств
function(){fb.RunMainMenuCommand("Playback/Device/Preferences...")}, "Device");
После чего в меню свойства меняем название с PL MANAGER на DEVICE

Теперь про кнопки на PSS. Опять же я их вывел не случайно, вы не подумайте что, я только что и делаю как смотрю на осциллоскоп и сверяю спектрограмму, а вывел их на панель потому что не придумал что можно ещё для примера там разместить :smile: На самом деле есть функции которые очень удобно активировать именно с PSS панели. Например вывод эквалайзера через кнопку DSP на панели приведёт к крашу плеера(о чём написано в описании темы), по этому можно воспользоваться активацией с PSS панели.
Заменяем строки с осциллоскопом
$drawtextex(OSC..SCOPE,$get(btn.u),88,58,8,214-214-214,vcenter hcenter)
$imagebutton($get(btn.u),102,58,14,%do.images%\SmallNormal.png,%do.images%\SmallHover.png,COMMAND:View/Visualizations/Oscilloscope;REFRESH)

на строки с активацией эквалайзера
$drawtextex(EQUALIZER,$get(btn.u),88,58,8,214-214-214,vcenter hcenter)
$imagebutton($get(btn.u),102,58,14,%do.images%\SmallNormal.png,%do.images%\SmallHover.png,COMMAND:View/Equalizer;REFRESH)

Теперь к главному, переключение лайаутов на PSS. Для такого переключения элементарно задействуется ресайзинг, что не доступно для WSH панели.
Пример замена строк осциллоскопа и спектрограммы на
$drawtextex(COMPACTONE,$get(btn.o),88,59,8,214-214-214,vcenter hcenter)
$imagebutton($get(btn.o),102,58,14,%do.images%\SmallNormal.png,%do.images%\SmallHover.png,COMMAND:View/Layout/CompactOne v1.0;WINDOWSIZE:360:504;REFRESH,,)
$drawtextex(DARKONE V3.1,$get(btn.u),88,58,8,214-214-214,vcenter hcenter)
$imagebutton($get(btn.u),102,58,14,%do.images%\SmallNormal.png,%do.images%\SmallHover.png,COMMAND:View/Layout/DarkOne v3.1;REFRESH)

Теперь при переключении на CompactOne он будет сразу масштабироватся до нужного размера, а DarkOne v3.1 будет сохранять текущий размер.

Что касается подобного ресайзинга для WSH панели, то стандартно она таких функций не имеет. С этим помог kgena_ua, к нему я обращался с этим же вопросом. В данной ситуации без плагина foo_ui_hacks не обойтись. Дальше не буду приводить кучу скриптов так как заготовил .fcl файл с уже установленными скриптами, в том числе для PSS что бы было понятно. Все старые строки закомментировал двойным слешем. Для CompactOne использовал кнопку перехода к проигрываемому треку в качестве переключения на лайаут DarkOne v4.

Установка(только для моей сборки):
1. Разархивировать архив в папку foobar2000 (в архиве папка assemblies с файлами и файл конфигурации)
2. Импортировать файл конфигурации SUPER MEGA VIS III (1366x768)(Long 406x8)Default v1.14 wshbio LAYOUT.fcl

Скачать ЯндексДиск: assemblies
AHAPXICT M
Автор темы
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #305 MC Web » 12.09.2016, 14:10

AHAPXICT, привет.
Смотрю разобрался с масштабированием окон при переходе с одной темы на другую.
То же все хочу попробовать заняться, да руки не доходят.
Была мысль включить тему Denon (фиксированный размер) в DarkOne 3.0 + 4.0.

Благодаря kgena_ua удалось осуществить идею по встраиванию панелей foo_youtube в DarkOne 3.0 + 4.0 с автоматическим переключением. Тестирую, пока к работе замечаний нет.
Видео того, что получилось.
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #306 AHAPXICT » 12.09.2016, 22:19

MC Web, приветствую.
Классный видос :yes: ! Сам недавно Yello слушал, да ещё и этот альбом. Супер группа больше и добавить нечего. Когда заряжаю все альбомы для прослушивания всегда начинаю с Planet Dada [Flamboyant] под визуализацию Milkdrop2 шаблон Geiss - Blur Mix 3.milk вынос мозга!
А с масштабированием наоборот, это уже было почти год назад. Пол ночи почту на форуме перерывал, так нечего и нашёл, по всей видимости после того как форум рухнул часть сообщений пропала в том числе и сообщения от kgena_ua. Это он нашёл как это сделать на WSH. В общем чудом под утро нашёл у себя на компьютере ту сборку, хорошо что не удалил))) Я эту тему похоронил, но вот теперь она опять востребовалась вот и создал пост, добру нельзя пропадать.
P.S. Написал дофига, а по теме забыл. У Кутузова тоже foo_youtube в сборке стоит, думаю твоя тема ему будет очень интересна, тем более что он предпочитает версию 3.1. Вопрос. У тебя не возникало подобных проблем с этим плагином? У него съезжает надпись радиостанции вверх, в общем чертовщина какая то.

Добавлено спустя 9 минут 55 секунд:
kutuzof, Ну что получилось?
AHAPXICT M
Автор темы
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #307 MC Web » 12.09.2016, 22:50

AHAPXICT:А с масштабированием наоборот, это уже было почти год назад.
Я то же наверно пропустил. Скачивал недавно твою сборку, там масштабирования не было.
AHAPXICT:Вопрос. У тебя не возникало подобных проблем с этим плагином? У него съезжает надпись радиостанции вверх, в общем чертовщина какая то.
Смотря где и как размещена панель / окно. В последних версиях компонента появилась возможность встраивать в панели, в ранних было только окно. Получается не правильно встроена (если встроена). Так проблем не было.
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #308 AHAPXICT » 12.09.2016, 23:54

MC Web:Я то же наверно пропустил. Скачивал недавно твою сборку, там масштабирования не было.
В том то всё и дело. Всё настроено, всё работает как часы, а я отказался от этого и оставил как есть. Нам нужно было делать переключение лайаутов через PSS изначально там всё проще, ресайз окна можно делать по умолчанию. Я не захотел из за одного ресайзинга для CompactOne добавлять в сборку папку assemblies с файлами .DLL для foo_ui_hacks. Спроси у kgena_ua он знает всё по этой теме. Рекомендую поэкспериментировать, для Denon самое оно.

Добавлено спустя 2 часа 16 минут:
kutuzof, мне пришла одна мысль в голову. Вы часом не устанавливали оригинальную тему DarkOne v3.1? Это пока только догадка, но возможно плеер подхватывает оригинальный шрифт DarkOne? Меня на это наталкивает та запятая из TIME SECTION. Не вариант, но попробуйте удалить оригинальный шрифт путь: C:\WINDOWS\Fonts --> DarkOne и установить вместо него мой из сборки или отсюда
AHAPXICT M
Автор темы
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #309 kutuzof » 13.09.2016, 10:00

AHAPXICT, с масштабированием все получилось, спасибо. Шрифт установлен ваш.
kutuzof M
Аватара
Откуда: г. Орёл, Россия
Репутация: 256
С нами: 8 лет 2 месяца

Сообщение #310 kutuzof » 15.09.2016, 18:36

AHAPXICT, с текстом разобрался. В системе ваш шрифт стоит. Но решил закинуть вашу папку fonts в папку fooobar2000 и все заработало. Спасибо за совет со шрифтом.
kutuzof M
Аватара
Откуда: г. Орёл, Россия
Репутация: 256
С нами: 8 лет 2 месяца

Сообщение #311 AHAPXICT » 15.09.2016, 20:35

kutuzof, я если честно не додумался удалить из папки fonts шрифт что бы найти ошибку, но понимал что связь есть с TIME SECTION. Естественно сейчас смоделировал ошибку(точно так же текст радио поднялся вверх) и вот что получается, конфликт с антиалиасингом для блоков, то есть его отключение. Я там давно заменил $drawtextex на $drawstring, при отключённом антиалиасинге цифры получаются чётко, а не размыто как в $drawtextex.
Не понимаю в чём именно конфликт, но благодаря вам есть решение этой проблемы:
В строке что под // ----- TIME SECTION -----
$font(DarkOne,14,)$drawstring($char(9608)$char(9608):$char(9608)$char(9608):$char(9608)$char(9608),$sub(%ps_width%,80),$sub(%ps_height%,18),83,17,$get(t.col),right noaa)
Удалите noaa (отключение антиалиасинга) и всё должно заработать, без папки fonts, с системным шрифтом. В блоках будет небольшая размытость, но это фактически не заметно на глаз :smile:

Добавлено спустя 6 минут 15 секунд:
P.S. Потом поправлю во всех скриптах, пусть будет так чем с глюком
AHAPXICT M
Автор темы
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #312 polk50 » 15.09.2016, 22:05

АНАРХИСТ, Спасибо за свеженькую сборку! Будем пробовать и смотреть, что поменялось. Удачи!
polk50
Репутация: 1
С нами: 8 лет 7 месяцев

Сообщение #313 kutuzof » 16.09.2016, 14:06

AHAPXICT, как сделать чтобы vu meter в каждом DO был разным, а не один и тот же.
kutuzof M
Аватара
Откуда: г. Орёл, Россия
Репутация: 256
С нами: 8 лет 2 месяца

Сообщение #314 AHAPXICT » 16.09.2016, 17:55

kutuzof, ну это не серьёзно :smile: Об этом написано в Readme.txt, а что бы появились настройки в контекстном меню нужно снять галочку в Splitter Settings... --> Forced Layout на время настройки. В сборке и так для CompactOne, DarkOne v4 (MEGA VIS панель папка USER VU Meter) и основная директория с плагином foo_vis_vumeter имеет разные VU метры, так что некоторые дублированы по три раза :smile:
P.S. Для панелей: foo_vis_vumeter, foo_uie_vis_peakmeter_spectrum, Item Details Panel, а также foo_vis_shpeck (в 3.1, можно также добавить для width и height: %ps_width% %ps_height% соответственно ) нужно снимать галочку в сплиттере во время настройки. Причина: недоработка самих панелей.
Добавил в шапку темы описание переключения VU Meter при помощи кнопок мыши.
AHAPXICT M
Автор темы
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #315 kutuzof » 16.09.2016, 18:11

AHAPXICT, я не про то. Допустим когда я меняю vu meter в CO меняется и в DO4.0 и DO 3.1, а я хочу как у вас для каждого поставить свой.
kutuzof M
Аватара
Откуда: г. Орёл, Россия
Репутация: 256
С нами: 8 лет 2 месяца

Сообщение #316 AHAPXICT » 16.09.2016, 18:34

kutuzof, как же не про то? Именно про это я и написал! Для каждого лайаута, панели или отдельной панели можно поставить свои VU Meter, достаточно создать нужное количество папок(причём в любом месте на компьютере) и в контекстном меню выбрать нужную папку для нужной панели! Об этом написано подробно в редми
Спойлер
VU Meter visualization
Компонент для foobar2000 v0.9-1.3
Сборка от 2013-02-16
=============================
Компонент представляет собой имитацию аналогового стерео волюметра (Модель 702
производства Ernest Turner). Визуализация доступна как в виде отдельного окна
так и в виде CUI-панели или DUI-элемента.


Описание настроек
=================
Настройки находятся на странице "Advanced" окна конфигурации плеера, в группе
параметров "Display\VU Meter":
Skins folder - задаёт папку с пользовательскими индикаторами.
Пустая строка (по умолчанию) соответствует папке в которой
находится сам компонент. Во всех остальных случаях это путь
относительно папки с foobar2000.exe.

Left / Right preamp - величина (в децибелах) добавляемая к сигналу.
Возможные значения +/-100 децибел (+20 по умолчанию).

Approximation length - постоянная времени в секундах.
Возможные значения 0.02-1 сек. (0.2 по умолчанию).

Automatic gain control - автоматическая подстройка уровня сигнала.


Команды меню
=================
View\Visualizations\
Analog VU Meter - активирует визуализацию в виде отдельного окна. Двойной
щелчок по окну меняет его размеры на размеры по умолчанию.

View\Visualizations\
Analog VU Meter skins* - содержит список всех индикаторов по группам,
позволяя выбрать активный для каждой группы.

Previous skin* - загрузка предыдущего индикатора в группе.
Next skin* - загрузка следующего индикатора в группе.

*- команда видна только в полной версии меню (то есть при нажатом Shift).

CUI-панель можно добавить через меню "Visualisations\Analog VU Meter".
DUI-элемент "Analog VU Meter" находится в группе "Playback Visualization".


Контекстное меню панели
=================
X1xY1 => X2xY2 - меняет размеры элемента на размеры по умолчанию для данного
индикатора. X1xY1 - текущие размеры окна, а X2xY2 - размеры
по умолчанию.

Layout\
Left+Right (H) - два индикатора: левый канал слева, правый канал справа.
Left+Right (V) - два индикатора: левый канал сверху, правый канал снизу.
Left only - только левый канал.
Right only - только правый канал.
Mono - моно режим: сигнал от обоих каналов на единственном индикаторе.

Lock aspect ratio - включает/выключает режим сохранения пропорций.

Group - позволяет выбрать группу индикаторов.
Меню видно только при наличии двух и более групп.

<Индикатор> - загружает указанный индикатор.
Меню видно только при наличии в группе двух и более индикаторов.


Пользовательские индикаторы
=================
Помимо встроенного, компонент может загружать из BIN-файлов пользовательские
индикаторы. Для создание и редактирования индикаторов используется специальная
утилита, которую можно скачать по адресу:
http://sites.google.com/site/foobar2000components/home/vumeter/VUEditor.zip

Если левый и правый индикаторы визуально отличаются, то имена соответствующих
файлов должны быть: "Индикатор1.bin" для левого, "Индикатор2.bin" для правого.
Для моно режима, в этом случае, будет использован левый индикатор.

Файлы с индикаторами можно поделить на группы помещая их в подпапки. Корневой
папке соответствует группа <Default> (в неё же входит и встроенный индикатор).
Панели, принадлежащие одной группе, меняют свои индикаторы синхронно.

Компонент отслеживает состояние файлов и папок с индикаторами и автоматически
перезагружает индикаторы в случае их изменения.


Прочее
=================
Помимо раздельного управления уровнем (Left/Right preamp) компонент позволяет
изменять общий уровень с помощью колёсика мыши: на 0.1 дБ с нажатым Shift-ом и
на 1.0 дБ без Shift-а.
На системах с сенсорным экраном уровень можно менять путём прокрутки вверх или
вниз.

Так же имеется возможность переключать индикаторы с помощью кнопок мыши:
Нажатие левой кнопки при нажатой правой - предыдущий индикатор в группе.
Нажатие правой кнопки при нажатой левой - следующий индикатор в группе.
На системах с сенсорным экраном индикаторы можно переключать путём нажатия с
касанием (Press and Tap).

Компонент реализует ряд интерфейсов доступных из компонента "WSH Panel Mod".
Пример использования можно найти в файле VUMeter.js, а сам компонент на сайте:
http://code.google.com/p/foo-wsh-panel-mod/downloads/list


Совместимость
=================
Компонент полностью совместим с UI-компонентами foo_ui_std, foo_ui_columns и
должен работать со всеми версиями плеера, поддерживающими 75-ю версию SDK (на
данный момент это версии с 0.9.6.0 и по 1.2.3.0).

Компонент написан на Паскале, без использования foobar2000 SDK.


История изменений
=================
2010.05.02 Экспериментальная версия.
2010.05.03 Первая публичная версия.
2010.05.04 Добавлена поддержка CUI.
2010.05.05 Добавлен параметр "Approximation length" и затухание на паузе.
2010.05.07 Улучшена работа во время переходных процессов и добавлена поддержка
многоканальных треков.
2010.05.08 Добавлена поддержка DUI. Исправлены небольшие ошибки.
2010.05.19 Добавлена поддержка Direct2D (только для Vista и выше).
2010.05.27 Добавлена поддержка старых версий вплоть до 0.9.6.0.
2010.06.01 Добавлен параметр "Use D2D rendering".
2010.06.03 Заменена анимация по умолчанию (теперь она больше и лучше).
2012.02.22 Убран параметр "Use D2D rendering".
Управление Signal compensation колёсиком мыши.
2012.04.09 Поддержка Peak level в пользовательских индикаторах.
2012.04.24 Отдельные Signal compensation для правого и левого канала.
2012.04.25 Расширена поддержка пользовательских индикаторов.
2012.04.29 Небольшие исправления встроенного индикатора.
2012.05.02 Поддержка индикаторов с линейной шкалой.
2012.05.07 Добавлен параметр "Lock aspect ratio".
2012.05.23 Добавлен режим "Left+Right (V)".
2012.05.26 Добавлена возможность управления компонентом из скриптов.
2012.06.06 Улучшена совместимость с локализованными версиями плеера.
2012.12.20 Добавлен параметр "Automatic gain control".
2013.02.07 Улучшена отрисовка в режиме "Lock aspect ratio".
2013.02.16 Direct2D заменён на DirectX.
AHAPXICT M
Автор темы
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #317 kutuzof » 16.09.2016, 18:53

AHAPXICT, спасибо разобрался.
kutuzof M
Аватара
Откуда: г. Орёл, Россия
Репутация: 256
С нами: 8 лет 2 месяца

Сообщение #318 AHAPXICT » 17.09.2016, 04:02

Если у кого то перестала работать WSH BIO, как у меня, то обновите скрипты.
Спойлер
DarkOne v4 Левая панель:
Код: Выделить всё
// ==PREPROCESSOR==
// @name "Biography Text && Picture. www.last.fm"
// @author "kgena_ua"
// @version "23022016-13032016"
// @feature "v1.4"
// @feature "watch-metadb"
// ==/PREPROCESSOR==

// NOTE: "Grab Focus"  It must be enabled: ON

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)); }
function getRed(color) {return ((color >> 16) & 0xff);};
function getGreen(color) {return ((color >> 8) & 0xff);};
function getBlue(color) {return (color & 0xff);};

DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;
DT_WORDBREAK = 0x00000010;
DT_CALCRECT = 0x00000400;
DT_NOPREFIX = 0x00000800;

var a_font = gdi.Font("Imprint MT Shadow+",48, 0);
var s_font = gdi.Font("Times New Roman",16, 1);
var b_font = gdi.Font("Times New Roman",20, 0);
var transparent = 220;

// /*
ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
};

function get_color(){   
    bgcolor = window.GetColorCUI(ColorTypeCUI.background);
    a_color = window.GetColorCUI(ColorTypeCUI.active_item_frame);
    b_color = window.GetColorCUI(ColorTypeCUI.text);
}

get_color();

function on_colors_changed(){
    get_color();
}
// */
//var bgcolor = RGB(19,30,38);
//var a_color = RGB(180,132,7);
//var b_color = RGB(160,160,160);


var ww,wh;
var doc = new ActiveXObject("htmlfile");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");
var script_path = fb.ProfilePath + "\\tmp_Biography\\download\\";
var vbs = "cscript //nologo \"" + script_path + "download.vbs\"";
var tmp_b_path = fb.ProfilePath + "\\tmp_Biography\\";
if(!fso.FolderExists(tmp_b_path)) {fso.CreateFolder(tmp_b_path)};
if(!fso.FolderExists(tmp_b_path + "\\download\\")) {fso.CreateFolder(tmp_b_path + "\\download\\")};
if(!fso.FileExists(tmp_b_path + "\\download\\" + "download.vbs")) {create_download_file()};

load_last_fm_logo();
var logo_img = gdi.Image(tmp_b_path + "\\download\\" + "last_fm_logo.jpg");

var artist, old_artis, filename;

function clean_filename(filename) {
    return filename.replace(/[\/\:\*\?\"\<\>\|\s]/g,'_');
}

var g_img = null;
var files = [], selected = 0;
var abc = window.GetProperty("abc", 1);
var cycle = window.GetProperty("auto cycle (sec)", 60);
var limit = window.GetProperty("download limit",5);
var fsize = window.GetProperty("Font Size", 0);
var p_margin = window.GetProperty("margin: picture", 0);
var t_margin = window.GetProperty("margin: text", 16);
var nocover = window.GetProperty("nocover image", false);
var nocover_path = window.GetProperty("nocover path", "B:\\themes\\DarkOne_v4.0\\Images\\DarkOne.png");
var psize = window.GetProperty("Picture Size", 0);
var select_p_a = window.GetProperty("pictures/albums", 0);
var scrollbar = window.GetProperty("scrollbar", true);
var selection_mode = window.GetProperty("selection mode", 0);
var txt_x = window.GetProperty("txt_x", 0);
var txt_y = window.GetProperty("txt_y", window.Height / 1.4);

var delta_x, delta_y;
var k_down = false;
var text_scroll = false;
var pic_scroll = false;
var sb_down = false;
var sb_scroll = false;
var scrollbar_k;
var posy = 0;
var artist_x, artist_y;
var b_x = 0, b_y = 0;
var text = "";
var s_text = 0;
var string_width;
var strings_array = [];
var b_text_rows = 0;
var b_text_row_height = 0;
var b_text_visable_rows = 0;
var b_text_visable_height = 0;
var b_text_array = [];
var abc_lang = new Array("", "ru/");
var if_not_found = new Array(". . .", ". . .");
var select_p_a_old;
var p_a = new Array("images", "albums");

var metadb;
on_item_focus_change();


function on_paint(gr){   
   !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
    if (window.GetProperty("Font Size") == 0) var x_font = s_font;
    if (window.GetProperty("Font Size") == 1) var x_font = b_font;
    if(fsize > 1){x_font = b_font;}
   
    paint(gr);   

    if(set_cycle){   
        gr.FillSolidRect(0, 0, ww, wh, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));   
        var txt_cycle = cycle == 0 ? "off" : cycle + " sec";   
        set_cycle && gr.GdiDrawText("AUTO CYCLE \n" + txt_cycle, b_font, a_color, 15, 25, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );   
    } else{   
        gr.FillSolidRect(txt_x, txt_y, ww - txt_x, wh - txt_y, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));   
    }   

        gr.GdiDrawText(artist, a_font, RGB(10,21,29), artist_x - 6, artist_y + 1, ww - artist_x, wh, DT_NOPREFIX | DT_LEFT | DT_WORD_ELLIPSIS );   
        gr.GdiDrawText(artist, a_font, a_color, artist_x - 7, artist_y, ww - artist_x, wh, DT_NOPREFIX | DT_LEFT | DT_WORD_ELLIPSIS );

    for (var i = 0; i < b_text_visable_rows; i++) {
//        gr.GdiDrawText(b_text_array[i + s_text], x_font, RGB(10,21,29), b_x - 6, b_y + b_text_row_height * i + 1, ww, wh, DT_NOPREFIX | DT_LEFT );
        gr.GdiDrawText(b_text_array[i + s_text], x_font, b_color, b_x - 7, b_y + b_text_row_height * i, ww, wh, DT_NOPREFIX | DT_LEFT );
    }

        scrollbar && draw_scrollbar(gr);
   
        gr.GdiDrawText("", b_font, b_color, 15, 0, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );
}

function paint(gr){
    g_img = gdi.Image(files[selected]);
    if (!g_img && nocover){
        try {
            g_img = gdi.Image(nocover_path);
        } catch(e) {};
    }
   
    if (g_img){
        var scale_w = (ww - p_margin * 2) / g_img.Width;
        var scale_h = (wh - p_margin * 2) / g_img.Height;
        var scale = Math.min(scale_w, scale_h);
       
        if (files.length > 0){
            g_img = g_img.CreateRawBitmap();
            gr.GdiDrawBitmap(g_img, p_margin + (ww - g_img.Width * scale) / 2, p_margin, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
        } else {
            gr.DrawImage(g_img, p_margin + (ww - g_img.Width * scale) / 2, p_margin, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height, 0, 100);
        }
    }
   
    if (logo_img && files.length == 0 && !nocover){
        gr.DrawImage(logo_img, p_margin + (ww - logo_img.Width * 2.5) / 2, p_margin + (wh - logo_img.Height * 2.5) / 3.5, logo_img.Width * 2.5, logo_img.Height * 2.5, 0, 0, logo_img.Width, logo_img.Height, 320, 75);   
    }
}

function draw_scrollbar(gr){
    scrollbar_h = b_text_rows > b_text_visable_rows ? b_text_visable_height * (b_text_visable_rows / b_text_rows) + 10: 0;
    scrollbar_y = s_text > 0 ? s_text * scrollbar_k : 0;
    gr.FillSolidRect(ww - 6, b_y, 6, wh*scrollbar_h, RGBA(63, 100, 127, 32));   
    gr.FillSolidRect(ww - 6, b_y + scrollbar_y, 6, scrollbar_h, RGBA(63, 100, 127, 150));
}


function on_playlist_switch() {
    on_item_focus_change();
}

function on_playback_new_track() {
    on_item_focus_change();
}

function on_playback_dynamic_info_track() {
    on_item_focus_change();
}

function on_playback_stop() {
    on_item_focus_change();
}

function on_selection_changed(metadb) {
   on_item_focus_change();
}

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

function Eval(field) {   
    if (!metadb) return;   
    path = fb.Titleformat("%path%").EvalWithMetadb(metadb);   
    return fb.Titleformat("[" + field + "]").EvalWithMetadb(metadb) ? fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb) : fb.TitleFormat("[" + field + "]").Eval(true);   
}   

function on_metadb_changed() {
    if (!metadb) return;   
    artist = Eval("%artist%");
    if (artist != old_artis || select_p_a != select_p_a_old){
        CollectGarbage();
        g_img = null;
        s_text = 0;
        text = "";
        get_b_text_array()       
        get_b_text();
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();       
        old_artis = artist;
        select_p_a_old = select_p_a;
    }
}     

function get_pic(){
    if (window.GetProperty("Picture Size") == 0) var p_s = "500x500";   // "500x500" заменить на "34s", "64s", "174s", "300x300" или "770x0"
    if (window.GetProperty("Picture Size") == 1) var p_s = "";
    if(psize > 1){p_s = "";}
    xmlhttp1 = new ActiveXObject("Microsoft.XMLHTTP");     
    var url1 = ("https://www.last.fm/music/" + encodeURIComponent(artist) + "/+" + p_a[select_p_a]);     
    xmlhttp1.open("GET", url1, true);     
    xmlhttp1.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");     
    xmlhttp1.send();     
    xmlhttp1.onreadystatechange = function () {     
        if (xmlhttp1.readyState == 4) {     
            if (xmlhttp1.status == 200) {     
                doc.open();     
              var div = doc.createElement("div");
              div.innerHTML = xmlhttp1.responsetext;
              var data = div.getElementsByTagName("img");
              var urls = [];
                for (i = 0; i < data.length; i++) {     
                    if (data[i].className == "image-list-image"){       
                        if (data[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/avatar170s") == 0) urls.push(data[i].src.replace("avatar170s", p_s));
                    }       
                    if (data[i].className == "album-grid-album-art"){       
                        if (data[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300") == 0 && data[i].src.indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0) urls.push(data[i].src.replace("300", ""));       
                    }       
                }     
                for (i = 0; i < Math.min(urls.length, limit); i++) {     
                    file = "\"" + tmp_b_path + clean_filename(artist) + "_"  + i + "_" + p_a[select_p_a] + ".jpg" + "\"";     
                    WshShell.Run(vbs + " " + urls[i] + " " + file, false);       
                }     
              doc.close();
            }       
        }     
    }     
}

function get_files_from_dir() {
    if (!artist) return;
    files = [];
    var e = new Enumerator( fso.GetFolder(tmp_b_path).Files );
    while ( !e.atEnd() ) {
        var name = e.item().Name;
        if (name.indexOf(clean_filename(artist)) == 0){
            files.push(tmp_b_path + name);
        }
        e.moveNext();
    }
}

function get_b_text(){
    xmlhttp2 = new ActiveXObject("Microsoft.XMLHTTP");
    var url2 = ("https://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist) + "/+wiki");
    xmlhttp2.open("GET", url2, true);
    xmlhttp2.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    xmlhttp2.send();
    xmlhttp2.onreadystatechange = function () {
        if (xmlhttp2.readyState == 4) {
            if (xmlhttp2.status == 200) {
                doc.open();
                var div = doc.createElement("div");
                div.innerHTML = xmlhttp2.responsetext;
                var data = div.getElementsByTagName("div");
                for (i = 0; i < data.length; i++) {
                    if (data[i].className == "wiki-content") {
                        text = strip_tags(data[i].innerHTML);
                        break;
                    }
                }
                doc.close();
            }
            if (text == "") text = if_not_found[abc];
            get_b_text_array();
        }
    }
}

function strip_tags(t) {
    doc.open();
    var div = doc.createElement("div");
    div.innerHTML = t.replace(/<[Pp][^>]*>/g, "").replace(/<\/[Pp]>/g, "<br>").replace(/\n/g, "<br>");
    var text = div.innerText;
    doc.close();
    return text;
}

function get_b_text_array() {
    if (window.GetProperty("Font Size") == 0) var x_font = s_font;
    if (window.GetProperty("Font Size") == 1) var x_font = b_font;
    if(fsize > 1){x_font = b_font;}
    artist_x = txt_x + t_margin;
    artist_y = txt_y + t_margin/8;
    strings_array = [];
    b_text_array = [];
   
    temp_bmp = gdi.CreateImage(1, 1);
    temp_gr = temp_bmp.GetGraphics();

    b_x = txt_x + t_margin;
    b_y = txt_y + temp_gr.CalcTextHeight("text", a_font) + t_margin/4;

    b_text_row_height = temp_gr.CalcTextHeight("text", x_font)
    string_width = Math.max(ww - b_x - 10, 0);

    if (text) strings_array = temp_gr.EstimateLineWrap(text, x_font, string_width).toArray();

    for (var i = 0; i < strings_array.length; i += 2) {
        b_text_array.push(strings_array[i].replace(/^\s+|\s+$/g, ""));
    }

    b_text_rows = b_text_array.length;
    b_text_visable_rows = Math.round((wh - b_y - 10) / b_text_row_height);
    b_text_visable_height = Math.round(wh - b_y - 10);
   
    temp_bmp.ReleaseGraphics(temp_gr);
    temp_bmp.Dispose();
    temp_gr = null;
    temp_bmp = null;

    if (b_text_visable_rows + s_text > b_text_rows && s_text > 0) {
        s_text = b_text_rows - b_text_visable_rows;
    };
   
    scrollbar_k = b_text_visable_height / b_text_rows;
    window.Repaint();
}

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

    MF_ENABLED = 0x00000000;   
    MF_GRAYED = 0x00000001;   
    MF_SEPARATOR = 0x00000800;   
     
    _menu.AppendMenuItem(MF_ENABLED, i++, "EN text");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "RU text");   
    _menu.CheckMenuRadioItem(1, i, abc + 1);         
    _menu.EnableMenuItem(abc + 1, 1);     

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, i++, "Small font")
    _menu.AppendMenuItem(MF_ENABLED, i++, "Big font")
    _menu.CheckMenuRadioItem(i - 2, i, fsize + 3);         
    _menu.EnableMenuItem(fsize + 3, 1); 

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, i++, "Prefer now playing");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Follow selected track");   
    _menu.CheckMenuRadioItem(i - 2, i , selection_mode + 5);   
    _menu.EnableMenuItem(selection_mode + 5, 1);
       
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Artist pictures");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Albums pictures");   
    _menu.CheckMenuRadioItem(i - 2, i , select_p_a + 7);   
    _menu.EnableMenuItem(select_p_a + 7, 1);

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    var is_artist = artist ? MF_ENABLED : MF_GRAYED;   
    _menu.AppendMenuItem(is_artist, i++, "last.fm Artist");   
     
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, i++, "500x500 pixel pictures")
    _menu.AppendMenuItem(MF_ENABLED, i++, "Original size pictures")
    _menu.CheckMenuRadioItem(i - 2, i, psize + 10);         
    _menu.EnableMenuItem(psize + 10, 1);

//    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, 12, "Image Viewer");

//    if (ShiftDown) {   
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
        _menu.AppendMenuItem(MF_ENABLED, 19, "Reload");   
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
        _menu.AppendMenuItem(MF_ENABLED, 20, "Properties");   
        _menu.AppendMenuItem(MF_ENABLED, 30, "Configure ...");
//    }

    ret = _menu.TrackPopupMenu(x,y);

    switch (ret) {
    case 1:
        abc = 0;
        window.SetProperty("abc", abc);
        s_text = 0;
        text = "";
        get_b_text();
        break;
    case 2:
        abc = 1;
        window.SetProperty("abc", abc);
        s_text = 0;
        text = "";
        get_b_text();
        break;
    case 3:   
        fsize = 0;
        window.SetProperty("Font Size", fsize);   
        s_text = 0;
        text = "";
        get_b_text();
        break; 
    case 4:
        fsize = 1;
        window.SetProperty("Font Size", fsize);   
        s_text = 0;
        text = "";
        get_b_text(); 
        break; 
    case 5:
        selection_mode = 0;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 6:
        selection_mode = 1;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 7:
        select_p_a = 0;
        window.SetProperty("pictures/albums", select_p_a);
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break;
    case 8:
        select_p_a = 1;
        window.SetProperty("pictures/albums", select_p_a);
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break;
    case 9:
        WshShell.run("http://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist));
        break;
    case 10:   
        psize = 0;
        window.SetProperty("Picture Size", psize);   
        p_s = "";
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break; 
    case 11:
        psize = 1;
        window.SetProperty("Picture Size", psize);   
        p_s = "";
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break;     
    case 12:
       if (files[selected] && pic_scroll) WshShell.run( '"' + files[selected] + '"' );
        break;
   
    case 19:
        window.Reload();
        break;
    case 20:
        window.ShowProperties();
        break;   
    case 30:
        window.ShowConfigure();   
        break;   
   }
    _menu.Dispose();   
    return true;   
}   

var timer = window.SetInterval(on_timer, 1000);
var step = 0;
var set_cycle = false;
var dis_timer, dis = 0;

function on_timer(id) {
    step =  set_cycle || cycle == 0 ? 0 : step + 1;
    if (files.length == 0) {get_files_from_dir(); window.Repaint();};
   
    if (cycle > 0 && step >= cycle){
        selected = selected >= files.length - 1 ? 0 : selected = selected + 1;
        window.Repaint();
        step = 0;
    }
}

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

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

var delay = false;

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

function del_files_from_dir() {
    var del_files = [];
    var e = new Enumerator( fso.GetFolder(tmp_b_path).Files );
    while ( !e.atEnd() ) {
        var name = e.item().Name;
        try {
            fso.deleteFile(tmp_b_path + name );
        } catch(e) {};
        e.moveNext();
    }
}

function load_last_fm_logo(){
    if(!fso.FileExists(tmp_b_path + "\\download\\" + "last_fm_logo.jpg")) {
        var url = "https://www.last.fm/static/images/logo_static.png?5b6b42188c40"
        var file = "\"" + tmp_b_path + "\\download\\" + "last_fm_logo.jpg" + "\"";
        WshShell.Run(vbs + " " + url + " " + file, false);
        var url = "https://static-web.last.fm/static/images/favicon.702b239b6194.ico"
        var file = "\"" + tmp_b_path + "\\download\\" + "last_fm_ico.ico" + "\"";
        WshShell.Run(vbs + " " + url + " " + file, false);
    }
}

function create_download_file() {
    try {
        file = fso.CreateTextFile(tmp_b_path + "\\download\\" + "download.vbs" )
       
        var text =   
            "If (WScript.Arguments.Count <> 2) Then" + "\n\r" +   
            "   WScript.Quit" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "url = WScript.Arguments(0)" + "\n\r" +   
            "file = WScript.Arguments(1)" + "\n\r"  + "\n\r" +   

            "Set objFSO = Createobject(" + '"Scripting.FileSystemObject"' + ")" + "\n\r" +   
            "If objFSO.Fileexists(file) Then" + "\n\r" +   
            "   Set objFSO = Nothing" + "\n\r" +
            "   WScript.Quit" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "Set objXMLHTTP = CreateObject(" + '"MSXML2.XMLHTTP"' + ")" + "\n\r" +   
            "objXMLHTTP.open " + '"GET"' + ", url,false" + "\n\r" +   
            "objXMLHTTP.send()" + "\n\r" + "\n\r" +   

            "If objXMLHTTP.Status = 200 Then" + "\n\r" +   
            "   Set objADOStream = CreateObject(" + '"ADODB.Stream"' + ")" + "\n\r" +
            "   objADOStream.Open" + "\n\r" +
            "   objADOStream.Type = 1" + "\n\r" +
            "   objADOStream.Write objXMLHTTP.ResponseBody" + "\n\r" +
            "   objADOStream.Position = 0" + "\n\r" +
            "   objADOStream.SaveToFile file" + "\n\r" +
            "   objADOStream.Close" + "\n\r" +
            "   Set objADOStream = Nothing" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "Set objFSO = Nothing" + "\n\r" +   
            "Set objXMLHTTP = Nothing"   
        ;

        file.WriteLine(text);
        file.Close();
    } catch(e) {};
}

function on_mouse_move(x, y) {
    window.SetCursor(32649);
    if (k_down){
        txt_x = x - delta_x ;
        txt_y = y - delta_y;

        txt_x = txt_x <= 0 ? 0 : txt_x >= ww - 65 ? ww - 65: txt_x;
        txt_y = txt_y <= 0 ? 0 : txt_y >= wh - 65 ? wh - 65: txt_y;
        get_b_text_array();
    }

    text_scroll = x >= txt_x && x < ww - 20 && y  >= txt_y ? true : false;
    sb_scroll =  x > ww - 20 && y  >= txt_y ? true : false;
    pic_scroll = !text_scroll && !sb_scroll ? true : false;

    if (sb_down && scrollbar){
        posy = y + delta_y;
        s_text = y + delta_y >= 0 ? y + delta_y <= (b_text_rows - b_text_visable_rows) * scrollbar_k ? Math.round(posy / scrollbar_k) : b_text_rows - b_text_visable_rows : 0;
        window.Repaint();
    }
}

function on_mouse_wheel(delta) {
    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
   
    if (!delay && pic_scroll && !ShiftDown){
        delay = true;
        fdelay();
        get_files_from_dir();
        if (delta < 0) {selected = selected <= 0 ? files.length - 1 : selected = selected - 1};
        if (delta > 0) {selected = selected >= files.length - 1 ? 0 : selected = selected + 1};

    }
    if (text_scroll && !ShiftDown){
        if (b_text_rows > b_text_visable_rows){
            if (delta < 0) {s_text = b_text_rows - s_text <= b_text_visable_rows ? b_text_rows - b_text_visable_rows : s_text += 1}
            if (delta > 0) {s_text = s_text <= 0 ? 0 : s_text -= 1}
        }
    }
   
    if (set_cycle) {
        if (delta < 0) {cycle = cycle <= 0 ? 0 : cycle - 5;};
        if (delta > 0) {cycle = cycle >= 60 ? 60 : cycle + 5;};
        window.SetProperty("auto cycle (sec)", cycle);
    }
    window.Repaint();
}

function on_mouse_lbtn_down(x,y){
    if (text_scroll){
        k_down = true;
        delta_x = x - txt_x;
        delta_y = y - txt_y;
    }
    if (sb_scroll){
        sb_down = true;
        posy = s_text * scrollbar_k;
        delta_y = posy - y;
    }
}

function on_mouse_lbtn_up(x,y){
    window.SetProperty("txt_x", txt_x);
    window.SetProperty("txt_y", txt_y);
    k_down = false;
    sb_down = false;
}

function on_mouse_lbtn_dblclk (x,y){
    if (text_scroll){
        abc = abc == 1 ? 0 : 1;
        window.SetProperty("abc", abc);
        s_text = 0;
        b_text_array = [];
        text = "";
        get_b_text();
    }
    if (files[selected] && pic_scroll){
        select_p_a = select_p_a == 1 ? 0 : 1;
        window.SetProperty("pictures/albums", select_p_a);
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
    }
   
}

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

function on_size(){
    ww = window.Width;   
    wh = window.Height;
   
    txt_x = window.GetProperty("txt_x");
    txt_y = window.GetProperty("txt_y");

    txt_x = txt_x >= ww - 65 && txt_x >= 0 ? ww - 65 : txt_x;
    txt_y = txt_y >= wh - 65 && txt_y >= 0 ? wh - 65 : txt_y;
   
    get_b_text_array();
}
DarkOne v4 Правая панель:
Код: Выделить всё
// ==PREPROCESSOR==
// @name "Biography Text && Picture. www.last.fm"
// @author "kgena_ua"
// @version "23022016-13032016"
// @feature "v1.4"
// @feature "watch-metadb"
// ==/PREPROCESSOR==

// NOTE: "Grab Focus"  It must be enabled: ON

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)); }
function getRed(color) {return ((color >> 16) & 0xff);};
function getGreen(color) {return ((color >> 8) & 0xff);};
function getBlue(color) {return (color & 0xff);};

DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;
DT_WORDBREAK = 0x00000010;
DT_CALCRECT = 0x00000400;
DT_NOPREFIX = 0x00000800;

var a_font = gdi.Font("Imprint MT Shadow+",48, 0);
var s_font = gdi.Font("Times New Roman",16, 1);
var b_font = gdi.Font("Imprint MT Shadow+",36, 0);
var transparent = 220;

// /*
ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
};

function get_color(){   
    bgcolor = window.GetColorCUI(ColorTypeCUI.background);
    a_color = window.GetColorCUI(ColorTypeCUI.active_item_frame);
    b_color = window.GetColorCUI(ColorTypeCUI.text);
}

get_color();

function on_colors_changed(){
    get_color();
}
// */
//var bgcolor = RGB(19,30,38);
//var a_color = RGB(180,132,7);
//var b_color = RGB(160,160,160);


var ww,wh;
var doc = new ActiveXObject("htmlfile");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");
var script_path = fb.ProfilePath + "\\tmp_Biography\\download\\";
var vbs = "cscript //nologo \"" + script_path + "download.vbs\"";
var tmp_b_path = fb.ProfilePath + "\\tmp_Biography\\";
if(!fso.FolderExists(tmp_b_path)) {fso.CreateFolder(tmp_b_path)};
if(!fso.FolderExists(tmp_b_path + "\\download\\")) {fso.CreateFolder(tmp_b_path + "\\download\\")};
if(!fso.FileExists(tmp_b_path + "\\download\\" + "download.vbs")) {create_download_file()};

load_last_fm_logo();
var logo_img = gdi.Image(tmp_b_path + "\\download\\" + "last_fm_logo.jpg");

var artist, old_artis, filename;

function clean_filename(filename) {
    return filename.replace(/[\/\:\*\?\"\<\>\|\s]/g,'_');
}

var g_img = null;
var files = [], selected = 0;
var abc = window.GetProperty("abc", 1);
var cycle = window.GetProperty("auto cycle (sec)", 60);
var limit = window.GetProperty("download limit",5);
var fsize = window.GetProperty("Font Size", 0);
var p_margin = window.GetProperty("margin: picture", 0);
var t_margin = window.GetProperty("margin: text", 16);
var nocover = window.GetProperty("nocover image", false);
var nocover_path = window.GetProperty("nocover path", "B:\\themes\\DarkOne_v4.0\\Images\\DarkOne.png");
var psize = window.GetProperty("Picture Size", 0);
var select_p_a = window.GetProperty("pictures/albums", 0);
var scrollbar = window.GetProperty("scrollbar", true);
var selection_mode = window.GetProperty("selection mode", 0);
var txt_x = window.GetProperty("txt_x", 0);
var txt_y = window.GetProperty("txt_y", window.Height / 1.4);

var delta_x, delta_y;
var k_down = false;
var text_scroll = false;
var pic_scroll = false;
var sb_down = false;
var sb_scroll = false;
var scrollbar_k;
var posy = 0;
var artist_x, artist_y;
var b_x = 0, b_y = 0;
var text = "";
var s_text = 0;
var string_width;
var strings_array = [];
var b_text_rows = 0;
var b_text_row_height = 0;
var b_text_visable_rows = 0;
var b_text_visable_height = 0;
var b_text_array = [];
var abc_lang = new Array("", "ru/");
var if_not_found = new Array(". . .", ". . .");
var select_p_a_old;
var p_a = new Array("images", "albums");

var metadb;
on_item_focus_change();


function on_paint(gr){   
   !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
    if (window.GetProperty("Font Size") == 0) var x_font = s_font;
    if (window.GetProperty("Font Size") == 1) var x_font = b_font;
    if(fsize > 1){x_font = b_font;}
   
    paint(gr);   

    if(set_cycle){   
        gr.FillSolidRect(0, 0, ww, wh, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));   
        var txt_cycle = cycle == 0 ? "off" : cycle + " sec";   
        set_cycle && gr.GdiDrawText("AUTO CYCLE \n" + txt_cycle, b_font, a_color, 15, 25, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );   
    } else{   
        gr.FillSolidRect(txt_x, txt_y, ww - txt_x, wh - txt_y, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));   
    }   

        gr.GdiDrawText(artist, a_font, RGB(10,21,29), artist_x - 6, artist_y + 1, ww - artist_x, wh, DT_NOPREFIX | DT_LEFT | DT_WORD_ELLIPSIS );   
        gr.GdiDrawText(artist, a_font, a_color, artist_x - 7, artist_y, ww - artist_x, wh, DT_NOPREFIX | DT_LEFT | DT_WORD_ELLIPSIS );

    for (var i = 0; i < b_text_visable_rows; i++) {
//        gr.GdiDrawText(b_text_array[i + s_text], x_font, RGB(10,21,29), b_x - 6, b_y + b_text_row_height * i + 1, ww, wh, DT_NOPREFIX | DT_LEFT );
        gr.GdiDrawText(b_text_array[i + s_text], x_font, b_color, b_x - 7, b_y + b_text_row_height * i, ww, wh, DT_NOPREFIX | DT_LEFT );
    }

        scrollbar && draw_scrollbar(gr);
   
        gr.GdiDrawText("", b_font, b_color, 15, 0, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );
}

function paint(gr){
    g_img = gdi.Image(files[selected]);
    if (!g_img && nocover){
        try {
            g_img = gdi.Image(nocover_path);
        } catch(e) {};
    }
   
    if (g_img){
        var scale_w = (ww - p_margin * 2) / g_img.Width;
        var scale_h = (wh - p_margin * 2) / g_img.Height;
        var scale = Math.min(scale_w, scale_h);
       
        if (files.length > 0){
            g_img = g_img.CreateRawBitmap();
            gr.GdiDrawBitmap(g_img, p_margin, p_margin, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
        } else {
            gr.DrawImage(g_img, p_margin + (ww - g_img.Width * scale) / 2, p_margin, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height, 0, 255);
        }
    }
   
    if (logo_img && files.length == 0 && !nocover){
        gr.DrawImage(logo_img, p_margin, p_margin, logo_img.Width * 0.8, logo_img.Height * 0.8, 0, 0, logo_img.Width, logo_img.Height, 0, 255);   
    }
}

function draw_scrollbar(gr){
    scrollbar_h = b_text_rows > b_text_visable_rows ? b_text_visable_height * (b_text_visable_rows / b_text_rows) + 10: 0;
    scrollbar_y = s_text > 0 ? s_text * scrollbar_k : 0;
    gr.FillSolidRect(ww - 6, b_y, 6, wh*scrollbar_h, RGBA(63, 100, 127, 32));   
    gr.FillSolidRect(ww - 6, b_y + scrollbar_y, 6, scrollbar_h, RGBA(63, 100, 127, 150));
}


function on_playlist_switch() {
    on_item_focus_change();
}

function on_playback_new_track() {
    on_item_focus_change();
}

function on_playback_dynamic_info_track() {
    on_item_focus_change();
}

function on_playback_stop() {
    on_item_focus_change();
}

function on_selection_changed(metadb) {
   on_item_focus_change();
}

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

function Eval(field) {   
    if (!metadb) return;   
    path = fb.Titleformat("%path%").EvalWithMetadb(metadb);   
    return fb.Titleformat("[" + field + "]").EvalWithMetadb(metadb) ? fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb) : fb.TitleFormat("[" + field + "]").Eval(true);   
}   

function on_metadb_changed() {
    if (!metadb) return;   
    artist = Eval("%artist%");
    if (artist != old_artis || select_p_a != select_p_a_old){
        CollectGarbage();
        g_img = null;
        s_text = 0;
        text = "";
        get_b_text_array()       
        get_b_text();
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();       
        old_artis = artist;
        select_p_a_old = select_p_a;
    }
}     

function get_pic(){
    if (window.GetProperty("Picture Size") == 0) var p_s = "500x500";   // "500x500" заменить на "34s", "64s", "174s", "300x300" или "770x0"
    if (window.GetProperty("Picture Size") == 1) var p_s = "";
    if(psize > 1){p_s = "";}
    xmlhttp1 = new ActiveXObject("Microsoft.XMLHTTP");     
    var url1 = ("https://www.last.fm/music/" + encodeURIComponent(artist) + "/+" + p_a[select_p_a]);     
    xmlhttp1.open("GET", url1, true);     
    xmlhttp1.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");     
    xmlhttp1.send();     
    xmlhttp1.onreadystatechange = function () {     
        if (xmlhttp1.readyState == 4) {     
            if (xmlhttp1.status == 200) {     
                doc.open();     
              var div = doc.createElement("div");
              div.innerHTML = xmlhttp1.responsetext;
              var data = div.getElementsByTagName("img");
              var urls = [];
                for (i = 0; i < data.length; i++) {     
                    if (data[i].className == "image-list-image"){       
                        if (data[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/avatar170s") == 0) urls.push(data[i].src.replace("avatar170s", p_s));
                    }       
                    if (data[i].className == "album-grid-album-art"){       
                        if (data[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300") == 0 && data[i].src.indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0) urls.push(data[i].src.replace("300", ""));       
                    }       
                }     
                for (i = 0; i < Math.min(urls.length, limit); i++) {     
                    file = "\"" + tmp_b_path + clean_filename(artist) + "_"  + i + "_" + p_a[select_p_a] + ".jpg" + "\"";     
                    WshShell.Run(vbs + " " + urls[i] + " " + file, false);       
                }     
              doc.close();
            }       
        }     
    }     
}

function get_files_from_dir() {
    if (!artist) return;
    files = [];
    var e = new Enumerator( fso.GetFolder(tmp_b_path).Files );
    while ( !e.atEnd() ) {
        var name = e.item().Name;
        if (name.indexOf(clean_filename(artist)) == 0){
            files.push(tmp_b_path + name);
        }
        e.moveNext();
    }
}

function get_b_text(){
    xmlhttp2 = new ActiveXObject("Microsoft.XMLHTTP");
    var url2 = ("https://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist) + "/+wiki");
    xmlhttp2.open("GET", url2, true);
    xmlhttp2.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    xmlhttp2.send();
    xmlhttp2.onreadystatechange = function () {
        if (xmlhttp2.readyState == 4) {
            if (xmlhttp2.status == 200) {
                doc.open();
                var div = doc.createElement("div");
                div.innerHTML = xmlhttp2.responsetext;
                var data = div.getElementsByTagName("div");
                for (i = 0; i < data.length; i++) {
                    if (data[i].className == "wiki-content") {
                        text = strip_tags(data[i].innerHTML);
                        break;
                    }
                }
                doc.close();
            }
            if (text == "") text = if_not_found[abc];
            get_b_text_array();
        }
    }
}

function strip_tags(t) {
    doc.open();
    var div = doc.createElement("div");
    div.innerHTML = t.replace(/<[Pp][^>]*>/g, "").replace(/<\/[Pp]>/g, "<br>").replace(/\n/g, "<br>");
    var text = div.innerText;
    doc.close();
    return text;
}

function get_b_text_array() {
    if (window.GetProperty("Font Size") == 0) var x_font = s_font;
    if (window.GetProperty("Font Size") == 1) var x_font = b_font;
    if(fsize > 1){x_font = b_font;}
    artist_x = txt_x + t_margin;
    artist_y = txt_y + t_margin/8;
    strings_array = [];
    b_text_array = [];
   
    temp_bmp = gdi.CreateImage(1, 1);
    temp_gr = temp_bmp.GetGraphics();

    b_x = txt_x + t_margin;
    b_y = txt_y + temp_gr.CalcTextHeight("text", a_font) + t_margin/4;

    b_text_row_height = temp_gr.CalcTextHeight("text", x_font)
    string_width = Math.max(ww - b_x - 10, 0);

    if (text) strings_array = temp_gr.EstimateLineWrap(text, x_font, string_width).toArray();

    for (var i = 0; i < strings_array.length; i += 2) {
        b_text_array.push(strings_array[i].replace(/^\s+|\s+$/g, ""));
    }

    b_text_rows = b_text_array.length;
    b_text_visable_rows = Math.round((wh - b_y - 10) / b_text_row_height);
    b_text_visable_height = Math.round(wh - b_y - 10);
   
    temp_bmp.ReleaseGraphics(temp_gr);
    temp_bmp.Dispose();
    temp_gr = null;
    temp_bmp = null;

    if (b_text_visable_rows + s_text > b_text_rows && s_text > 0) {
        s_text = b_text_rows - b_text_visable_rows;
    };
   
    scrollbar_k = b_text_visable_height / b_text_rows;
    window.Repaint();
}

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

    MF_ENABLED = 0x00000000;   
    MF_GRAYED = 0x00000001;   
    MF_SEPARATOR = 0x00000800;   
     
    _menu.AppendMenuItem(MF_ENABLED, i++, "EN text");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "RU text");   
    _menu.CheckMenuRadioItem(1, i, abc + 1);         
    _menu.EnableMenuItem(abc + 1, 1);     

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, i++, "Small font")
    _menu.AppendMenuItem(MF_ENABLED, i++, "Big font")
    _menu.CheckMenuRadioItem(i - 2, i, fsize + 3);         
    _menu.EnableMenuItem(fsize + 3, 1); 

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, i++, "Prefer now playing");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Follow selected track");   
    _menu.CheckMenuRadioItem(i - 2, i , selection_mode + 5);   
    _menu.EnableMenuItem(selection_mode + 5, 1);
       
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Artist pictures");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Albums pictures");   
    _menu.CheckMenuRadioItem(i - 2, i , select_p_a + 7);   
    _menu.EnableMenuItem(select_p_a + 7, 1);

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    var is_artist = artist ? MF_ENABLED : MF_GRAYED;   
    _menu.AppendMenuItem(is_artist, i++, "last.fm Artist");   
     
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, i++, "500x500 pixel pictures")
    _menu.AppendMenuItem(MF_ENABLED, i++, "Original size pictures")
    _menu.CheckMenuRadioItem(i - 2, i, psize + 10);         
    _menu.EnableMenuItem(psize + 10, 1);

//    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, 12, "Image Viewer");

//    if (ShiftDown) {   
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
        _menu.AppendMenuItem(MF_ENABLED, 19, "Reload");   
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
        _menu.AppendMenuItem(MF_ENABLED, 20, "Properties");   
        _menu.AppendMenuItem(MF_ENABLED, 30, "Configure ...");
//    }

    ret = _menu.TrackPopupMenu(x,y);

    switch (ret) {
    case 1:
        abc = 0;
        window.SetProperty("abc", abc);
        s_text = 0;
        text = "";
        get_b_text();
        break;
    case 2:
        abc = 1;
        window.SetProperty("abc", abc);
        s_text = 0;
        text = "";
        get_b_text();
        break;
    case 3:   
        fsize = 0;
        window.SetProperty("Font Size", fsize);   
        s_text = 0;
        text = "";
        get_b_text();
        break; 
    case 4:
        fsize = 1;
        window.SetProperty("Font Size", fsize);   
        s_text = 0;
        text = "";
        get_b_text(); 
        break; 
    case 5:
        selection_mode = 0;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 6:
        selection_mode = 1;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 7:
        select_p_a = 0;
        window.SetProperty("pictures/albums", select_p_a);
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break;
    case 8:
        select_p_a = 1;
        window.SetProperty("pictures/albums", select_p_a);
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break;
    case 9:
        WshShell.run("http://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist));
        break;
    case 10:   
        psize = 0;
        window.SetProperty("Picture Size", psize);   
        p_s = "";
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break; 
    case 11:
        psize = 1;
        window.SetProperty("Picture Size", psize);   
        p_s = "";
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break;     
    case 12:
       if (files[selected] && pic_scroll) WshShell.run( '"' + files[selected] + '"' );
        break;
   
    case 19:
        window.Reload();
        break;
    case 20:
        window.ShowProperties();
        break;   
    case 30:
        window.ShowConfigure();   
        break;   
   }
    _menu.Dispose();   
    return true;   
}   

var timer = window.SetInterval(on_timer, 1000);
var step = 0;
var set_cycle = false;
var dis_timer, dis = 0;

function on_timer(id) {
    step =  set_cycle || cycle == 0 ? 0 : step + 1;
    if (files.length == 0) {get_files_from_dir(); window.Repaint();};
   
    if (cycle > 0 && step >= cycle){
        selected = selected >= files.length - 1 ? 0 : selected = selected + 1;
        window.Repaint();
        step = 0;
    }
}

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

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

var delay = false;

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

function del_files_from_dir() {
    var del_files = [];
    var e = new Enumerator( fso.GetFolder(tmp_b_path).Files );
    while ( !e.atEnd() ) {
        var name = e.item().Name;
        try {
            fso.deleteFile(tmp_b_path + name );
        } catch(e) {};
        e.moveNext();
    }
}

function load_last_fm_logo(){
    if(!fso.FileExists(tmp_b_path + "\\download\\" + "last_fm_logo.jpg")) {
        var url = "https://www.last.fm/static/images/logo_static.png?5b6b42188c40"
        var file = "\"" + tmp_b_path + "\\download\\" + "last_fm_logo.jpg" + "\"";
        WshShell.Run(vbs + " " + url + " " + file, false);
        var url = "https://static-web.last.fm/static/images/favicon.702b239b6194.ico"
        var file = "\"" + tmp_b_path + "\\download\\" + "last_fm_ico.ico" + "\"";
        WshShell.Run(vbs + " " + url + " " + file, false);
    }
}

function create_download_file() {
    try {
        file = fso.CreateTextFile(tmp_b_path + "\\download\\" + "download.vbs" )
       
        var text =   
            "If (WScript.Arguments.Count <> 2) Then" + "\n\r" +   
            "   WScript.Quit" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "url = WScript.Arguments(0)" + "\n\r" +   
            "file = WScript.Arguments(1)" + "\n\r"  + "\n\r" +   

            "Set objFSO = Createobject(" + '"Scripting.FileSystemObject"' + ")" + "\n\r" +   
            "If objFSO.Fileexists(file) Then" + "\n\r" +   
            "   Set objFSO = Nothing" + "\n\r" +
            "   WScript.Quit" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "Set objXMLHTTP = CreateObject(" + '"MSXML2.XMLHTTP"' + ")" + "\n\r" +   
            "objXMLHTTP.open " + '"GET"' + ", url,false" + "\n\r" +   
            "objXMLHTTP.send()" + "\n\r" + "\n\r" +   

            "If objXMLHTTP.Status = 200 Then" + "\n\r" +   
            "   Set objADOStream = CreateObject(" + '"ADODB.Stream"' + ")" + "\n\r" +
            "   objADOStream.Open" + "\n\r" +
            "   objADOStream.Type = 1" + "\n\r" +
            "   objADOStream.Write objXMLHTTP.ResponseBody" + "\n\r" +
            "   objADOStream.Position = 0" + "\n\r" +
            "   objADOStream.SaveToFile file" + "\n\r" +
            "   objADOStream.Close" + "\n\r" +
            "   Set objADOStream = Nothing" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "Set objFSO = Nothing" + "\n\r" +   
            "Set objXMLHTTP = Nothing"   
        ;

        file.WriteLine(text);
        file.Close();
    } catch(e) {};
}

function on_mouse_move(x, y) {
    window.SetCursor(32649);
    if (k_down){
        txt_x = x - delta_x ;
        txt_y = y - delta_y;

        txt_x = txt_x <= 0 ? 0 : txt_x >= ww - 65 ? ww - 65: txt_x;
        txt_y = txt_y <= 0 ? 0 : txt_y >= wh - 65 ? wh - 65: txt_y;
        get_b_text_array();
    }

    text_scroll = x >= txt_x && x < ww - 20 && y  >= txt_y ? true : false;
    sb_scroll =  x > ww - 20 && y  >= txt_y ? true : false;
    pic_scroll = !text_scroll && !sb_scroll ? true : false;

    if (sb_down && scrollbar){
        posy = y + delta_y;
        s_text = y + delta_y >= 0 ? y + delta_y <= (b_text_rows - b_text_visable_rows) * scrollbar_k ? Math.round(posy / scrollbar_k) : b_text_rows - b_text_visable_rows : 0;
        window.Repaint();
    }
}

function on_mouse_wheel(delta) {
    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
   
    if (!delay && pic_scroll && !ShiftDown){
        delay = true;
        fdelay();
        get_files_from_dir();
        if (delta < 0) {selected = selected <= 0 ? files.length - 1 : selected = selected - 1};
        if (delta > 0) {selected = selected >= files.length - 1 ? 0 : selected = selected + 1};

    }
    if (text_scroll && !ShiftDown){
        if (b_text_rows > b_text_visable_rows){
            if (delta < 0) {s_text = b_text_rows - s_text <= b_text_visable_rows ? b_text_rows - b_text_visable_rows : s_text += 1}
            if (delta > 0) {s_text = s_text <= 0 ? 0 : s_text -= 1}
        }
    }
   
    if (set_cycle) {
        if (delta < 0) {cycle = cycle <= 0 ? 0 : cycle - 5;};
        if (delta > 0) {cycle = cycle >= 60 ? 60 : cycle + 5;};
        window.SetProperty("auto cycle (sec)", cycle);
    }
    window.Repaint();
}

function on_mouse_lbtn_down(x,y){
    if (text_scroll){
        k_down = true;
        delta_x = x - txt_x;
        delta_y = y - txt_y;
    }
    if (sb_scroll){
        sb_down = true;
        posy = s_text * scrollbar_k;
        delta_y = posy - y;
    }
}

function on_mouse_lbtn_up(x,y){
    window.SetProperty("txt_x", txt_x);
    window.SetProperty("txt_y", txt_y);
    k_down = false;
    sb_down = false;
}

function on_mouse_lbtn_dblclk (x,y){
    if (text_scroll){
        abc = abc == 1 ? 0 : 1;
        window.SetProperty("abc", abc);
        s_text = 0;
        b_text_array = [];
        text = "";
        get_b_text();
    }
    if (files[selected] && pic_scroll){
        select_p_a = select_p_a == 1 ? 0 : 1;
        window.SetProperty("pictures/albums", select_p_a);
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
    }
   
}

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

function on_size(){
    ww = window.Width;   
    wh = window.Height;
   
    txt_x = window.GetProperty("txt_x");
    txt_y = window.GetProperty("txt_y");

    txt_x = txt_x >= ww - 65 && txt_x >= 0 ? ww - 65 : txt_x;
    txt_y = txt_y >= wh - 65 && txt_y >= 0 ? wh - 65 : txt_y;
   
    get_b_text_array();
}
AHAPXICT M
Автор темы
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #319 AHAPXICT » 17.09.2016, 04:03

Спойлер
DarkOne v3.1
Код: Выделить всё
// ==PREPROCESSOR==
// @name "Biography Text && Picture. www.last.fm"
// @author "kgena_ua"
// @version "23022016-13032016"
// @feature "v1.4"
// @feature "watch-metadb"
// ==/PREPROCESSOR==

// NOTE: "Grab Focus"  It must be enabled: ON

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)); }
function getRed(color) {return ((color >> 16) & 0xff);};
function getGreen(color) {return ((color >> 8) & 0xff);};
function getBlue(color) {return (color & 0xff);};

DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;
DT_WORDBREAK = 0x00000010;
DT_CALCRECT = 0x00000400;
DT_NOPREFIX = 0x00000800;

var a_font = gdi.Font("Imprint MT Shadow+",36, 0);
var s_font = gdi.Font("Times New Roman",16, 1);
var b_font = gdi.Font("Times New Roman",20, 0);
var transparent = 220;

// /*
ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
};

function get_color(){   
    bgcolor = window.GetColorCUI(ColorTypeCUI.background);
    a_color = window.GetColorCUI(ColorTypeCUI.active_item_frame);
    b_color = window.GetColorCUI(ColorTypeCUI.text);
}

get_color();

function on_colors_changed(){
    get_color();
}
// */
//var bgcolor = RGB(19,30,38);
//var a_color = RGB(180,132,7);
//var b_color = RGB(160,160,160);


var ww,wh;
var doc = new ActiveXObject("htmlfile");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");
var script_path = fb.ProfilePath + "\\tmp_Biography\\download\\";
var vbs = "cscript //nologo \"" + script_path + "download.vbs\"";
var tmp_b_path = fb.ProfilePath + "\\tmp_Biography\\";
if(!fso.FolderExists(tmp_b_path)) {fso.CreateFolder(tmp_b_path)};
if(!fso.FolderExists(tmp_b_path + "\\download\\")) {fso.CreateFolder(tmp_b_path + "\\download\\")};
if(!fso.FileExists(tmp_b_path + "\\download\\" + "download.vbs")) {create_download_file()};

load_last_fm_logo();
var logo_img = gdi.Image(tmp_b_path + "\\download\\" + "last_fm_logo.jpg");

var artist, old_artis, filename;

function clean_filename(filename) {
    return filename.replace(/[\/\:\*\?\"\<\>\|\s]/g,'_');
}

var g_img = null;
var files = [], selected = 0;
var abc = window.GetProperty("abc", 1);
var cycle = window.GetProperty("auto cycle (sec)", 60);
var limit = window.GetProperty("download limit",5);
var fsize = window.GetProperty("Font Size", 0);
var p_margin = window.GetProperty("margin: picture", 0);
var t_margin = window.GetProperty("margin: text", 16);
var nocover = window.GetProperty("nocover image", false);
var nocover_path = window.GetProperty("nocover path", "B:\\themes\\DarkOne_v4.0\\Images\\DarkOne v3.1.png");
var psize = window.GetProperty("Picture Size", 0);
var select_p_a = window.GetProperty("pictures/albums", 0);
var scrollbar = window.GetProperty("scrollbar", true);
var selection_mode = window.GetProperty("selection mode", 0);
var txt_x = window.GetProperty("txt_x", 0);
var txt_y = window.GetProperty("txt_y", window.Height / 1.4);

var delta_x, delta_y;
var k_down = false;
var text_scroll = false;
var pic_scroll = false;
var sb_down = false;
var sb_scroll = false;
var scrollbar_k;
var posy = 0;
var artist_x, artist_y;
var b_x = 0, b_y = 0;
var text = "";
var s_text = 0;
var string_width;
var strings_array = [];
var b_text_rows = 0;
var b_text_row_height = 0;
var b_text_visable_rows = 0;
var b_text_visable_height = 0;
var b_text_array = [];
var abc_lang = new Array("", "ru/");
var if_not_found = new Array(". . .", ". . .");
var select_p_a_old;
var p_a = new Array("images", "albums");

var metadb;
on_item_focus_change();


function on_paint(gr){   
   !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
    if (window.GetProperty("Font Size") == 0) var x_font = s_font;
    if (window.GetProperty("Font Size") == 1) var x_font = b_font;
    if(fsize > 1){x_font = b_font;}
   
    paint(gr);   

    if(set_cycle){   
        gr.FillSolidRect(0, 0, ww, wh, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));   
        var txt_cycle = cycle == 0 ? "off" : cycle + " sec";   
        set_cycle && gr.GdiDrawText("AUTO CYCLE \n" + txt_cycle, b_font, a_color, 15, 25, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );   
    } else{   
        gr.FillSolidRect(txt_x, txt_y, ww - txt_x, wh - txt_y, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));   
    }   

        gr.GdiDrawText(artist, a_font, RGB(10,21,29), artist_x - 6, artist_y + 1, ww - artist_x, wh, DT_NOPREFIX | DT_LEFT | DT_WORD_ELLIPSIS );   
        gr.GdiDrawText(artist, a_font, a_color, artist_x - 7, artist_y, ww - artist_x, wh, DT_NOPREFIX | DT_LEFT | DT_WORD_ELLIPSIS );

    for (var i = 0; i < b_text_visable_rows; i++) {
//        gr.GdiDrawText(b_text_array[i + s_text], x_font, RGB(10,21,29), b_x - 6, b_y + b_text_row_height * i + 1, ww, wh, DT_NOPREFIX | DT_LEFT );
        gr.GdiDrawText(b_text_array[i + s_text], x_font, b_color, b_x - 7, b_y + b_text_row_height * i, ww, wh, DT_NOPREFIX | DT_LEFT );
    }

        scrollbar && draw_scrollbar(gr);
   
        gr.GdiDrawText("", b_font, b_color, 15, 0, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );
}

function paint(gr){
    g_img = gdi.Image(files[selected]);
    if (!g_img && nocover){
        try {
            g_img = gdi.Image(nocover_path);
        } catch(e) {};
    }
   
    if (g_img){
        var scale_w = (ww - p_margin * 2) / g_img.Width;
        var scale_h = (wh - p_margin * 2) / g_img.Height;
        var scale = Math.min(scale_w, scale_h);
       
        if (files.length > 0){
            g_img = g_img.CreateRawBitmap();
            gr.GdiDrawBitmap(g_img, p_margin + (ww - g_img.Width * scale) / 2, p_margin, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
        } else {
            gr.DrawImage(g_img, p_margin + (ww - g_img.Width * scale) / 2, p_margin, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height, 0, 100);
        }
    }
   
    if (logo_img && files.length == 0 && !nocover){
        gr.DrawImage(logo_img, p_margin, p_margin, logo_img.Width * 0.8, logo_img.Height * 0.8, 0, 0, logo_img.Width, logo_img.Height, 0, 255);   
    }
}

function draw_scrollbar(gr){
    scrollbar_h = b_text_rows > b_text_visable_rows ? b_text_visable_height * (b_text_visable_rows / b_text_rows) + 10: 0;
    scrollbar_y = s_text > 0 ? s_text * scrollbar_k : 0;
    gr.FillSolidRect(ww - 6, b_y, 6, wh*scrollbar_h, RGBA(63, 100, 127, 32));   
    gr.FillSolidRect(ww - 6, b_y + scrollbar_y, 6, scrollbar_h, RGBA(63, 100, 127, 150));
}


function on_playlist_switch() {
    on_item_focus_change();
}

function on_playback_new_track() {
    on_item_focus_change();
}

function on_playback_dynamic_info_track() {
    on_item_focus_change();
}

function on_playback_stop() {
    on_item_focus_change();
}

function on_selection_changed(metadb) {
   on_item_focus_change();
}

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

function Eval(field) {   
    if (!metadb) return;   
    path = fb.Titleformat("%path%").EvalWithMetadb(metadb);   
    return fb.Titleformat("[" + field + "]").EvalWithMetadb(metadb) ? fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb) : fb.TitleFormat("[" + field + "]").Eval(true);   
}   

function on_metadb_changed() {
    if (!metadb) return;   
    artist = Eval("%artist%");
    if (artist != old_artis || select_p_a != select_p_a_old){
        CollectGarbage();
        g_img = null;
        s_text = 0;
        text = "";
        get_b_text_array()       
        get_b_text();
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();       
        old_artis = artist;
        select_p_a_old = select_p_a;
    }
}     

function get_pic(){
    if (window.GetProperty("Picture Size") == 0) var p_s = "500x500";   // "500x500" заменить на "34s", "64s", "174s", "300x300" или "770x0"
    if (window.GetProperty("Picture Size") == 1) var p_s = "";
    if(psize > 1){p_s = "";}
    xmlhttp1 = new ActiveXObject("Microsoft.XMLHTTP");     
    var url1 = ("https://www.last.fm/music/" + encodeURIComponent(artist) + "/+" + p_a[select_p_a]);     
    xmlhttp1.open("GET", url1, true);     
    xmlhttp1.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");     
    xmlhttp1.send();     
    xmlhttp1.onreadystatechange = function () {     
        if (xmlhttp1.readyState == 4) {     
            if (xmlhttp1.status == 200) {     
                doc.open();     
              var div = doc.createElement("div");
              div.innerHTML = xmlhttp1.responsetext;
              var data = div.getElementsByTagName("img");
              var urls = [];
                for (i = 0; i < data.length; i++) {     
                    if (data[i].className == "image-list-image"){       
                        if (data[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/avatar170s") == 0) urls.push(data[i].src.replace("avatar170s", p_s));
                    }       
                    if (data[i].className == "album-grid-album-art"){       
                        if (data[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300") == 0 && data[i].src.indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0) urls.push(data[i].src.replace("300", ""));       
                    }       
                }     
                for (i = 0; i < Math.min(urls.length, limit); i++) {     
                    file = "\"" + tmp_b_path + clean_filename(artist) + "_"  + i + "_" + p_a[select_p_a] + ".jpg" + "\"";     
                    WshShell.Run(vbs + " " + urls[i] + " " + file, false);       
                }     
              doc.close();
            }       
        }     
    }     
}

function get_files_from_dir() {
    if (!artist) return;
    files = [];
    var e = new Enumerator( fso.GetFolder(tmp_b_path).Files );
    while ( !e.atEnd() ) {
        var name = e.item().Name;
        if (name.indexOf(clean_filename(artist)) == 0){
            files.push(tmp_b_path + name);
        }
        e.moveNext();
    }
}

function get_b_text(){
    xmlhttp2 = new ActiveXObject("Microsoft.XMLHTTP");
    var url2 = ("https://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist) + "/+wiki");
    xmlhttp2.open("GET", url2, true);
    xmlhttp2.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    xmlhttp2.send();
    xmlhttp2.onreadystatechange = function () {
        if (xmlhttp2.readyState == 4) {
            if (xmlhttp2.status == 200) {
                doc.open();
                var div = doc.createElement("div");
                div.innerHTML = xmlhttp2.responsetext;
                var data = div.getElementsByTagName("div");
                for (i = 0; i < data.length; i++) {
                    if (data[i].className == "wiki-content") {
                        text = strip_tags(data[i].innerHTML);
                        break;
                    }
                }
                doc.close();
            }
            if (text == "") text = if_not_found[abc];
            get_b_text_array();
        }
    }
}

function strip_tags(t) {
    doc.open();
    var div = doc.createElement("div");
    div.innerHTML = t.replace(/<[Pp][^>]*>/g, "").replace(/<\/[Pp]>/g, "<br>").replace(/\n/g, "<br>");
    var text = div.innerText;
    doc.close();
    return text;
}

function get_b_text_array() {
    if (window.GetProperty("Font Size") == 0) var x_font = s_font;
    if (window.GetProperty("Font Size") == 1) var x_font = b_font;
    if(fsize > 1){x_font = b_font;}
    artist_x = txt_x + t_margin;
    artist_y = txt_y + t_margin/8;
    strings_array = [];
    b_text_array = [];
   
    temp_bmp = gdi.CreateImage(1, 1);
    temp_gr = temp_bmp.GetGraphics();

    b_x = txt_x + t_margin;
    b_y = txt_y + temp_gr.CalcTextHeight("text", a_font) + t_margin/4;

    b_text_row_height = temp_gr.CalcTextHeight("text", x_font)
    string_width = Math.max(ww - b_x - 10, 0);

    if (text) strings_array = temp_gr.EstimateLineWrap(text, x_font, string_width).toArray();

    for (var i = 0; i < strings_array.length; i += 2) {
        b_text_array.push(strings_array[i].replace(/^\s+|\s+$/g, ""));
    }

    b_text_rows = b_text_array.length;
    b_text_visable_rows = Math.round((wh - b_y - 10) / b_text_row_height);
    b_text_visable_height = Math.round(wh - b_y - 10);
   
    temp_bmp.ReleaseGraphics(temp_gr);
    temp_bmp.Dispose();
    temp_gr = null;
    temp_bmp = null;

    if (b_text_visable_rows + s_text > b_text_rows && s_text > 0) {
        s_text = b_text_rows - b_text_visable_rows;
    };
   
    scrollbar_k = b_text_visable_height / b_text_rows;
    window.Repaint();
}

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

    MF_ENABLED = 0x00000000;   
    MF_GRAYED = 0x00000001;   
    MF_SEPARATOR = 0x00000800;   
     
    _menu.AppendMenuItem(MF_ENABLED, i++, "EN text");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "RU text");   
    _menu.CheckMenuRadioItem(1, i, abc + 1);         
    _menu.EnableMenuItem(abc + 1, 1);     

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, i++, "Small font")
    _menu.AppendMenuItem(MF_ENABLED, i++, "Big font")
    _menu.CheckMenuRadioItem(i - 2, i, fsize + 3);         
    _menu.EnableMenuItem(fsize + 3, 1); 

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, i++, "Prefer now playing");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Follow selected track");   
    _menu.CheckMenuRadioItem(i - 2, i , selection_mode + 5);   
    _menu.EnableMenuItem(selection_mode + 5, 1);
       
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Artist pictures");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Albums pictures");   
    _menu.CheckMenuRadioItem(i - 2, i , select_p_a + 7);   
    _menu.EnableMenuItem(select_p_a + 7, 1);

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    var is_artist = artist ? MF_ENABLED : MF_GRAYED;   
    _menu.AppendMenuItem(is_artist, i++, "last.fm Artist");   
     
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, i++, "500x500 pixel pictures")
    _menu.AppendMenuItem(MF_ENABLED, i++, "Original size pictures")
    _menu.CheckMenuRadioItem(i - 2, i, psize + 10);         
    _menu.EnableMenuItem(psize + 10, 1);

//    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, 12, "Image Viewer");

//    if (ShiftDown) {   
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
        _menu.AppendMenuItem(MF_ENABLED, 19, "Reload");   
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
        _menu.AppendMenuItem(MF_ENABLED, 20, "Properties");   
        _menu.AppendMenuItem(MF_ENABLED, 30, "Configure ...");
//    }

    ret = _menu.TrackPopupMenu(x,y);

    switch (ret) {
    case 1:
        abc = 0;
        window.SetProperty("abc", abc);
        s_text = 0;
        text = "";
        get_b_text();
        break;
    case 2:
        abc = 1;
        window.SetProperty("abc", abc);
        s_text = 0;
        text = "";
        get_b_text();
        break;
    case 3:   
        fsize = 0;
        window.SetProperty("Font Size", fsize);   
        s_text = 0;
        text = "";
        get_b_text();
        break; 
    case 4:
        fsize = 1;
        window.SetProperty("Font Size", fsize);   
        s_text = 0;
        text = "";
        get_b_text(); 
        break; 
    case 5:
        selection_mode = 0;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 6:
        selection_mode = 1;
        window.SetProperty("selection_mode", selection_mode);
        on_item_focus_change();
        break;
    case 7:
        select_p_a = 0;
        window.SetProperty("pictures/albums", select_p_a);
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break;
    case 8:
        select_p_a = 1;
        window.SetProperty("pictures/albums", select_p_a);
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break;
    case 9:
        WshShell.run("http://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist));
        break;
    case 10:   
        psize = 0;
        window.SetProperty("Picture Size", psize);   
        p_s = "";
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break; 
    case 11:
        psize = 1;
        window.SetProperty("Picture Size", psize);   
        p_s = "";
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        break;     
    case 12:
       if (files[selected] && pic_scroll) WshShell.run( '"' + files[selected] + '"' );
        break;
   
    case 19:
        window.Reload();
        break;
    case 20:
        window.ShowProperties();
        break;   
    case 30:
        window.ShowConfigure();   
        break;   
   }
    _menu.Dispose();   
    return true;   
}   

var timer = window.SetInterval(on_timer, 1000);
var step = 0;
var set_cycle = false;
var dis_timer, dis = 0;

function on_timer(id) {
    step =  set_cycle || cycle == 0 ? 0 : step + 1;
    if (files.length == 0) {get_files_from_dir(); window.Repaint();};
   
    if (cycle > 0 && step >= cycle){
        selected = selected >= files.length - 1 ? 0 : selected = selected + 1;
        window.Repaint();
        step = 0;
    }
}

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

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

var delay = false;

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

function del_files_from_dir() {
    var del_files = [];
    var e = new Enumerator( fso.GetFolder(tmp_b_path).Files );
    while ( !e.atEnd() ) {
        var name = e.item().Name;
        try {
            fso.deleteFile(tmp_b_path + name );
        } catch(e) {};
        e.moveNext();
    }
}

function load_last_fm_logo(){
    if(!fso.FileExists(tmp_b_path + "\\download\\" + "last_fm_logo.jpg")) {
        var url = "https://www.last.fm/static/images/logo_static.png?5b6b42188c40"
        var file = "\"" + tmp_b_path + "\\download\\" + "last_fm_logo.jpg" + "\"";
        WshShell.Run(vbs + " " + url + " " + file, false);
        var url = "https://static-web.last.fm/static/images/favicon.702b239b6194.ico"
        var file = "\"" + tmp_b_path + "\\download\\" + "last_fm_ico.ico" + "\"";
        WshShell.Run(vbs + " " + url + " " + file, false);
    }
}

function create_download_file() {
    try {
        file = fso.CreateTextFile(tmp_b_path + "\\download\\" + "download.vbs" )
       
        var text =   
            "If (WScript.Arguments.Count <> 2) Then" + "\n\r" +   
            "   WScript.Quit" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "url = WScript.Arguments(0)" + "\n\r" +   
            "file = WScript.Arguments(1)" + "\n\r"  + "\n\r" +   

            "Set objFSO = Createobject(" + '"Scripting.FileSystemObject"' + ")" + "\n\r" +   
            "If objFSO.Fileexists(file) Then" + "\n\r" +   
            "   Set objFSO = Nothing" + "\n\r" +
            "   WScript.Quit" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "Set objXMLHTTP = CreateObject(" + '"MSXML2.XMLHTTP"' + ")" + "\n\r" +   
            "objXMLHTTP.open " + '"GET"' + ", url,false" + "\n\r" +   
            "objXMLHTTP.send()" + "\n\r" + "\n\r" +   

            "If objXMLHTTP.Status = 200 Then" + "\n\r" +   
            "   Set objADOStream = CreateObject(" + '"ADODB.Stream"' + ")" + "\n\r" +
            "   objADOStream.Open" + "\n\r" +
            "   objADOStream.Type = 1" + "\n\r" +
            "   objADOStream.Write objXMLHTTP.ResponseBody" + "\n\r" +
            "   objADOStream.Position = 0" + "\n\r" +
            "   objADOStream.SaveToFile file" + "\n\r" +
            "   objADOStream.Close" + "\n\r" +
            "   Set objADOStream = Nothing" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "Set objFSO = Nothing" + "\n\r" +   
            "Set objXMLHTTP = Nothing"   
        ;

        file.WriteLine(text);
        file.Close();
    } catch(e) {};
}

function on_mouse_move(x, y) {
    window.SetCursor(32649);
    if (k_down){
        txt_x = x - delta_x ;
        txt_y = y - delta_y;

        txt_x = txt_x <= 0 ? 0 : txt_x >= ww - 48 ? ww - 48: txt_x;
        txt_y = txt_y <= 0 ? 0 : txt_y >= wh - 48 ? wh - 48: txt_y;
        get_b_text_array();
    }

    text_scroll = x >= txt_x && x < ww - 20 && y  >= txt_y ? true : false;
    sb_scroll =  x > ww - 20 && y  >= txt_y ? true : false;
    pic_scroll = !text_scroll && !sb_scroll ? true : false;

    if (sb_down && scrollbar){
        posy = y + delta_y;
        s_text = y + delta_y >= 0 ? y + delta_y <= (b_text_rows - b_text_visable_rows) * scrollbar_k ? Math.round(posy / scrollbar_k) : b_text_rows - b_text_visable_rows : 0;
        window.Repaint();
    }
}

function on_mouse_wheel(delta) {
    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
   
    if (!delay && pic_scroll && !ShiftDown){
        delay = true;
        fdelay();
        get_files_from_dir();
        if (delta < 0) {selected = selected <= 0 ? files.length - 1 : selected = selected - 1};
        if (delta > 0) {selected = selected >= files.length - 1 ? 0 : selected = selected + 1};

    }
    if (text_scroll && !ShiftDown){
        if (b_text_rows > b_text_visable_rows){
            if (delta < 0) {s_text = b_text_rows - s_text <= b_text_visable_rows ? b_text_rows - b_text_visable_rows : s_text += 1}
            if (delta > 0) {s_text = s_text <= 0 ? 0 : s_text -= 1}
        }
    }
   
    if (set_cycle) {
        if (delta < 0) {cycle = cycle <= 0 ? 0 : cycle - 5;};
        if (delta > 0) {cycle = cycle >= 60 ? 60 : cycle + 5;};
        window.SetProperty("auto cycle (sec)", cycle);
    }
    window.Repaint();
}

function on_mouse_lbtn_down(x,y){
    if (text_scroll){
        k_down = true;
        delta_x = x - txt_x;
        delta_y = y - txt_y;
    }
    if (sb_scroll){
        sb_down = true;
        posy = s_text * scrollbar_k;
        delta_y = posy - y;
    }
}

function on_mouse_lbtn_up(x,y){
    window.SetProperty("txt_x", txt_x);
    window.SetProperty("txt_y", txt_y);
    k_down = false;
    sb_down = false;
}

function on_mouse_lbtn_dblclk (x,y){
    if (text_scroll){
        abc = abc == 1 ? 0 : 1;
        window.SetProperty("abc", abc);
        s_text = 0;
        b_text_array = [];
        text = "";
        get_b_text();
    }
    if (files[selected] && pic_scroll){
        select_p_a = select_p_a == 1 ? 0 : 1;
        window.SetProperty("pictures/albums", select_p_a);
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
    }
   
}

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

function on_size(){
    ww = window.Width;   
    wh = window.Height;
   
    txt_x = window.GetProperty("txt_x");
    txt_y = window.GetProperty("txt_y");

    txt_x = txt_x >= ww - 48 && txt_x >= 0 ? ww - 48 : txt_x;
    txt_y = txt_y >= wh - 48 && txt_y >= 0 ? wh - 48 : txt_y;
   
    get_b_text_array();
}

P.S. Пока отбой, заработало по старым путям в скриптах, а эти пока оставлю может пригодится. Сборку обновил до последней версии плеера v1.3.12
AHAPXICT M
Автор темы
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #320 MC Web » 19.09.2016, 21:21

AHAPXICT, приветствую.
Только начал набрасывать плейлист [EX.UA] Best Of VA с лого и связь пропала...
Есть желание подключиться к пополнению ?
Задумка была создать плейлист с популярными композициями известных исполнителей и их фото для отображения в foobar2000, как у радиостанций.
Набирать треки не вручную, а на основе плейлистов, имеющихся уже у них дисков типа: Best Of, Hits и т.п.
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Пред.След.

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