import logging
import os
import shutil
+import sys
import urllib
from Foundation import *
trackID = item["Track ID"]
filename = str(pl_tracks[str(trackID)]["Location"])
filename = self.loc2name(filename)
- filename = eval(repr(filename).lstrip("u")).decode("utf-8")
+ filename = filename.decode("utf-8")
+### filename = eval(repr(filename).lstrip("u")).decode("utf-8")
if not filename.startswith(self.folder):
logging.warn("Skipping: " + filename)
continue
- filename = filename[len(self.folder):]
- if filename.startswith("/"):
- filename = filename[1:]
+ filename = strip_prefix(filename, self.folder)
tracks.append(filename)
playlist = Playlist.alloc().init()
playlist.set(name, pid, tracks, parent)
return item.name
+encoded_names = {}
+valid_chars = frozenset("\\/-_.() abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
+def encode_filename(filename):
+ try:
+ return encoded_names[filename]
+ except KeyError:
+ pass
+ orig_filename = filename
+ filename = filename.encode("ascii", "ignore")
+ filename = "".join(c for c in filename if c in valid_chars)
+ if filename in encoded_names:
+ a, b = os.path.splitext(filename)
+ a += "-dup"
+ filename = a + b
+ encoded_names[orig_filename] = filename
+ return filename
+
def export_m3u(dry_run, dest, path_prefix, playlist_name, files):
if dry_run:
return
for filename in files:
if path_prefix.find("\\") > 0:
filename = filename.replace("/", "\\")
- filename = filename.encode("utf-8")
+ filename = encode_filename(filename)
f.write("%s%s\n" % (path_prefix, filename))
f.close()
join = os.path.join
logging.info("Calculating files to sync and deleting old files")
- files = set(files)
+ source = source.encode("utf-8")
+ dest = dest.encode("utf-8")
+ filemap = {}
+ for f in files:
+ filemap[encode_filename(f)] = f.encode("utf-8")
+ files = set(filemap.keys())
for dirpath, dirnames, filenames in os.walk(dest):
full_dirpath = dirpath
dirpath = strip_prefix(dirpath, dest)
for filename in filenames:
- filename = join(dirpath, filename).decode("utf-8")
+ filename = join(dirpath, filename)
# Whenever 'file' is deleted OSX will helpfully remove '._file'
if not os.path.exists(join(dest, filename)):
logging.debug("copy: " + filename)
if not dry_run:
mkdirhier(os.path.dirname(join(dest, filename)))
- shutil.copy2(join(source, filename), join(dest, filename))
+ shutil.copy2(join(source, filemap[filename]), join(dest, filename))