src/eric7/Project/ProjectFile.py

branch
server
changeset 10596
ea35c92a3c7c
parent 10459
5c5ed40d533d
child 11090
f5f5f5803935
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"])

eric ide

mercurial