Возобновление воспроизведения с ранее запомненного места #216
-
Почему-то ни когда не рассматривал функцию resume Практически, хотелось бы иметь два скрипта-кнопки. |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 56 replies
-
Для работы с плеером нужна подписка. У меня нет, поэтому проверить не могу. Но что-то вроде того: function savePlayback() {
let playback = Player.getPlayback()
if (!playback.isEmpty() && playback.context && playback.context.uri) {
let tracks = Source.getPlaylistTracks('', Helper.parseId(playback.context.uri))
playback.itemPosition = tracks.findIndex(t => t.id == playback.item.id)
Helper.updateState('last_saved_playback', playback)
}
}
function resumePlayback() {
let playback = Helper.readState('last_saved_playback')
Player.resume({
context_uri: playback.context.uri,
position_ms: playback.progress_ms,
offset: { "position": playback.itemPosition }
})
} Кнопки для веб страницы // launch.html
{
action: 'savePlayback',
title: 'Сохранить плейбэк'
},
{
action: 'resumePlayback',
title: 'Восстановить плейбэк'
}, Body для таскера {"function":"savePlayback"}
{"function":"resumePlayback"} |
Beta Was this translation helpful? Give feedback.
-
Чтобы не заводить отдельную тему, продолжу здесь, т.к. корни того что мне нужно растут как раз отсюда. Хотел самостоятельно поменять логику запуска радио и возврата из него к ранее игравшему треку плейлиста. Более того, попытался это вставить в другой давно используемый скрипт. В общем, как и ожидалось, со всеми этими проверками условий и плейбэками, окончательно запутался и мой франкенштейн не работает. function LastLike() {
track = Player.getPlayback().item;
let newLike = [track];
Library.checkFavoriteTracks(newLike);
if (!newLike[0].isFavorite) {
Library.saveFavoriteTracks(newLike);
Cache.append('SavedTracks.json', newLike, 'begin');
Selector.keepFirst(newLike, 1);
Library.saveFavoriteTracks(newLike);
}
const FAVORITE_IDS = ['74uSA9FulwvWqVSi7mxWyQ', '6G6y4MozfbuDLEVt2azMa6', '6D15bPbYiqMJkleBs3sMvc'];
let state = Helper.readState('ActionRecomQueue');
state.mode = state.mode || 'favorite';
let playback = Player.getPlayback();
if (state.mode == 'disabled'
|| playback.isEmpty()
|| (state.mode == 'favorite' && !FAVORITE_IDS.includes(Helper.parseId(playback.context.uri)))) {
return;
}
let history = RecentTracks.get(5000);
Filter.rangeDateRel(history, 30);
let BigSmartify = Cache.read('Smartify.json');
let OldLike = Cache.read('OldLike.json');
Filter.removeTracks(OldLike, newLike);
if (OldLike.length == 0) {
Filter.replaceWithSimilar({
origin: newLike,
replace: [history, BigSmartify, newLike],
isRemoveOriginArtists: true,
count: 5
});
newLike.forEach(t => Player.addToQueue(t));
Cache.append('SavedTracks.json', newLike, 'begin');
return;
}
Cache.write('OldLike.json', newLike);
Filter.replaceWithSimilar({
origin: newLike,
replace: [history, BigSmartify, newLike],
isRemoveOriginArtists: true,
});
newLike.forEach(t => Player.addToQueue(t));
Cache.append('SavedTracks.json', newLike, 'begin');
}
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 disLike() {
let playback = Player.getPlayback();
if (playback.isEmpty()
|| !playback.context
|| playback.repeat_state == 'track') {
Player.next();
return;
}
track = Player.getPlayback().item;
let disLike = [track];
Library.deleteFavoriteTracks(disLike);
Player.next();
} Скрипт запускаю горячей кнопкой через Таскер. При первом нажатии трек лайкается и в очередь вставляется похожий. При втором нажатии пока играет тот же трек, вставляется очередь из пяти похожих треков. Так же есть переключатель режимов работы скрипта - всегда, с избранными плейлистами и никогда. И еще небольшой скриптик дизлайка, для второй горячей кнопки. А теперь вместо куска вставки в очередь пяти треков (когда горячая кнопка нажимается повторно), хочу вставить запуск этого "пустого" радио. В данный момент оно выглядит так: function SwitchRadio() {
const PLAYBACK_STATE = 'last_saved_playback'
let playback = Player.getPlayback()
if (!playback.isEmpty() && playback.context && playback.context.type == 'playlist') {
savePlayback(playback)
playRadio(playback)
} else {
resumePlayback()
}
function playRadio(playback) {
let radioTracks = [playback.item]
Library.checkFavoriteTracks(radioTracks);
if (!radioTracks[0].isFavorite) {
Library.saveFavoriteTracks(radioTracks);
Cache.append('SavedTracks.json', radioTracks, 'begin');
Selector.keepFirst(radioTracks, 1);
Library.saveFavoriteTracks(radioTracks);
}
let seed = Selector.sliceCopy(radioTracks);
let historyTracks = RecentTracks.get(3000);
let BigSmartify = Cache.read('Smartify.json');
Filter.replaceWithSimilar({
origin: radioTracks,
replace: historyTracks, BigSmartify,
isRemoveOriginArtists: true,
count: 30
});
if (radioTracks.length < 10) {
let radioTracks = Source.craftTracks(seed);
Filter.removeTracks(radioTracks, historyTracks);
Filter.removeTracks(radioTracks, BigSmartify);
Selector.keepRandom(radioTracks, 30);
}
Filter.matchExcept(radioTracks, 'mix|club|radio|edit|live|karaoke');
Combiner.push(seed, radioTracks);
Filter.dedupArtists(seed);
Selector.keepFirst(seed, 20);
Player.resume({
tracks: seed,
position_ms: playback.progress_ms,
})
}
function savePlayback(playback) {
let tracks = Source.getPlaylistTracks('', Helper.parseId(playback.context.uri))
playback.itemPosition = tracks.findIndex(t => t.id == playback.item.id)
Helper.updateState(PLAYBACK_STATE, playback)
}
function resumePlayback() {
let playback = Helper.readState(PLAYBACK_STATE)
if (playback.isEmpty()) {
return
}
Player.resume({
context_uri: playback.context.uri,
offset: { "position": playback.itemPosition + 1 } // следующий трек
})
Helper.updateState(PLAYBACK_STATE, {})
}
} Но только чтобы радио только запускалось при повторном нажатии горячей кнопки. А вот чтобы оно прекратилось и воспроизведение вернулось к треку, с которого оно запустилось (вернее следующему за ним), вставить в мой скрипт дизлайка, чтобы это делать второй горячей кнопкой. Т.е. готовый вариант этого монстра должен быть таким: Что-то играет. Понравился трек - нажимаем кнопку №1. Если то что играет не нравится - нажимаем кнопу №2. П.С. Тут еще один маленький нюанс. |
Beta Was this translation helpful? Give feedback.
Для работы с плеером нужна подписка. У меня нет, поэтому проверить не могу. Но что-то вроде того:
К…