AIMP Forum

AIMP for PC => Дополнения / Addons => Разработка / Development => Topic started by: DarkDrawKill on October 22, 2025, 16:47:39

Title: Привязка между IAIMPMenuItem'ов
Post by: DarkDrawKill on October 22, 2025, 16:47:39
Всё таки решил вернуться к созданию плагинов
Создал кнопочку в меню остановки воспроизведения но появился вопрос как привязать эту кнопочку к тем двум выше чтобы они совместно работали (как я понял это чекбокс) а также совместно выключались
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=76625.0;attach=75792)

пс. кодинг происходит на cpp с помощью mingw-w64 и сборки meson
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: Artem on October 22, 2025, 16:54:35
как привязать эту кнопочку к тем двум выше чтобы они совместно работали

не очень понимаю, что именно нужно
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: DarkDrawKill on October 22, 2025, 17:05:27
не очень понимаю, что именно нужно
Нужно, чтобы моя тестовая кнопка работала также как две выше (тоесть они должны переключаться между собой и включаться/выключаться совместно при остановке воспроизведения)
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: Artem on October 22, 2025, 17:18:45
тоесть они должны переключаться между собой и включаться/выключаться совместно при остановке воспроизведения

Эти две кнопки зависят от состояния настройки AIMP_MSG_PROPERTY_ACTION_ON_END_OF_TRACK.
Т.е. вам нужно при активации вашего пункта меню сбрасывать настройку AIMP_MSG_PROPERTY_ACTION_ON_END_OF_TRACK в 0, и, наоборот, при изменении AIMP_MSG_PROPERTY_ACTION_ON_END_OF_TRACK в значение отличное от 0 деактивировать пункт меню
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: DarkDrawKill on October 22, 2025, 17:21:55
Эти две кнопки зависят от состояния настройки AIMP_MSG_PROPERTY_ACTION_ON_END_OF_TRACK.
Я делаю плагин для остановки воспроизведения после проигрывания очереди насколько костыльно это будет выглядеть в плане реализации

upd: придумал только создать некий AIMP_MSG_PROPERTY_ACTION_ON_END_OF_QUEUE (имя я конечно изменю под стандарт во избежание будущих конфликтов) и следить за их изменениями (типо если ..._OF_TRACK не равен нулю занулять ..._OF_QUEUE и наоборот)

upd: ну или задействовать другое число в данном свойстве но тогда конфликтов в будущем не избежать
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: DarkDrawKill on October 22, 2025, 19:55:26
Ну я чёто там наковырял
Создал ультимативный ActionEvent который берёт лямбду и привязал его к Action и уже его к MenuItem (ничего не работает :)))

исходники добавил во вложение

upd: не работает потому что он не может взять интерфейс (понял что реализация неудачная получилась пришлось перерефакторить)
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: Artem on October 22, 2025, 22:27:00
Я делаю плагин для остановки воспроизведения после проигрывания очереди насколько костыльно это будет выглядеть в плане реализации

не вижу причин для костылей.

upd: придумал только создать некий AIMP_MSG_PROPERTY_ACTION_ON_END_OF_QUEUE (имя я конечно изменю под стандарт во избежание будущих конфликтов) и следить за их изменениями (типо если ..._OF_TRACK не равен нулю занулять ..._OF_QUEUE и наоборот)

upd: ну или задействовать другое число в данном свойстве но тогда конфликтов в будущем не избежать

Делать свое публичное свойство не нужно, оно будет чисто для вас, внутри вашего плагина.
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: DarkDrawKill on October 23, 2025, 18:45:47
Т.е. вам нужно при активации вашего пункта меню сбрасывать настройку AIMP_MSG_PROPERTY_ACTION_ON_END_OF_TRACK в 0, и, наоборот, при изменении AIMP_MSG_PROPERTY_ACTION_ON_END_OF_TRACK в значение отличное от 0 деактивировать пункт меню
Я сделал подобным образом
только при установки данного свойства мой хук улетал оказывается что нельзя передавать как параметр NULL (я думал он будет ставить на занчение по умолчанию) пришлось делать статическую переменную которая просто имеет значение 0

upd: проблема была в хуке :-[
он просто не обрабатывал nullptr который я же и посылал
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: Artem on October 23, 2025, 20:00:25
как параметр NULL (я думал он будет ставить на занчение по умолчанию)

Null не является допустимым аргументом
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: DarkDrawKill on October 23, 2025, 20:06:16
Null не является допустимым аргументом
Возможно
я использовал
Code: [Select]
MessageDispatcherService->Send(AIMP_MSG_PROPERTY_ACTION_ON_END_OF_TRACK, AIMP_MSG_PROPVALUE_SET, nullptr);и на удивление это работает
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: DarkDrawKill on October 23, 2025, 21:20:25
Появилась дилемма решить которую я не могу уже какое время

У меня кнопки привязаны к событиям AIMP_MSG_EVENT_PLAYER_STATE для включение/выключение доступности кнопок при остановке/воспроизведении трека, а также AIMP_MSG_EVENT_STREAM_END чтобы производить остановку воспроизведение после окончание очереди (проверяется интерфейсом IAIMPPlaylistQueue)
когда трек заканчивается обрабатываются события:

это приводит к тому что мои кнопки становятся недоступны (переменная отвечающая за режим обнуляется) и плагин ничего не делает
вопрос как можно обработать STREAM_END избежав PLAYER_STATE с STOPPED?
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: Artem on October 24, 2025, 08:03:22
переменная отвечающая за режим обнуляется

а зачем она обнуляется?
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: DarkDrawKill on October 24, 2025, 08:33:11
а зачем она обнуляется?

При нажатии на кнопку "остановки" экшены блокируются а также отключаются кнопки (их стиль становится NORMAL и обнуляется режим) как это происходит с двумя оригинальными кнопками
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: Artem on October 24, 2025, 08:41:21
При нажатии на кнопку "остановки" экшены блокируются а также отключаются кнопки (их стиль становится NORMAL и обнуляется режим) как это происходит с двумя оригинальными кнопками

Да, но оригинальные кнопки влияют на текущий трек, а не на группу треков (очередь). КМК ваша кнопка должна отключаться при очистке очереди, а не при завершении трека.
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: DarkDrawKill on October 24, 2025, 18:32:00
КМК ваша кнопка должна отключаться при очистке очереди, а не при завершении трека.
Да я справился (забыл что у AIMP_MSG_EVENT_STREAM_END есть параметр, где можно узнать об окончании очереди)
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: Artem on October 24, 2025, 19:07:42
Да я справился (забыл что у AIMP_MSG_EVENT_STREAM_END есть параметр, где можно узнать об окончании очереди)

Да, и это тоже 👍
Title: Re: Привязка между IAIMPMenuItem'ов
Post by: DarkDrawKill on October 24, 2025, 19:50:52
Не забываемый экспириенс
Я всё таки закончил написание плагина до готовой стабильной (наверное) версии
Оставлю его тут с исходниками если кому-то и нужен будет перезалью в боард с плагинами