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)
@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)
dry_run=False,
source=self.library.folder,
dest=folder,
- files_to_copy=all_tracks
+ files_to_copy=all_filenames,
)
,
finish,