From 7d694797aa799134efbb3f72112ac065e85c72d0 Mon Sep 17 00:00:00 2001 From: et0h Date: Mon, 19 Aug 2019 17:43:21 +0100 Subject: [PATCH] Add load/save playlist from/to file menu options --- syncplay/client.py | 6 ++++++ syncplay/messages_de.py | 2 ++ syncplay/messages_en.py | 2 ++ syncplay/messages_es.py | 2 ++ syncplay/messages_it.py | 2 ++ syncplay/messages_ru.py | 2 ++ syncplay/ui/gui.py | 45 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 61 insertions(+) diff --git a/syncplay/client.py b/syncplay/client.py index c6d9885..b253d0d 100755 --- a/syncplay/client.py +++ b/syncplay/client.py @@ -1730,6 +1730,12 @@ class SyncplayPlaylist(): if newPlaylist: self.changePlaylist(newPlaylist, username=None, resetIndex=True) + def savePlaylistToFile(self, path): + with open(path, 'w') as playlistFile: + playlistToSave = utils.getListAsMultilineString(self._playlist) + playlistFile.write(playlistToSave) + self._ui.showMessage("Playlist saved as {}".format(path)) # TODO: Move to messages_en + def changePlaylist(self, files, username=None, resetIndex=False): if self._playlist == files: diff --git a/syncplay/messages_de.py b/syncplay/messages_de.py index e415256..9207d67 100755 --- a/syncplay/messages_de.py +++ b/syncplay/messages_de.py @@ -297,6 +297,8 @@ de = { "openmedia-menu-label": "&Mediendatei öffnen...", "openstreamurl-menu-label": "&Stream URL öffnen", "setmediadirectories-menu-label": "Set media &directories", # TODO: Translate + "loadplaylistfromfile-menu-label": "&Load playlist from file", # TODO: Translate + "saveplaylisttofile-menu-label": "&Save playlist to file", # TODO: Translate "exit-menu-label": "&Beenden", "advanced-menu-label": "&Erweitert", "window-menu-label": "&Fenster", diff --git a/syncplay/messages_en.py b/syncplay/messages_en.py index 113a780..1b2d96e 100755 --- a/syncplay/messages_en.py +++ b/syncplay/messages_en.py @@ -299,6 +299,8 @@ en = { "openmedia-menu-label": "&Open media file", "openstreamurl-menu-label": "Open &media stream URL", "setmediadirectories-menu-label": "Set media &directories", + "loadplaylistfromfile-menu-label": "&Load playlist from file", + "saveplaylisttofile-menu-label": "&Save playlist to file", "exit-menu-label": "E&xit", "advanced-menu-label": "&Advanced", "window-menu-label": "&Window", diff --git a/syncplay/messages_es.py b/syncplay/messages_es.py index 1625574..e216d35 100644 --- a/syncplay/messages_es.py +++ b/syncplay/messages_es.py @@ -299,6 +299,8 @@ es = { "openmedia-menu-label": "A&brir archivo multimedia", "openstreamurl-menu-label": "Abrir URL de &flujo de medios", "setmediadirectories-menu-label": "&Establecer directorios de medios", + "loadplaylistfromfile-menu-label": "&Load playlist from file", # TODO: Translate + "saveplaylisttofile-menu-label": "&Save playlist to file", # TODO: Translate "exit-menu-label": "&Salir", "advanced-menu-label": "A&vanzado", "window-menu-label": "&Ventana", diff --git a/syncplay/messages_it.py b/syncplay/messages_it.py index 23f8d77..ee18fbd 100755 --- a/syncplay/messages_it.py +++ b/syncplay/messages_it.py @@ -299,6 +299,8 @@ it = { "openmedia-menu-label": "&Apri file multimediali", "openstreamurl-menu-label": "Apri indirizzo di &rete", "setmediadirectories-menu-label": "Imposta &cartelle multimediali", + "loadplaylistfromfile-menu-label": "&Load playlist from file", # TODO: Translate + "saveplaylisttofile-menu-label": "&Save playlist to file", # TODO: Translate "exit-menu-label": "&Esci", "advanced-menu-label": "&Avanzate", "window-menu-label": "&Finestra", diff --git a/syncplay/messages_ru.py b/syncplay/messages_ru.py index cb9b026..5c0dc19 100755 --- a/syncplay/messages_ru.py +++ b/syncplay/messages_ru.py @@ -301,6 +301,8 @@ ru = { "openmedia-menu-label": "&Открыть файл", "openstreamurl-menu-label": "Открыть &ссылку", "setmediadirectories-menu-label": "&Папки воспроизведения", + "loadplaylistfromfile-menu-label": "&Load playlist from file", # TODO: Translate + "saveplaylisttofile-menu-label": "&Save playlist to file", # TODO: Translate "exit-menu-label": "&Выход", "advanced-menu-label": "&Дополнительно", "window-menu-label": "&Вид", diff --git a/syncplay/ui/gui.py b/syncplay/ui/gui.py index cfb233b..27dcb87 100755 --- a/syncplay/ui/gui.py +++ b/syncplay/ui/gui.py @@ -711,6 +711,10 @@ class MainWindow(QtWidgets.QMainWindow): menu.addAction(QtGui.QPixmap(resourcespath + "film_add.png"), getMessage("addfilestoplaylist-menu-label"), lambda: self.OpenAddFilesToPlaylistDialog()) menu.addAction(QtGui.QPixmap(resourcespath + "world_add.png"), getMessage("addurlstoplaylist-menu-label"), lambda: self.OpenAddURIsToPlaylistDialog()) menu.addSeparator() + menu.addAction(getMessage("loadplaylistfromfile-menu-label"),lambda: self.OpenLoadPlaylistFromFileDialog()) # TODO: Add icon + menu.addAction("Load and shuffle playlist from file",lambda: self.OpenLoadPlaylistFromFileDialog(shuffle=True)) # TODO: Add icon and messages_en + menu.addAction(getMessage("saveplaylisttofile-menu-label"),lambda: self.OpenSavePlaylistToFileDialog()) # TODO: Add icon + menu.addSeparator() menu.addAction(QtGui.QPixmap(resourcespath + "film_folder_edit.png"), getMessage("setmediadirectories-menu-label"), lambda: self.openSetMediaDirectoriesDialog()) menu.addAction(QtGui.QPixmap(resourcespath + "shield_edit.png"), getMessage("settrusteddomains-menu-label"), lambda: self.openSetTrustedDomainsDialog()) menu.exec_(self.playlist.viewport().mapToGlobal(position)) @@ -1041,6 +1045,47 @@ class MainWindow(QtWidgets.QMainWindow): self.updatingPlaylist = False self.playlist.updatePlaylist(self.getPlaylistState()) + @needsClient + def OpenLoadPlaylistFromFileDialog(self, shuffle=False): + self.loadMediaBrowseSettings() + if isMacOS() and IsPySide: + options = QtWidgets.QFileDialog.Options(QtWidgets.QFileDialog.DontUseNativeDialog) + else: + options = QtWidgets.QFileDialog.Options() + self.mediadirectory = "" + currentdirectory = os.path.dirname(self._syncplayClient.userlist.currentUser.file["path"]) if self._syncplayClient.userlist.currentUser.file else None + if currentdirectory and os.path.isdir(currentdirectory): + defaultdirectory = currentdirectory + else: + defaultdirectory = self.getInitialMediaDirectory() + browserfilter = "Playlists (*.m3u *.m3u8 *.txt)" + filepath, filtr = QtWidgets.QFileDialog.getOpenFileName( + self, "Load playlist from file", defaultdirectory, + browserfilter, "", options) # TODO: Note Shuffle and move to messages_en + if os.path.isfile(filepath): + self._syncplayClient.playlist.loadPlaylistFromFile(filepath, shuffle=shuffle) + self.playlist.updatePlaylist(self.getPlaylistState()) + + @needsClient + def OpenSavePlaylistToFileDialog(self): + self.loadMediaBrowseSettings() + if isMacOS() and IsPySide: + options = QtWidgets.QFileDialog.Options(QtWidgets.QFileDialog.DontUseNativeDialog) + else: + options = QtWidgets.QFileDialog.Options() + self.mediadirectory = "" + currentdirectory = os.path.dirname(self._syncplayClient.userlist.currentUser.file["path"]) if self._syncplayClient.userlist.currentUser.file else None + if currentdirectory and os.path.isdir(currentdirectory): + defaultdirectory = currentdirectory + else: + defaultdirectory = self.getInitialMediaDirectory() + browserfilter = "Playlist (*.m3u8 *.m3u *.txt)" + filepath, filtr = QtWidgets.QFileDialog.getSaveFileName( + self, "Save playlist to file", defaultdirectory, + browserfilter, "", options) # TODO: Move to messages_en + if filepath: + self._syncplayClient.playlist.savePlaylistToFile(filepath) + @needsClient def OpenAddURIsToPlaylistDialog(self): URIsDialog = QtWidgets.QDialog()