]> code.delx.au - notipod/commitdiff
Be case insensitive because iTunes is lame
authorJames Bunton <jamesbunton@fastmail.fm>
Sun, 2 Jan 2011 12:29:46 +0000 (23:29 +1100)
committerJames Bunton <jamesbunton@fastmail.fm>
Sun, 2 Jan 2011 12:29:46 +0000 (23:29 +1100)
NotiPod.py
libsyncitunes.py

index 5292faf7b4ba0e9aae41cf4f2b7f54c0a58bb6df..4bb501dfee0c2ec870f717da1a3fc582cdb02b84 100644 (file)
@@ -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
index 41228914301c236cf7413dc281558136dd5e1cdf..c25ef26560921aa5d58c03c3ff3f7f26b2a42b15 100644 (file)
@@ -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)
+                       )