This is a quick hack in python3 to prune duplicates in the active mpd playlist.
It looks for duplicates by filename. Requires mpc to be installed and respects MPD_HOST and MPD_PORT environment variables.
Sidenote: This is one of my very first python scripts. I am pretty sure this can be done much smarter in python but i am not that skilled yet in that language. So please feel free to improve it. Feedback of any kind is highly appreciated.
#!/usr/bin/python
import subprocess
data = dict()
delpos = list()
p = subprocess.Popen(["/usr/bin/mpc", "-f", "%position% %file%", "playlist"], shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in p.stdout:
line = line.decode("utf-8")
line = line.rstrip('\n');
position, filename = line.split(" ", 1);
data.setdefault(filename,[]).append(position)
for key in data:
poslen = len(data[key])
if poslen <= 1: continue
print("Will delete:", poslen-1, "time(s)", key)
iterpos = iter(data[key])
next(iterpos)
for pos in iterpos:
delpos.append(pos)
delpos = list(map(int, delpos))
delpos.sort(reverse=True)
for item in delpos:
p = subprocess.Popen(["/usr/bin/mpc", "del", str(item)], shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
Usage
Copy and paste the code to some file: e.g: /usr/local/bin/mpddeldup.py
Run it like that:
MPD_HOST="yourpass@yourhost" MPD_PORT="6600" /usr/local/bin/mpddeldups.py