После Playlist.saveWithUpdate потерян порядок треков в плейлисте #119
Replies: 3 comments 16 replies
-
|
Логически в
Единственный момент влияющий на сортировку это куда добавлять - в начало или конец плейлиста. Параметр Добавление идет пачками по 100 треков, друг за другом последовательно. Пока не придет ответ, следующая пачка не отправится. Еще заметил на примере лайков с одинаковой датой добавления. В интерфейсе Spotify отображается один порядок, в запросах приходит другой порядок. Уже второй раз пишут, что вдруг на какой-то раз выходит странное добавление через |
Beta Was this translation helpful? Give feedback.
-
По поводу ошибки в сортировки из комментария. Поскольку история прослушиваний это локальный кэш, данные внутри со временем устаревают. В данном случае это касается id исполнителей. По неведомой нам причине, Spotify изменил их у некоторых исполнителей со временем. Алгоритм сортировки построен так, что запрашиваются полные объекты исполнителей. На тот случай если оригинальные объекты не содержат каких-то ключей. Затем циклом проходится по оригинальному массиву, связываясь через id с полными объектами для сравнения значений. Когда Spotify сменил id, он продолжает отдавать исполнителей по прошлому значению, но в ответе уже новое id. Поэтому связь оригинального массива и полных объектов обрывается. Можно добавить дополнительную проверку, если у всех элементов оригинала ключ сортировки существует - не запрашивать полных объектов. Но это охватит не все сценарии. Кроме того, установить связь по имени исполнителя, когда по id не удалось. Позже поправлю. На данный момент предложу одноразово запустить следующую функцию. Она обновит id основных исполнителей на новые и перезапишет кэш. function actualize(){
perform('SpotifyRecentTracks');
perform('LastfmRecentTracks');
perform('BothRecentTracks');
function perform(filename) {
let tracks = Cache.read(filename);
let remoteArtists = getCachedTracks(tracks, { artist: {} }).artists;
let arrayArtists = Object.values(remoteArtists);
tracks.forEach((t, i) => {
let id = t.artists[0].id;
if (!remoteArtists[id]) {
let artist = arrayArtists.find(a => a.name == t.artists[0].name);
if (artist) {
tracks[i].artists[0].id = artist.id;
} else {
console.log('Не найдено соответствие для', id, t.artists[0].name);
}
}
});
Cache.write(filename, tracks);
}
} |
Beta Was this translation helpful? Give feedback.
-
Новых данных не появилось, чтобы отловить проблему? |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Доступа к ПК пока что нет, не могу покопаться, в чем причина…
Пользуюсь SaveWithUpdate уже довольно долго. Не сталкивался с такими проблемами.
Кейс какой.
В одинаковых плейлистах по 520 треков. Удалил трек из сравниваемого плейлиста (вроде бы. мог конечно и добавить, не помню, но это менее вероятно). И после очередного обновления плейлиста треки перемешались в порядке, который объяснить не могу…
Версия библиотеки последняя.
upd. Если правильно посчитал - 100 треков поднялись в начало плейлиста, далее сортировка сохраняется
Beta Was this translation helpful? Give feedback.
All reactions