]> code.delx.au - notipod/blobdiff - notipod_gui.py
Allow path_prefix to be set from a file in the playlists directory
[notipod] / notipod_gui.py
index e5ea98b83574ec6360ef11232aca53f9281410f3..f469b48f96922b09405cfd0545eb5348a480a5b6 100644 (file)
@@ -186,25 +186,39 @@ class NotiPodController(NSObject):
        def doCancel_(self, sender):
                self.runningGenerator = False
 
+       def getDestFolder(self):
+               folders = self.folders()
+               if not folders:
+                       NSRunAlertPanel("Error!", "You must choose a folder first!", "Ok", None, None)
+                       return
+               folder = folders[0]
+               if not os.path.isdir(folder.encode("utf-8")):
+                       NSRunAlertPanel("Error!", "Destination " + folder + " does not exist, try mounting it first?", "Ok", None, None)
+                       return
+               return folder
+
        def doPreviewThread(self):
                yield "Calculating changes..."
 
-               folder = self.folders()[0]
-               if not os.path.isdir(folder.encode("utf-8")):
-                       NSRunAlertPanel("Error!", "Destination " + folder + " does not exist, try mounting it first?", "Ok", None, None)
+               folder = self.getDestFolder()
+               if not folder:
                        return
 
-               all_tracks = []
+               all_tracks = set()
                for playlist_id in self.playlists():
                        playlist = self.library.get_playlist_pid(playlist_id)
                        if playlist is not None:
-                               all_tracks.extend(playlist.tracks)
+                               all_tracks.update(set(playlist.tracks))
+
+               all_filenames = []
+               for trackID in all_tracks:
+                       all_filenames.append(self.library.get_track_filename(trackID))
 
                gen = libnotipod.sync(
                        dry_run=True,
                        source=self.library.folder,
                        dest=folder, 
-                       files_to_copy=all_tracks
+                       files_to_copy=all_filenames,
                )
                self.previewResult = "\n".join(gen)
 
@@ -222,21 +236,38 @@ class NotiPodController(NSObject):
 
        @objc.IBAction
        def doSync_(self, sender):
-               folder = self.folders()[0]
-               if not os.path.isdir(folder.encode("utf-8")):
-                       NSRunAlertPanel("Error!", "Destination " + folder + " does not exist, try mounting it first?", "Ok", None, None)
+               folder = self.getDestFolder()
+               if not folder:
                        return
 
-               all_tracks = []
-               for playlist_id in self.playlists():
+               all_tracks = set()
+               orig_playlists = set(self.playlists())
+               all_playlists = orig_playlists.copy()
+               for playlist_id in all_playlists:
                        playlist = self.library.get_playlist_pid(playlist_id)
                        if playlist is None:
                                print "Forgetting unknown playlist:", playlist_id
                                self.setPlaylist_selected_(playlist_id, False)
                                continue
-                       all_tracks.extend(playlist.tracks)
+                       all_tracks.update(set(playlist.tracks))
+
+               all_filenames = []
+               for trackID in all_tracks:
+                       all_filenames.append(self.library.get_track_filename(trackID))
+                       all_playlists.update(self.library.get_track_playlists(trackID))
+
+               for playlist_id in all_playlists:
+                       playlist = self.library.get_playlist_pid(playlist_id)
+                       if playlist is None:
+                               continue
+                       tracks = []
+                       for trackID in playlist.tracks:
+                               if trackID in all_tracks:
+                                       tracks.append(self.library.get_track_filename(trackID))
+                       if playlist_id not in orig_playlists and len(tracks) < 10:
+                               continue
                        libnotipod.export_m3u(dry_run=False, dest=folder, path_prefix="",
-                                       playlist_name=playlist.name, files=playlist.tracks)
+                                       playlist_name=playlist.name, files=tracks)
 
                def finish():
                        NSRunAlertPanel("Complete!", "Synchronisation is complete", "Ok", None, None)
@@ -246,7 +277,7 @@ class NotiPodController(NSObject):
                                        dry_run=False,
                                        source=self.library.folder,
                                        dest=folder, 
-                                       files_to_copy=all_tracks
+                                       files_to_copy=all_filenames,
                                )
                        ,
                        finish,