diff -r 6156d9675f62 -r ea35c92a3c7c src/eric7/Project/ProjectFile.py --- a/src/eric7/Project/ProjectFile.py Mon Feb 19 19:37:00 2024 +0100 +++ b/src/eric7/Project/ProjectFile.py Thu Feb 22 16:26:46 2024 +0100 @@ -17,6 +17,7 @@ from eric7 import Preferences from eric7.EricGui.EricOverrideCursor import EricOverridenCursor from eric7.EricWidgets import EricMessageBox +from eric7.EricWidgets.EricApplication import ericApp from eric7.SystemUtilities import FileSystemUtilities Project = typing.TypeVar("Project") @@ -48,6 +49,11 @@ @return flag indicating a successful write @rtype bool """ + fsInterface = ( + ericApp().getObject("EricServer").getServiceInterface("FileSystem") + ) + isRemote = FileSystemUtilities.isRemoteFileName(filename) + projectDict = { "header": { "comment": "eric project file for project {0}".format( @@ -85,19 +91,28 @@ "SOURCESDIR", ): with contextlib.suppress(KeyError): - projectDict["project"][key] = FileSystemUtilities.fromNativeSeparators( - projectDict["project"][key] + projectDict["project"][key] = ( + fsInterface.fromNativeSeparators(projectDict["project"][key]) + if isRemote + else FileSystemUtilities.fromNativeSeparators( + projectDict["project"][key] + ) ) try: jsonString = json.dumps(projectDict, indent=2, sort_keys=True) + "\n" - with open(filename, "w", newline="") as f: - f.write(jsonString) + if isRemote: + title = self.tr("Save Remote Project File") + fsInterface.writeFile(filename, jsonString.encode("utf-8")) + else: + title = self.tr("Save Project File") + with open(filename, "w", newline="") as f: + f.write(jsonString) except (OSError, TypeError) as err: with EricOverridenCursor(): EricMessageBox.critical( None, - self.tr("Save Project File"), + title, self.tr( "<p>The project file <b>{0}</b> could not be " "written.</p><p>Reason: {1}</p>" @@ -116,14 +131,24 @@ @return flag indicating a successful read @rtype bool """ + fsInterface = ( + ericApp().getObject("EricServer").getServiceInterface("FileSystem") + ) + + isRemote = FileSystemUtilities.isRemoteFileName(filename) try: - with open(filename, "r") as f: - jsonString = f.read() + if isRemote: + title = self.tr("Read Remote Project File") + jsonString = fsInterface.readFile(filename).decode("utf-8") + else: + title = self.tr("Read Project File") + with open(filename, "r") as f: + jsonString = f.read() projectDict = json.loads(jsonString) except (OSError, json.JSONDecodeError) as err: EricMessageBox.critical( None, - self.tr("Read Project File"), + title, self.tr( "<p>The project file <b>{0}</b> could not be " "read.</p><p>Reason: {1}</p>" @@ -134,10 +159,17 @@ # modify paths to contain native separators for key in self.__project.getFileCategories() + ["TRANSLATIONEXCEPTIONS"]: with contextlib.suppress(KeyError): - projectDict["project"][key] = [ - FileSystemUtilities.toNativeSeparators(f) - for f in projectDict["project"][key] - ] + projectDict["project"][key] = ( + [ + fsInterface.toNativeSeparators(f) + for f in projectDict["project"][key] + ] + if isRemote + else [ + FileSystemUtilities.toNativeSeparators(f) + for f in projectDict["project"][key] + ] + ) for key in ( "SPELLWORDS", "SPELLEXCLUDES", @@ -148,8 +180,12 @@ "SOURCESDIR", ): with contextlib.suppress(KeyError): - projectDict["project"][key] = FileSystemUtilities.toNativeSeparators( - projectDict["project"][key] + projectDict["project"][key] = ( + fsInterface.toNativeSeparators(projectDict["project"][key]) + if isRemote + else FileSystemUtilities.toNativeSeparators( + projectDict["project"][key] + ) ) self.__project.setProjectData(projectDict["project"])