Skip to content

Commit

Permalink
Новый фильтр вычитания треков
Browse files Browse the repository at this point in the history
  • Loading branch information
Chimildic committed May 22, 2021
1 parent 0b3b19c commit 1737ff3
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 17 deletions.
3 changes: 2 additions & 1 deletion page/changelog.html
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ <h2>Список изменений YaMuTools</h2>
<h3>Версия 0.7.2</h3>
<hr />
<ul>
<li>В фильтре треков плейлиста появилась возможность удалить недавно игравшие треки (из истории прослушиваний)</li>
<li>В фильтре треков плейлиста появилась возможность удалить недавно игравшие треки (из истории прослушиваний).</li>
<li>К фильтру добавлена функция вычитания треков. Позволит удалить из текущего плейлиста то, что есть в других.</li>
</ul>
</section>
<section class="bubble">
Expand Down
31 changes: 15 additions & 16 deletions script/lib/api/playlist.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ function receivePlaylistByLocation(callback) {
receivePlaylist(getArgsByLocation(), callback);
}

function receivePlaylistByKind(kind, callback) {
receivePlaylist({ owner: owner, kind: kind }, callback);
function receivePlaylistByKind(kind) {
return new Promise((resolve, reject) => receivePlaylist({ owner: owner, kind: kind }, (playlist) => resolve(playlist)));
}

function receivePlaylist(args, callback) {
Expand Down Expand Up @@ -139,25 +139,24 @@ function appendPlaylist(data, callback) {
}

function getCreatedPlaylistByType(type, callback) {
chrome.storage.sync.get(['createdPlaylists'], function (items) {
chrome.storage.sync.get(['createdPlaylists'], async function (items) {
if (!items.createdPlaylists.hasOwnProperty(type)) {
callback({ success: false });
return;
}

receivePlaylistByKind(items.createdPlaylists[type], (playlist) => {
if (!playlist.hasOwnProperty('message')) {
callback({
success: true,
kind: playlist.kind,
revision: playlist.revision,
trackCount: playlist.trackCount,
});
} else {
removeCreatedPlaylist(type);
callback({ success: false });
}
});
let playlist = await receivePlaylistByKind(items.createdPlaylists[type]);
if (!playlist.hasOwnProperty('message')) {
callback({
success: true,
kind: playlist.kind,
revision: playlist.revision,
trackCount: playlist.trackCount,
});
} else {
removeCreatedPlaylist(type);
callback({ success: false });
}
});
}

Expand Down
40 changes: 40 additions & 0 deletions script/tool/playlist/filter.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ const FILTER_CONTEXT_MENU = {
title: 'Удалить кириллицу',
handler: () => onClickFilterTool(onClickRemoveRuTracks),
},
{
title: 'Вычитание треков',
handler: () => onClickFilterTool(onClickRemoveFromOtherPlaylists),
},
],
};

Expand Down Expand Up @@ -153,6 +157,42 @@ async function onClickRemoveHistoryTracks(playlist) {
});
}

function onClickRemoveFromOtherPlaylists(sourcePlaylist) {
receiveAllPlaylists(playlists => {
let html = '';
playlists.forEach((p) => {
html += `<p><input type="checkbox" id="choose-${p.kind}"/> <label for="choose-${p.kind}">${p.title}</label><p/>`;
});
html = `<div><p>Выберите плейлисты, треки которых нужно удалить из текущего плейлиста "${sourcePlaylist.title}"</p></div></br><div style="display:flex;overflow-y:scroll;height: 200px"><div style="text-align:left;margin:auto;">${html}</div></div>`;

Swal.fire({
title: 'Вычитание',
html: html,
confirmButtonText: 'Продолжить',
preConfirm: () => {
let elements = Swal.getPopup().querySelectorAll('[id*=choose-]');
let values = [];
elements.forEach((e) => {
if (e.checked) {
values.push(e.id.split('-')[1]);
}
});
return values;
},
}).then(async result => {
if (!result.isConfirmed) {
return;
}

for (let i = 0; i < result.value.length; i++) {
let playlist = await receivePlaylistByKind(result.value[i]);
sourcePlaylist.tracks = sourcePlaylist.tracks.filter((track) => !playlist.tracks.some(item => item.id == track.id));
}
updateTracksWithFilter(sourcePlaylist);
})
});
}

function updateTracksWithFilter(playlist, ids) {
let trackIds = ids || getTrackIds(playlist.tracks);
if (playlist.trackCount == trackIds.length) {
Expand Down

0 comments on commit 1737ff3

Please sign in to comment.