-
Вопрос состоит из двух. Например реализуема ли задача, удаления из играющего плейлиста уже проигранных треков, т.е. тех которые находятся перед активным треком? |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 8 replies
-
Даже если Last.fm сохранит оригинальное название, Spotify способен подменить тоже, ведь идет обратный поиск. Плюс никто баги не отменял. ilyal уже отловил парочку за эти дни) Обновив код библиотеки и права доступа, можно в обоих вопросах. Остается только на практике посмотреть мешается ли релинк в этом случае. От этого зависит как искать трек. И насколько стабильно вообще работает, учитывая недавний сбой получения истории. В let playback = RecentTracks.getPlayback();
let track = playback.item; Для парсинга id понадобится Helper, который есть у пользователей управления с телефона. let playback = RecentTracks.getPlayback();
if (playback.isEmpty() || playback.context.type != 'playlist' || playback.shuffle_state || playback.repeat_state == 'track') {
// прервать в ситуации когда нет данных, играет не плейлист, есть случайная перемешка или повтор трека
return;
}
let playlistId = Helper.parseId(playback.context.uri);
let playlistTracks = Source.getPlaylistTracks('', playlistId);
let index = playlistTracks.findIndex(pt => pt.id == playback.item.id);
Selector.keepAllExceptFirst(playlistTracks, index > 0 ? index : 0); Для удаления играющего трека тоже, достаточно прибавить единицу к индексу Selector.keepAllExceptFirst(playlistTracks, index + 1); |
Beta Was this translation helpful? Give feedback.
-
В связи с активным использованием разных устройств и переключением между ними, с помощью запуска Таскером скрипта типа function Auto() {
const SMARTIFY_ID = '74uSA9FulwvWqVSi7mxWyQ';
const DEVICE_ID = 'a051d9d7378f1ca083d9def8880bdd719cd37af0';
let playback = Player.getPlayback();
if (playback.isEmpty()) {
Player.resume({ deviceId: DEVICE_ID, context_uri: `spotify:playlist:${SMARTIFY_ID}` });
} else {
Player.transferPlayback(DEVICE_ID, true);
}
} возникла необходимость в некоторой коррекции скрипта из этой темы. function Smartify() {
const ACTION_ID = 'ActionCleanPlaylist';
const PLAYLIST_ID = '74uSA9FulwvWqVSi7mxWyQ';
let state = Helper.readState(ACTION_ID);
if (!state.hasOwnProperty('lastPlayingTrack')) {
state.lastPlayingTrack = {};
}
let playback = Player.getPlayback();
if (playback.isEmpty()
|| !playback.context.uri.includes(PLAYLIST_ID)
|| playback.item.id == state.lastPlayingTrack.id
|| playback.repeat_state == 'track'
|| playback.shuffle_state) {
return;
} else {
let temp = [playback.item];
Cache.compressTracks(temp);
state.lastPlayingTrack = temp[0];
Helper.updateState(ACTION_ID, state);
}
let playlistTracks = Source.getPlaylistTracks('', PLAYLIST_ID);
let index = playlistTracks.findIndex(pt => pt.id == playback.item.id);
Selector.keepAllExceptFirst(playlistTracks, index > 0 ? index : 0); // треки с текущим и далее
let Smartify = Cache.read('Smartify.json'); // получение плейлиста-донора
Combiner.push(playlistTracks, Smartify); // остаток + треки из плейлиста-донора
Selector.keepFirst(playlistTracks, 30);
Filter.removeTracks(Smartify, playlistTracks);
Cache.write('Smartify.json', Smartify); // запись в кеш остатка плейлиста-донора
let Juice = Cache.read('Juice.json'); // получение и добавление в кэш проигранных треков плейлиста лучших треков
Filter.removeTracks(Juice, playlistTracks, true);
Cache.append('OldJuice.json', Juice, 'begin');
let Minions = Cache.read('Minions.json'); // получение и добавление в кэш проигранных избранных треков любимых артистов
Filter.removeTracks(Minions, playlistTracks, true);
Cache.append('OldMinions.json', Minions, 'begin');
let UpdTime = 'Обновлено в ' + new Date().toTimeString().substring(0, 5);
Playlist.saveWithReplace({ id: '74uSA9FulwvWqVSi7mxWyQ', name: 'Smartify', description: UpdTime, public: false, tracks: playlistTracks });
} Скрипт постоянно отрезает из плейлиста Smartify уже проигранные треки. Это нужно в основном для того, чтобы в случае переключения/включения другого устройства, при отсутствии плэйбэка запускать плейлист Smartify, с трека игравшего последним. Но по условию скрипт не всегда обрезает плейлист. Например в момент срабатывания триггера играл трек не из плейлиста, а из очереди воспроизведения. Или вообще плейлист стоит на паузе и/или отсутствует плэйбек. Можно ли как-то модернизировать скрипт, чтобы он отрезал проигранные треки до последнего запомненного трека (я так понимаю он пишется в кэш?) в любом случае? |
Beta Was this translation helpful? Give feedback.
Даже если Last.fm сохранит оригинальное название, Spotify способен подменить тоже, ведь идет обратный поиск. Плюс никто баги не отменял. ilyal уже отловил парочку за эти дни)
Обновив код библиотеки и права доступа, можно в обоих вопросах. Остается только на практике посмотреть мешается ли релинк в этом случае. От этого зависит как искать трек. И насколько стабильно вообще работает, учитывая недавний сбой получения истории.
В
1.4.9
заменил функциюgetPlayingTrack
на getPlayback. Предыдущий вариант давал лишь трек, новый принесет еще и контекст плеера. На случай если кто-то использовалgetPlayingTrack
, достать трек уgetPlayback
можно так…