Немного доработать скрипт

Список разделов Аудиоплеер foobar2000 Есть вопрос!

Описание: У вас проблемы с foobar2000 и вам необходима помощь? Спрашивайте здесь!
Правила раздела: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть. Подробно описывайте проблему. Не забывайте указать версию плеера, название сборки, по возможности добавить скриншоты проблемы.

Сообщение #1 RoxMarty » 09.01.2023, 04:06

Приветствую всех.

Занялся для себя созданием простых кнопочек для быстрого выполнения желаемых команд (чтоб не лазить по меню постоянно).

За основу взял код со сборки DarkOne Additional Buttons Panel:

Код: Выделить всё
// ==PREPROCESSOR==
// @name "DarkOne Additional Buttons Panel"
// @version "3.0"
// @author "tedGo"
// @import "%fb2k_path%themes\DarkOne\Others\WSH Scripts\DO Global Script.js"
// @import "%fb2k_path%themes\DarkOne\Others\WSH Scripts\DO Global Button Script.js"
// ==/PREPROCESSOR==

window.MinWidth = window.MaxWidth = 200;

// ----- CREATE BUTTONS ---------------------------------------------
var imgPath = configPath + "Buttons\\Control\\";

Buttons.a = new Button(63, 5, 57, 14, {normal: imgPath + "AddOnRight.png", hover: imgPath + "AddOnRightMH.png"}, function(){fb.RunContextCommand("Properties");});
Buttons.b = new Button(5, 5, 60, 14, {normal: imgPath + "AddOnLeft.png", hover: imgPath + "AddOnLeftMH.png"}, function(){fb.RunMainMenuCommand("View/ELPlaylist/Refresh");});

Buttons.c = new Button(5, 25, 58, 14, {normal: imgPath + "AddOnLeft.png", hover: imgPath + "AddOnLeftMH.png"}, function(){fb.RunContextCommand("Automatically analyse BPMs");});
Buttons.d = new Button(63, 25, 57, 14, {normal: imgPath + "AddOnRight.png", hover: imgPath + "AddOnRightMH.png"}, function(){fb.RunContextCommand("Dynamic Range Meter");});

Buttons.e = new Button(170, 5, 60, 14, {normal: imgPath + "AddOnAlone.png", hover: imgPath + "AddOnAloneMH.png"}, function(){fb.RunContextCommand("Tagging/Scripts/[CDM]");});
Buttons.f = new Button(170, 25, 60, 14, {normal: imgPath + "AddOnAlone.png", hover: imgPath + "AddOnAloneMH.png"}, function(){fb.RunContextCommand("Tagging/Scripts/[CDS]");});

Buttons.g = new Button(270, 5, 60, 14, {normal: imgPath + "AddOnAlone.png", hover: imgPath + "AddOnAloneMH.png"}, function(){fb.RunContextCommand("Convert/WAV here");});
Buttons.h = new Button(270, 25, 60, 14, {normal: imgPath + "AddOnAlone.png", hover: imgPath + "AddOnAloneMH.png"}, function(){fb.RunContextCommand("Convert/MP3 here");});

Buttons.i = new Button(370, 5, 60, 14, {normal: imgPath + "AddOnAlone.png", hover: imgPath + "AddOnAloneMH.png"}, function(){fb.RunContextCommand("Convert/ED FLAC [for BEST]");});
Buttons.j = new Button(370, 25, 60, 14, {normal: imgPath + "AddOnAlone.png", hover: imgPath + "AddOnAloneMH.png"}, function(){fb.RunContextCommand("Convert/ED MP3 [for BEST]");});

Buttons.k = new Button(470, 5, 85, 14, {normal: imgPath + "AddOnAlone.png", hover: imgPath + "AddOnAloneMH.png"}, function(){fb.RunMainMenuCommand("Album List");});




// ----- DRAW -------------------------------------------------------
function on_paint(gr) {

   buttonsDraw(gr);

    gr.GdiDrawText("REFRESH", btn_font, ui_btntxtcol, 5, 6, 60, 10, 33);
    gr.GdiDrawText("PROPERTIES", btn_font, ui_btntxtcol, 66, 6, 54, 10, 32);
 
    gr.GdiDrawText("BPM", btn_font, ui_btntxtcol, 25, 26, 54, 10, 32);
    gr.GdiDrawText("DRM", btn_font, ui_btntxtcol, 44, 26, 54, 10, 34);

    gr.GdiDrawText("...[CDM]", btn_font, ui_btntxtcol, 170, 6, 60, 10, 33);
    gr.GdiDrawText("...[CDS]", btn_font, ui_btntxtcol, 170, 26, 60, 10, 33);

    gr.GdiDrawText("...►[WAV]", btn_font, ui_btntxtcol, 270, 6, 60, 10, 33);
    gr.GdiDrawText("...►[MP3]", btn_font, ui_btntxtcol, 270, 26, 60, 10, 33);
   
    gr.GdiDrawText("ED ►[FLAC]", btn_font, ui_btntxtcol, 370, 6, 60, 10, 33);
    gr.GdiDrawText("ED ►[MP3]", btn_font, ui_btntxtcol, 370, 26, 60, 10, 33);
   
    gr.GdiDrawText("ALBUM LIST", btn_font, ui_btntxtcol, 470, 6, 54, 10, 34);
   

   
}


Практически всё работает как нужно, но есть проблемы:

1) Не всё удаётся "вынуть" из контекстного меню (RunContextCommand), например, ничего из контекстного меню Legacy Commands (unsorted) - может там какой-то другой код прописан, я не знаю...

Но главная проблема:

2) Выполнение кода (конвертирование, тегирование и т.п. - см. код выше) действует только на текущий (проигрываемый) трек, но никак не на выделение нужного блока. При ручном выделении (равно как и по горячим клавишам) и вызова соответствующих команд из контекстного меню - всё работает как нужно.

Поможете доработать код, чтоб решить хотя бы главную проблему?

P.S. Добавляю через WSH Scripts (Columns UI)
foobar2000 v2.0 beta 22 [x86]
RoxMarty В сети
Автор темы
Репутация: 1
С нами: 13 лет 7 месяцев

Сообщение #2 Azaza » 09.01.2023, 04:38

RoxMarty:Выполнение кода (конвертирование, тегирование и т.п. - см. код выше) действует только на текущий (проигрываемый) трек, но никак не на выделение нужного блока. При ручном выделении (равно как и по горячим клавишам) и вызова соответствующих команд из контекстного меню - всё работает как нужно.
Тут дело даже не в скрипте - https://hydrogenaud.io/index.php/topic,121473.0.html
Аудиофилия - это болезнь,поражающая головной мозг.Набор профилактически-превентивных мер против аудиофилии крайне скуден - техническое образование, умение мыслить логически и наличие здравого смысла.
Azaza M
Аватара
Репутация: 318
С нами: 6 лет 4 месяца

Сообщение #3 kutuzof » 09.01.2023, 11:05

RoxMarty:действует только на текущий (проигрываемый) трек, но никак не на выделение нужного блока
Код: Выделить всё
function(){fb.RunContextCommandWithMetadb("Dynamic Range Meter", plman.GetPlaylistSelectedItems(plman.ActivePlaylist))}
kutuzof M
Аватара
Возраст: 35
Откуда: Орёл (Россия)
Репутация: 226
С нами: 6 лет 4 месяца

Сообщение #4 imfam » 09.01.2023, 12:00

RoxMarty, посмотри как у меня сделано: скрипты на панелях Tools и Service.
Моя сборка: http://d9819506.bget.ru/foobar_my.html
imfam M
Откуда: Германия
Репутация: 25
С нами: 9 лет 8 месяцев

Сообщение #5 RoxMarty » 09.01.2023, 15:47

Всем спасибо за ответы!
kutuzof, благодарю. Идеально!
foobar2000 v2.0 beta 22 [x86]
RoxMarty В сети
Автор темы
Репутация: 1
С нами: 13 лет 7 месяцев

Сообщение #6 RoxMarty » 29.01.2023, 18:43

Прошу помощи ещё немного доработать.

Есть две разные кнопки:

Код: Выделить всё
Buttons.e = new Button(145, 5, 45, 26, {normal: imgPath + "CDM.png", hover: imgPath + "CDM+.png"}, function(){fb.RunContextCommandWithMetadb("Tagging/Scripts/[CDM]", plman.GetPlaylistSelectedItems(plman.ActivePlaylist))});

+

Код: Выделить всё
Buttons.d = new Button(110, 5, 30, 45, {normal: imgPath + "UPdate.png", hover: imgPath + "UPdate+.png"}, function(){fb.RunMainMenuCommand("View/ELPlaylist/Refresh")});

Как можно объединить эти функционалы в одну кнопку последовательным автовыполнением? Чтоб не приходилось запускать вторую кнопку отдельно после первой.
foobar2000 v2.0 beta 22 [x86]
RoxMarty В сети
Автор темы
Репутация: 1
С нами: 13 лет 7 месяцев

Сообщение #7 RoxMarty » Вчера, 20:59

Пробовал по всякому, никак не срабатывает после первой команды вторая ("обновление"):
Код: Выделить всё
Buttons.e = new Button(145, 5, 45, 26, {normal: imgPath + "CDM.png", hover: imgPath + "CDM+.png"}, function(){fb.RunContextCommandWithMetadb("Tagging/Scripts/[CDM]", plman.GetPlaylistSelectedItems(plman.ActivePlaylist))}, function(){fb.RunMainMenuCommand("View/ELPlaylist/Refresh")}  );
foobar2000 v2.0 beta 22 [x86]
RoxMarty В сети
Автор темы
Репутация: 1
С нами: 13 лет 7 месяцев

Сообщение #8 kutuzof » Вчера, 22:45

RoxMarty, попробуй так:
Код: Выделить всё
Buttons.e = new Button(145, 5, 45, 26, {normal: imgPath + "CDM.png", hover: imgPath + "CDM+.png"}, function(){fb.RunContextCommandWithMetadb("Tagging/Scripts/[CDM]",plman.GetPlaylistSelectedItems(plman.ActivePlaylist)); fb.RunMainMenuCommand("View/ELPlaylist/Refresh");}, "");
kutuzof M
Аватара
Возраст: 35
Откуда: Орёл (Россия)
Репутация: 226
С нами: 6 лет 4 месяца

Сообщение #9 RoxMarty » Вчера, 23:11

kutuzof,
К сожалению, всё так же, отрабатывает только первая команда...
Быть может нужно сделать что-то одно из двух:

1) выполнить вторую команду только после выполнения первой
или
2) поставить паузу (например, в секунду) перед выполнением второй команды (может, не успевает отрабатывать первая команда, там же тег прописывается)

Есть такие возможности?
foobar2000 v2.0 beta 22 [x86]
RoxMarty В сети
Автор темы
Репутация: 1
С нами: 13 лет 7 месяцев

Сообщение #10 kutuzof » 44 минуты назад

RoxMarty:всё так же, отрабатывает только первая команда...
Отрабатывают обе команды, просто (как вы написали) первая не успевает записать тег.
RoxMarty:поставить паузу (например, в секунду) перед выполнением второй команды
RoxMarty:Есть такие возможности?
Не могу сказать :-)
kutuzof M
Аватара
Возраст: 35
Откуда: Орёл (Россия)
Репутация: 226
С нами: 6 лет 4 месяца


Вернуться в Есть вопрос!