Переключатель срабатывания скрипта для веб страницы #118
-
Используя новую функцию добавления треков в очередь, создал скрипт вставляющий в очередь трек похожий на только что лайкнутый. Успешно протестировал на своем плейлисте дня, а так же в глобальном режиме при воспроизведении любого плейлиста.
В общем все отлично, но минус в том, что есть плейлисты где мне эта фишка нравится, а есть где лучше бы ее не использовать. Поэтому прошу помощи в реализации постоянного переключателя работы скрипта. Так же хочу вставить в условие плейлисты-исключения, в которых скрипт будет отрабатывать всегда, не зависимо от положения переключателя. Последнее через аддон не обязательно, достаточно прописать плейлисты-исключения в коде условия. Заодно вопросик. |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 4 replies
-
Да, при некоторой продолжительной паузе Spotify не отдает такой трек. Кажется, даже если в приложении в плашке он остался. В таком случае function test(){
console.log(Player.getPlayback());
}
У плейбека есть булевый ключ let playback = Player.getPlayback();
if (playback.is_playing){
// играет
} else {
// пауза
}
Получаются следующие режимы, которые будут переключатся на сайте?
Можно полный код текущей функции и блоки сайта если есть. |
Beta Was this translation helpful? Give feedback.
-
Указать пустой массив Поскольку нет обратной связи со страницей, добавил пункт вывода текущего режима в консоль. // launch.html
{
action: 'toggleRecomQueueMode',
title: 'Переключение режима',
forms: [
{
key: 'mode',
select: [
{ value: 'status', label: 'Узнать текущий режим' },
{ value: 'favorite', label: 'Только избранные плейлисты' },
{ value: 'overall', label: 'Любые плейлисты' },
{ value: 'disabled', label: 'Выключить рекомендации' },
]
},
]
}, // обработчик
function toggleRecomQueueMode(values) {
const ACTION_ID = 'ActionRecomQueue';
let state = Helper.readState(ACTION_ID);
if (values.select.mode == 'status') {
return 'Сейчас режим - ' + (state.mode || 'неопределен');
}
state.mode = values.select.mode;
Helper.updateState(ACTION_ID, state);
return 'Режим переключен - ' + state.mode;
} В константу function LastLike() {
const FAVORITE_IDS = ['378MVstJa0dz36h0dYAu1N'];
const FILENAME = 'LastLike.json';
let state = Helper.readState('ActionRecomQueue');
state.mode = state.mode || 'favorite';
let playback = Player.getPlayback();
if (state.mode == 'disabled'
|| playback.isEmpty()
|| !playback.is_playing
|| playback.repeat_state == 'track'
|| playback.context.type != 'playlist'
|| (state.mode == 'favorite' && !FAVORITE_IDS.includes(Helper.parseId(playback.context.uri)))) {
// прервать в ситуации когда нет данных, трек на паузе или повторе, играет не плейлист, не соответствие режима
return;
}
let savedTracks = Source.getSavedTracks();
let history = RecentTracks.get();
let wowTracks = Source.getPlaylistTracks('WOW', '378MVstJa0dz36h0dYAu1N'); // получение и обработка интересного трека
Selector.keepFirst(wowTracks, 1);
let craftedTracks = Source.craftTracks(wowTracks);
Order.sort(craftedTracks, 'meta.popularity', 'desc');
Filter.matchExcept(craftedTracks, 'mix|club|radio|edit|live|karaoke');
Filter.removeTracks(craftedTracks, savedTracks);
Filter.removeTracks(craftedTracks, history);
Filter.rangeDateRel(history);
Filter.removeArtists(craftedTracks, history);
Filter.removeUnavailable(craftedTracks);
Filter.dedupArtists(craftedTracks);
Selector.keepFirst(craftedTracks, 3); // мини радио по интересному треку
Playlist.saveWithReplace({ id: '378MVstJa0dz36h0dYAu1N', name: 'WOW', public: false, tracks: [] });
Selector.keepFirst(savedTracks, 10);
let recentLikes = Selector.sliceFirst(savedTracks, 5);
let cacheLike = Cache.read(FILENAME);
Filter.removeTracks(recentLikes, cacheLike);
Cache.write(FILENAME, savedTracks);
Filter.replaceWithSimilar(recentLikes, Source.getSavedTracks(), RecentTracks.get()); // замена лайков на похожие треки
Combiner.push(craftedTracks, recentLikes); // мини радио + замена недавних лайков
Filter.dedupArtists(craftedTracks);
craftedTracks.forEach(t => Player.addToQueue(t)); // добавление в текущую очередь
} |
Beta Was this translation helpful? Give feedback.
Указать пустой массив
[]
дляtracks
вsaveWithReplace
Поскольку нет обратной связи со страницей, добавил пункт вывода текущего режима в консоль.