From 7d3f0713c45c6d6e933269fc3e24a446a0df7baf Mon Sep 17 00:00:00 2001 From: James Bunton Date: Sun, 2 Jan 2011 23:29:46 +1100 Subject: [PATCH] Be case insensitive because iTunes is lame --- NotiPod.py | 2 +- libsyncitunes.py | 33 +++++++++++++++++++++------------ 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/NotiPod.py b/NotiPod.py index 5292faf..4bb501d 100644 --- a/NotiPod.py +++ b/NotiPod.py @@ -174,7 +174,7 @@ class NotiPodAppDelegate(NSObject): dry_run=False, source=self.library.folder, dest=folder, - files=all_tracks + files_to_copy=all_tracks ) , finish diff --git a/libsyncitunes.py b/libsyncitunes.py index 4122891..c25ef26 100644 --- a/libsyncitunes.py +++ b/libsyncitunes.py @@ -167,16 +167,21 @@ def export_m3u(dry_run, dest, path_prefix, playlist_name, files): f.write("%s%s\n" % (path_prefix, filename)) f.close() -def sync(dry_run, source, dest, files): +def sync(dry_run, source, dest, files_to_copy): join = os.path.join logging.info("Calculating files to sync and deleting old 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()) + class SyncFile(object): pass + for f in files_to_copy: + sf = SyncFile() + sf.orig_filename = f.encode("utf-8") + sf.encoded_filename = encode_filename(f) + filemap[sf.encoded_filename.lower()] = sf + files_to_copy = set(filemap) + for dirpath, dirnames, filenames in os.walk(dest): full_dirpath = dirpath dirpath = strip_prefix(dirpath, dest) @@ -188,13 +193,14 @@ def sync(dry_run, source, dest, files): if not os.path.exists(join(dest, filename)): continue - if filename in files: - sourcestat = os.stat(join(source, filemap[filename])) + if filename.lower() in files_to_copy: + source_filename = filemap[filename.lower()].orig_filename + sourcestat = os.stat(join(source, source_filename)) deststat = os.stat(join(dest, filename)) same_time = abs(sourcestat.st_mtime - deststat.st_mtime) < 5 same_size = sourcestat.st_size == deststat.st_size if same_time and same_size: - files.remove(filename) + files_to_copy.remove(filename.lower()) yield "Keep: " + filename else: yield "Update: " + filename @@ -211,12 +217,15 @@ def sync(dry_run, source, dest, files): logging.info("Copying new files") - files = list(files) - files.sort() - for filename in files: - yield "Copy: " + filename + files_to_copy = list(files_to_copy) + files_to_copy.sort() + for filename in files_to_copy: + yield "Copy: " + filemap[filename].orig_filename if not dry_run: mkdirhier(os.path.dirname(join(dest, filename))) - shutil.copy2(join(source, filemap[filename]), join(dest, filename)) + shutil.copy2( + join(source, filemap[filename].orig_filename), + join(dest, filemap[filename].encoded_filename) + ) -- 2.39.2