--- a/src/eric7/Graphics/UMLDialog.py Fri Mar 08 15:30:23 2024 +0100 +++ b/src/eric7/Graphics/UMLDialog.py Fri Mar 08 15:30:53 2024 +0100 @@ -17,7 +17,10 @@ from eric7.EricGui import EricPixmapCache from eric7.EricWidgets import EricFileDialog, EricMessageBox +from eric7.EricWidgets.EricApplication import ericApp from eric7.EricWidgets.EricMainWindow import EricMainWindow +from eric7.RemoteServerInterface import EricServerFileDialog +from eric7.SystemUtilities import FileSystemUtilities from .ApplicationDiagramBuilder import ApplicationDiagramBuilder from .ImportsDiagramBuilder import ImportsDiagramBuilder @@ -86,6 +89,9 @@ self.__project = project self.__diagramType = diagramType + self.__remotefsInterface = ( + ericApp().getObject("EricServer").getServiceInterface("FileSystem") + ) self.scene = QGraphicsScene(0.0, 0.0, 800.0, 600.0) self.umlView = UMLGraphicsView(self.scene, parent=self) @@ -243,34 +249,56 @@ @type str """ if not filename: - fname, selectedFilter = EricFileDialog.getSaveFileNameAndFilter( - self, - self.tr("Save Diagram"), - "", - self.tr("Eric Graphics File (*.egj);;All Files (*)"), - "", - EricFileDialog.DontConfirmOverwrite, - ) - if not fname: - return + if FileSystemUtilities.isRemoteFileName(self.__project.getProjectPath()): + fname, selectedFilter = EricServerFileDialog.getSaveFileNameAndFilter( + self, + self.tr("Save Diagram"), + self.__project.getProjectPath(), + self.tr("Eric Graphics File (*.egj);;All Files (*)"), + "", + ) + if not fname: + return - fpath = pathlib.Path(fname) - if not fpath.suffix: - ex = selectedFilter.split("(*")[1].split(")")[0] - if ex: - fpath = fpath.with_suffix(ex) - if fpath.exists(): + ext = self.__remotefsInterface.splitext(fname)[1] + if not ext: + ex = selectedFilter.split("(*")[1].split(")")[0] + if ex: + fname += ex + filename = fname + fileExists = self.__remotefsInterface.exists(filename) + else: + fname, selectedFilter = EricFileDialog.getSaveFileNameAndFilter( + self, + self.tr("Save Diagram"), + self.__project.getProjectPath(), + self.tr("Eric Graphics File (*.egj);;All Files (*)"), + "", + EricFileDialog.DontConfirmOverwrite, + ) + if not fname: + return + + fpath = pathlib.Path(fname) + if not fpath.suffix: + ex = selectedFilter.split("(*")[1].split(")")[0] + if ex: + fpath = fpath.with_suffix(ex) + fileExists = fpath.exists() + filename = str(fpath) + + if fileExists: res = EricMessageBox.yesNo( self, self.tr("Save Diagram"), self.tr( - "<p>The file <b>{0}</b> already exists. Overwrite it?</p>" - ).format(fpath), + "<p>The file <b>{0}</b> exists already. Overwrite it?</p>" + ).format(filename), icon=EricMessageBox.Warning, ) if not res: return - filename = str(fpath) + ##filename = str(fpath) res = self.__writeJsonGraphicsFile(filename) @@ -289,12 +317,20 @@ @rtype bool """ if not filename: - filename = EricFileDialog.getOpenFileName( - self, - self.tr("Load Diagram"), - "", - self.tr("Eric Graphics File (*.egj);;All Files (*)"), - ) + if FileSystemUtilities.isRemoteFileName(self.__project.getProjectPath()): + filename = EricServerFileDialog.getOpenFileName( + self, + self.tr("Load Diagram"), + self.__project.getProjectPath(), + self.tr("Eric Graphics File (*.egj);;All Files (*)"), + ) + else: + filename = EricFileDialog.getOpenFileName( + self, + self.tr("Load Diagram"), + self.__project.getProjectPath(), + self.tr("Eric Graphics File (*.egj);;All Files (*)"), + ) if not filename: # Canceled by user return False @@ -343,8 +379,11 @@ try: jsonString = json.dumps(data, indent=2) - with open(filename, "w") as f: - f.write(jsonString) + if FileSystemUtilities.isRemoteFileName(filename): + self.__remotefsInterface.writeFile(filename, jsonString.encode("utf-8")) + else: + with open(filename, "w") as f: + f.write(jsonString) return True except (OSError, TypeError) as err: EricMessageBox.critical( @@ -368,8 +407,12 @@ @rtype bool """ try: - with open(filename, "r") as f: - jsonString = f.read() + if FileSystemUtilities.isRemoteFileName(filename): + bdata = self.__remotefsInterface.readFile(filename) + jsonString = bdata.decode("utf-8") + else: + with open(filename, "r") as f: + jsonString = f.read() data = json.loads(jsonString) except (OSError, json.JSONDecodeError) as err: EricMessageBox.critical(