X-Git-Url: https://code.delx.au/notipod/blobdiff_plain/27b52e4ac730150d6e64c11bde11c2a6c94accd0..d986ae4a0c2444f97d531451769245a9e6b9ab66:/notipod_gui.py diff --git a/notipod_gui.py b/notipod_gui.py index e5ea98b..f469b48 100644 --- a/notipod_gui.py +++ b/notipod_gui.py @@ -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,