Fix Playlist Dups 4.6 - Update 08/02/2011
I'm actually working on a few changes already, but they are not functional changes, just tidying code and adding some messaging. Please let me know what you think. Are there any other types of duplicate you might want to check for?
Download my scripts at my own MediaMonkey fansite.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
Latest version (3.0) allows the user to specify default duplicate detection type, warns if the playlist is not found, and also allows you to check the Now Playing list!
NEW CODE BELOW
NEW CODE BELOW
Last edited by trixmoto on Mon Dec 05, 2005 6:19 pm, edited 1 time in total.
Download my scripts at my own MediaMonkey fansite.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
Glad to hear you're enjoying it!
Download my scripts at my own MediaMonkey fansite.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
New version (4.0) has a few bugs fixed. Don't forget you can download the installer from my website.
NEW CODE BELLOW
NEW CODE BELLOW
Last edited by trixmoto on Thu Dec 08, 2005 5:53 am, edited 1 time in total.
Download my scripts at my own MediaMonkey fansite.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
Well, that's quite funny! I thought I'd tested this script with every possible type of duplication, in every place, and I did. I just forget to test this script when there wasn't any duplications!
I'll release a new version later today which doesn't have the error message, but as it turns out, the error message is basically saying "you have no duplicates" - just not very clearly!
I'll release a new version later today which doesn't have the error message, but as it turns out, the error message is basically saying "you have no duplicates" - just not very clearly!
Download my scripts at my own MediaMonkey fansite.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
New version (4.2) has this bug fixed:
Code: Select all
'
' MediaMonkey Script
'
' NAME: FixPlaylistDups 4.2
'
' AUTHOR: trixmoto (http://trix.dork.com)
' DATE : 08/12/2005
'
' INSTALL: Copy to Scripts directory and add the following to Scripts.ini
' Don't forget to remove comments (') and set the order appropriately
'
' FIXES: Option to recurse through children playlists
' Start from selected playlist
' Change how duplicates are detected
' Allow user to set default detection (below: *)
' Warn if the entered playlist was not found
' Allow user to check Now Playing list for duplicates
' Fix problem with siblings being found accidently
' Fix error message when no duplicates in now playing
'
' [FixPlaylistDups]
' FileName=FixPlaylistDups.vbs
' ProcName=FixPlaylistDups
' Order=9
' DisplayName=Fix Playlist Dups
' Description=Fix Playlist Duplications
' Language=VBScript
' ScriptType=0
'
Dim default 'change this value to the default you require (*)
default = 0
'0 = track id
'1 = artist and title
'2 = last played
'3 = file path
Dim selname, recurse, continue, dupby, notfound
Function dup(track1, track2)
dup = false
Select case dupby
case 0
If (track1.id = track2.id) Then dup = true
case 1
If (track1.artistname = track2.artistname) and (track1.title = track2.title) Then dup = true
case 2
If (track1.lastplayed = track2.lastplayed) and (track1.lastplayed <> "00:00:00") Then dup = true
case 3
if (track1.path = track2.path) Then dup = true
End Select
End Function
Sub fixList(name,found)
Dim i,j
Dim list,progress,tracks
Set list = SDB.PlaylistByTitle(name)
Set tracks = list.Tracks
continue = true
If name = selname Then
found = true 'local
notfound = false 'global
End If
If found and tracks.count > 1 Then
Set progress = SDB.Progress
progress.MaxValue = tracks.count
progress.Text = "Scanning playlist '"&name&"' for duplicated ("&tracks.count&" tracks)"
For i = 0 To tracks.count-2
For j = i+1 To tracks.count-1
If dup(tracks.Item(i),tracks.Item(j)) Then list.RemoveTrack(tracks.Item(j))
If progress.Terminate Then Exit For
Next
If progress.Terminate Then Exit For
progress.Value = i+1
Next
If progress.Terminate Then continue = false
Set progress = Nothing
End If
If continue and (recurse or found = false) Then
Dim children
Set children = list.ChildPlaylists
If found Then 'fix bug with local variable name
For i = 0 To children.count-1
fixList children.Item(i).Title, true
Next
Else
For i = 0 To children.count-1
fixList children.Item(i).Title, false
Next
End If
End If
End Sub
Sub fixNP()
SDB.Player.Stop
SDB.Player.CurrentSongIndex = 0
Dim i,j,m,a,b
Dim progress,tracks
Set tracks = SDB.Player.CurrentSonglist
Set progress = SDB.Progress
m = ""
If tracks.count > 1 Then
progress.MaxValue = tracks.count
progress.Text = "Scanning Now Playing list for duplicates ("&tracks.count&" tracks)"
For i = 0 To tracks.count-2
For j = i+1 To tracks.count-1
If dup(tracks.Item(i),tracks.Item(j)) and (InStr(m,j)=0) Then m=m&j&","
If progress.Terminate Then Exit For
Next
If progress.Terminate Then Exit For
progress.Value = i+1
Next
End If
If progress.Terminate Then
'do nothing
Else
If len(m) > 0 Then
m = left(m,len(m)-1)
m = strreverse(m)
a = split(m,",")
progress.MaxValue = UBound(a)
progress.Value = 0
progress.Text = "Removing "&UBound(a)&" tracks from Now Playing list"
Do
b = false
For i = 0 To UBound(a)-1
If a(i+1) > a(i) Then
b = true
m = a(i)
a(i) = a(i+1)
a(i+1) = m
End If
Next
Loop Until b = false
For i = 0 To UBound(a)
SDB.Player.PlaylistDelete(a(i))
progress.Value = i+1
Next
Else
res = SDB.MessageBox("Now Playing has no duplicates.", mtError, Array(mbOk))
End If
End If
Set progress = Nothing
End Sub
Sub FixPlaylistDups
Set Form = SDB.UI.NewForm
Form.Common.SetRect 100, 100, 350, 150
Form.BorderStyle = 3 ' Resizable
Form.FormPosition = 4 ' Screen Center
Form.Caption = "Fix Duplicates..."
Set Label1 = SDB.UI.NewLabel(Form)
Label1.Caption = "Playlist name:"
Label1.Common.Left = 10
Label1.Common.Top = 14
Set Edt1 = SDB.UI.NewEdit(Form)
Edt1.Common.Left = Label1.Common.Left + Label1.Common.Width +25
Edt1.Common.Top = Label1.Common.Top -4
Edt1.Common.Width = Form.Common.Width - Edt1.Common.Left -15
Edt1.Common.ControlName = "Edit1"
Edt1.Text = SDB.MainTree.CurrentNode.Caption
Set Label2 = SDB.UI.NewLabel(Form)
Label2.Caption = "Include children?"
Label2.Common.Left = 10
Label2.Common.Top = 39
Set Chk1 = SDB.UI.NewCheckbox(Form)
Chk1.Common.Left = Edt1.Common.Left +1
Chk1.Common.Top = Label2.Common.Top -4
Chk1.Common.Width = Form.Common.Width - Chk1.Common.Left -15
Chk1.Common.ControlName = "Chck1"
Chk1.Caption = ""
Chk1.Checked = True
Set BtnNP = SDB.UI.NewButton(Form)
BtnNP.Caption = "&Now Playing"
BtnNP.Common.Top = Chk1.Common.Top
BtnNP.Common.Left = Form.Common.Width - BtnNP.Common.Width -15
BtnNP.Common.Height = 21
BtnNP.UseScript = Script.ScriptPath
BtnNP.ModalResult = 3
Set BtnAll = SDB.UI.NewButton(Form)
BtnAll.Caption = "&All"
BtnAll.Common.Top = Chk1.Common.Top
BtnAll.Common.Width = 25
BtnAll.Common.Left = BtnNP.Common.Left - BtnAll.Common.Width -5
BtnAll.Common.Height = 21
BtnAll.UseScript = Script.ScriptPath
BtnAll.ModalResult = 4
Set Label3 = SDB.UI.NewLabel(Form)
Label3.Caption = "Duplicates by:"
Label3.Common.Left = 10
Label3.Common.Top = 64
Set Drp1 = SDB.UI.NewDropdown(Form)
Drp1.Common.Left = Chk1.Common.Left
Drp1.Common.Top = Label3.Common.Top -4
Drp1.Common.Width = Form.Common.Width - Drp1.Common.Left -15
Drp1.Common.ControlName = "Drop1"
Drp1.Style = 2
Drp1.AddItem("Track ID")
Drp1.AddItem("Artist & Title")
Drp1.AddItem("Last played")
Drp1.AddItem("File path")
Drp1.ItemIndex = default
Set BtnOk = SDB.UI.NewButton(Form)
BtnOk.Caption = "&Ok"
BtnOk.Common.Top = Drp1.Common.Top + Drp1.Common.Height +10
BtnOk.UseScript = Script.ScriptPath
BtnOk.Default = True
BtnOk.ModalResult = 1
Set BtnCancel = SDB.UI.NewButton(Form)
BtnCancel.Caption = "&Cancel"
BtnCancel.Common.Left = Form.Common.Width - BtnCancel.Common.Width -15
BtnOK.Common.Left = BtnCancel.Common.Left - BtnOK.Common.Width -10
BtnCancel.Common.Top = BtnOK.Common.Top
BtnCancel.UseScript = Script.ScriptPath
BtnCancel.Cancel = True
BtnCancel.ModalResult = 2
Dim res
Do
res = Form.showModal
If res = 1 Then
res = 2
dupby = Drp1.ItemIndex
selname = Edt1.Text
recurse = Chk1.Checked
continue = true
notfound = true
If selname = "[NP]" Then
fixNP
Else
fixList "", false
If notfound Then
res = SDB.MessageBox("Playlist entered was not found!", mtError, Array(mbOk))
End If
End If
End If
If res = 3 Then
Edt1.Text = "[NP]"
Chk1.Checked = false
End If
If res = 4 Then
Edt1.Text = ""
Chk1.Checked = true
End If
Loop Until res = 2
End Sub
Download my scripts at my own MediaMonkey fansite.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
Couldn't resist adding this:
cali wrote:it's working wonderfully, good work
Download my scripts at my own MediaMonkey fansite.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
Glad you like!
Download my scripts at my own MediaMonkey fansite.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
-
- Posts: 10
- Joined: Tue Nov 14, 2006 5:53 am
Small Modification
Triximoto,
Great script.
Most of my auto playlists tend to have a large number of songs by the same artist in them so i made a small modification to make the script remove duplicate artists, and leave the song least recently heard by the artist in the playlist.
and then down further in the loop
I know there are cleaner ways to code it, but hey it works!
What i would really like to do is on startup copy the autoplaylist to a regular playlist and then automatically run your script.
i don't suppose you could point me in the right direction on a simple way to copy the playlist?
Great script.
Most of my auto playlists tend to have a large number of songs by the same artist in them so i made a small modification to make the script remove duplicate artists, and leave the song least recently heard by the artist in the playlist.
Code: Select all
case 4
If (track1.artistname = track2.artistname) and (track1.lastplayed < track2.lastplayed) Then dup = true
If (track1.artistname = track2.artistname) and (track1.lastplayed > track2.lastplayed) Then dupeArtist = true
and then down further in the loop
Code: Select all
For j = i+1 To tracks.count-1
If dup(tracks.Item(i),tracks.Item(j)) Then list.RemoveTrack(tracks.Item(j))
if dupeArtist = true Then list.RemoveTrack(tracks.Item(i))
If progress.Terminate Then Exit For
Next
What i would really like to do is on startup copy the autoplaylist to a regular playlist and then automatically run your script.
i don't suppose you could point me in the right direction on a simple way to copy the playlist?
Sorry, I don't know how to create a new manual playlist in MM, if it's even possible through scripting.
Download my scripts at my own MediaMonkey fansite.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.
All the code for my website and scripts is safely backed up immediately and for free using Dropbox.