+ def getDestFolder(self):
+ target = self.getCurrentTarget()
+ if not target:
+ NSRunAlertPanel("Error!", "You must choose a folder first!", "Ok", None, None)
+ return
+ folder = target["folder"]
+ 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.getDestFolder()
+ if not folder:
+ return
+
+ all_tracks = set()
+ for playlist_id in self.playlists():
+ playlist = self.library.get_playlist_pid(playlist_id)
+ if playlist is not None:
+ 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_filenames,
+ )
+ self.previewResult = "\n".join(gen)
+
+ @objc.IBAction
+ def doPreview_(self, sender):
+ self.previewResult = ""
+ self.previewWindow.orderOut_(self)
+
+ def finish():
+ self.previewText.textStorage().mutableString().setString_(self.previewResult)
+ self.previewWindow.center()
+ self.previewWindow.makeKeyAndOrderFront_(self)
+
+ self.runGenerator(self.doPreviewThread, finish, None)
+