Skip to content

Commit 1737ff3

Browse files
committed
Новый фильтр вычитания треков
1 parent 0b3b19c commit 1737ff3

File tree

3 files changed

+57
-17
lines changed

3 files changed

+57
-17
lines changed

page/changelog.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ <h2>Список изменений YaMuTools</h2>
2727
<h3>Версия 0.7.2</h3>
2828
<hr />
2929
<ul>
30-
<li>В фильтре треков плейлиста появилась возможность удалить недавно игравшие треки (из истории прослушиваний)</li>
30+
<li>В фильтре треков плейлиста появилась возможность удалить недавно игравшие треки (из истории прослушиваний).</li>
31+
<li>К фильтру добавлена функция вычитания треков. Позволит удалить из текущего плейлиста то, что есть в других.</li>
3132
</ul>
3233
</section>
3334
<section class="bubble">

script/lib/api/playlist.js

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ function receivePlaylistByLocation(callback) {
88
receivePlaylist(getArgsByLocation(), callback);
99
}
1010

11-
function receivePlaylistByKind(kind, callback) {
12-
receivePlaylist({ owner: owner, kind: kind }, callback);
11+
function receivePlaylistByKind(kind) {
12+
return new Promise((resolve, reject) => receivePlaylist({ owner: owner, kind: kind }, (playlist) => resolve(playlist)));
1313
}
1414

1515
function receivePlaylist(args, callback) {
@@ -139,25 +139,24 @@ function appendPlaylist(data, callback) {
139139
}
140140

141141
function getCreatedPlaylistByType(type, callback) {
142-
chrome.storage.sync.get(['createdPlaylists'], function (items) {
142+
chrome.storage.sync.get(['createdPlaylists'], async function (items) {
143143
if (!items.createdPlaylists.hasOwnProperty(type)) {
144144
callback({ success: false });
145145
return;
146146
}
147147

148-
receivePlaylistByKind(items.createdPlaylists[type], (playlist) => {
149-
if (!playlist.hasOwnProperty('message')) {
150-
callback({
151-
success: true,
152-
kind: playlist.kind,
153-
revision: playlist.revision,
154-
trackCount: playlist.trackCount,
155-
});
156-
} else {
157-
removeCreatedPlaylist(type);
158-
callback({ success: false });
159-
}
160-
});
148+
let playlist = await receivePlaylistByKind(items.createdPlaylists[type]);
149+
if (!playlist.hasOwnProperty('message')) {
150+
callback({
151+
success: true,
152+
kind: playlist.kind,
153+
revision: playlist.revision,
154+
trackCount: playlist.trackCount,
155+
});
156+
} else {
157+
removeCreatedPlaylist(type);
158+
callback({ success: false });
159+
}
161160
});
162161
}
163162

script/tool/playlist/filter.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ const FILTER_CONTEXT_MENU = {
2727
title: 'Удалить кириллицу',
2828
handler: () => onClickFilterTool(onClickRemoveRuTracks),
2929
},
30+
{
31+
title: 'Вычитание треков',
32+
handler: () => onClickFilterTool(onClickRemoveFromOtherPlaylists),
33+
},
3034
],
3135
};
3236

@@ -153,6 +157,42 @@ async function onClickRemoveHistoryTracks(playlist) {
153157
});
154158
}
155159

160+
function onClickRemoveFromOtherPlaylists(sourcePlaylist) {
161+
receiveAllPlaylists(playlists => {
162+
let html = '';
163+
playlists.forEach((p) => {
164+
html += `<p><input type="checkbox" id="choose-${p.kind}"/> <label for="choose-${p.kind}">${p.title}</label><p/>`;
165+
});
166+
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>`;
167+
168+
Swal.fire({
169+
title: 'Вычитание',
170+
html: html,
171+
confirmButtonText: 'Продолжить',
172+
preConfirm: () => {
173+
let elements = Swal.getPopup().querySelectorAll('[id*=choose-]');
174+
let values = [];
175+
elements.forEach((e) => {
176+
if (e.checked) {
177+
values.push(e.id.split('-')[1]);
178+
}
179+
});
180+
return values;
181+
},
182+
}).then(async result => {
183+
if (!result.isConfirmed) {
184+
return;
185+
}
186+
187+
for (let i = 0; i < result.value.length; i++) {
188+
let playlist = await receivePlaylistByKind(result.value[i]);
189+
sourcePlaylist.tracks = sourcePlaylist.tracks.filter((track) => !playlist.tracks.some(item => item.id == track.id));
190+
}
191+
updateTracksWithFilter(sourcePlaylist);
192+
})
193+
});
194+
}
195+
156196
function updateTracksWithFilter(playlist, ids) {
157197
let trackIds = ids || getTrackIds(playlist.tracks);
158198
if (playlist.trackCount == trackIds.length) {

0 commit comments

Comments
 (0)