Code: Select all
actions.playlistScrub = {
title: function () {
return 'Scrub Playlist'
},
icon: 'remove',
visible: function () {
if (!window.uitools.getCanEdit())
return false;
else {
var pl = resolveToValue(this.boundObject);
return (pl.parent != undefined); // && !pl.isAutoPlaylist); // to exclude root playlists node and auto-playlists
}
},
execute: function () {
//-------------------------------------------------------
var playlist1 = resolveToValue(this.boundObject);
var tracklist1 = playlist1.getTracklist();
//-------------------------------------------------------
// create new playlist with same name + '*' same location
// as selected playlist
//-------------------------------------------------------
var playlist2 = app.playlists.root.newPlaylist();
playlist2.beginUpdate();
playlist2.name = playlist1.name + '*';
playlist2.isAutoPlaylist = false;
playlist2.parent = playlist1.parent;
playlist2.endUpdate();
// create a new tracklist
var tracklist2 = app.utils.createTracklist();
//-------------------------------------------------------
// copy tracklist1 to tracklist2
//-------------------------------------------------------
tracklist1.whenLoaded().then(function () {
// copy the tracklist to a new tracklist
tracklist2.addList(tracklist1);
tracklist2.notifyLoaded();
tracklist2.globalModifyWatch=true;
});
//-------------------------------------------------------
// remove songs with same artist and title from tracklist2
//-------------------------------------------------------
var delCount = 0;
var checkCount = 0;
tracklist2.whenLoaded().then(function () {
tracklist2.locked(function() {
var refIndex = 1;
var endIndex = tracklist2.count;
while (refIndex < endIndex)
{
var refTrack = tracklist2.getValue(refIndex); //tracklist2.getFastObject(refIndex,refTrack); //
var checkIndex = refIndex+1;
while (checkIndex < endIndex)
{
var checkTrack = tracklist2.getValue(checkIndex); //tracklist2.getFastObject(checkIndex,checkTrack); //
if (refTrack.artist===checkTrack.artist)
{
if (refTrack.title===checkTrack.title)
{
// THIS IS THE PROBLEM LINE BELOW
//tracklist2.delete(checkIndex);
// IT CAUSES MM5 to HANG
delCount++;
}
}
checkIndex = checkIndex + 1;
}
refIndex = refIndex + 1;
checkCount++;
}
});
tracklist2.commitAsync();
uitools.toastMessage.show('check, delete count = ' + checkCount + ', ' + delCount);
});
//-------------------------------------------------------
// copy new tracklist to new playlist
//-------------------------------------------------------
tracklist2.whenLoaded().then(function () {
listForEach(tracklist2, function (track2) {
playlist2.addTrackAsync(track2);
});
});
playlist2.commitAsync();
}
};