src/eric7/HexEdit/HexEditMainWindow.py

branch
server
changeset 10631
00f5aae565a3
parent 10629
b0d14cba79b1
child 10633
dda7e43934dc
diff -r 552a790fd9bc -r 00f5aae565a3 src/eric7/HexEdit/HexEditMainWindow.py
--- a/src/eric7/HexEdit/HexEditMainWindow.py	Fri Mar 08 15:30:23 2024 +0100
+++ b/src/eric7/HexEdit/HexEditMainWindow.py	Fri Mar 08 15:30:53 2024 +0100
@@ -27,9 +27,11 @@
 from eric7.EricGui import EricPixmapCache
 from eric7.EricGui.EricAction import EricAction
 from eric7.EricWidgets import EricFileDialog, EricMessageBox
+from eric7.EricWidgets.EricApplication import ericApp
 from eric7.EricWidgets.EricClickableLabel import EricClickableLabel
 from eric7.EricWidgets.EricMainWindow import EricMainWindow
 from eric7.Globals import recentNameHexFiles, strGroup
+from eric7.RemoteServerInterface import EricServerFileDialog
 from eric7.SystemUtilities import FileSystemUtilities
 
 from .HexEditGotoWidget import HexEditGotoWidget
@@ -82,6 +84,12 @@
         if not self.__fromEric:
             self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet"))
 
+        self.__remotefsInterface =(
+            ericApp().getObject("EricServer").getServiceInterface("FileSystem")
+            if self.__fromEric
+            else None
+        )
+
         self.__editor = HexEditWidget()
         self.__searchWidget = HexEditSearchReplaceWidget(self.__editor, self, False)
         self.__replaceWidget = HexEditSearchReplaceWidget(self.__editor, self, True)
@@ -1056,11 +1064,20 @@
         ):
             self.__lastOpenPath = self.__project.getProjectPath()
 
-        fileName = EricFileDialog.getOpenFileName(
-            self,
-            self.tr("Open binary file in new window"),
-            self.__lastOpenPath,
-            self.tr("All Files (*)"),
+        fileName = (
+            EricServerFileDialog.getOpenFileName(
+                self,
+                self.tr("Open binary file"),
+                self.__lastOpenPath,
+                self.tr("All Files (*)"),
+            )
+            if FileSystemUtilities.isRemoteFileName(self.__lastOpenPath)
+            else EricFileDialog.getOpenFileName(
+                self,
+                self.tr("Open binary file in new window"),
+                self.__lastOpenPath,
+                self.tr("All Files (*)"),
+            )
         )
         if fileName:
             he = HexEditMainWindow(
@@ -1097,17 +1114,12 @@
         @param fileName name of the binary file to load
         @type str
         """
-        if not os.path.exists(fileName):
-            EricMessageBox.warning(
-                self,
-                self.tr("eric Hex Editor"),
-                self.tr("The file '{0}' does not exist.").format(fileName),
-            )
-            return
-
         try:
-            with open(fileName, "rb") as f:
-                data = f.read()
+            if FileSystemUtilities.isRemoteFileName(fileName):
+                data = self.__remotefsInterface.readFile(fileName)
+            else:
+                with open(fileName, "rb") as f:
+                    data = f.read()
         except OSError as err:
             EricMessageBox.warning(
                 self,
@@ -1118,7 +1130,11 @@
             )
             return
 
-        self.__lastOpenPath = os.path.dirname(fileName)
+        self.__lastOpenPath = (
+            self.__remotefsInterface.dirname(fileName)
+            if FileSystemUtilities.isRemoteFileName(fileName)
+            else os.path.dirname(fileName)
+        )
         self.__editor.setData(data)
         self.__setCurrentFile(fileName)
 
@@ -1138,11 +1154,20 @@
             ):
                 self.__lastOpenPath = self.__project.getProjectPath()
 
-            fileName = EricFileDialog.getOpenFileName(
-                self,
-                self.tr("Open binary file"),
-                self.__lastOpenPath,
-                self.tr("All Files (*)"),
+            fileName = (
+                EricServerFileDialog.getOpenFileName(
+                    self,
+                    self.tr("Open binary file"),
+                    self.__lastOpenPath,
+                    self.tr("All Files (*)"),
+                )
+                if FileSystemUtilities.isRemoteFileName(self.__lastOpenPath)
+                else EricFileDialog.getOpenFileName(
+                    self,
+                    self.tr("Open binary file"),
+                    self.__lastOpenPath,
+                    self.tr("All Files (*)"),
+                )
             )
             if fileName:
                 self.__loadHexFile(fileName)
@@ -1190,17 +1215,35 @@
         if not self.__lastSavePath and self.__lastOpenPath:
             self.__lastSavePath = self.__lastOpenPath
 
-        fileName = EricFileDialog.getSaveFileName(
-            self,
-            self.tr("Save binary file"),
-            self.__lastSavePath,
-            self.tr("All Files (*)"),
-            options=EricFileDialog.DontConfirmOverwrite,
+        fileName = (
+            EricServerFileDialog.getSaveFileName(
+                self,
+                self.tr("Save binary file"),
+                self.__lastSavePath,
+                self.tr("All Files (*)"),
+            )
+            if FileSystemUtilities.isRemoteFileName(self.__lastSavePath)
+            else EricFileDialog.getSaveFileName(
+                self,
+                self.tr("Save binary file"),
+                self.__lastSavePath,
+                self.tr("All Files (*)"),
+                options=EricFileDialog.DontConfirmOverwrite,
+            )
         )
         if not fileName:
             return False
 
-        if pathlib.Path(fileName).exists():
+        if (
+            (
+                FileSystemUtilities.isRemoteFileName(fileName)
+                and self.__remotefsInterface.exists(fileName)
+            )
+            or (
+                FileSystemUtilities.isPlainFileName(fileName)
+                and pathlib.Path(fileName).exists()
+            )
+        ):
             res = EricMessageBox.yesNo(
                 self,
                 self.tr("Save binary file"),
@@ -1226,8 +1269,12 @@
         @rtype bool
         """
         try:
-            with open(fileName, "wb") as f:
-                f.write(self.__editor.data())
+            data = self.__editor.data()
+            if FileSystemUtilities.isRemoteFileName(fileName):
+                self.__remotefsInterface.writeFile(fileName, data)
+            else:
+                with open(fileName, "wb") as f:
+                    f.write(data)
         except OSError as err:
             EricMessageBox.warning(
                 self,
@@ -1261,29 +1308,50 @@
         if not savePath and self.__lastOpenPath:
             savePath = self.__lastOpenPath
 
-        fileName, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
-            self,
-            self.tr("Save to readable file"),
-            savePath,
-            self.tr("Text Files (*.txt);;All Files (*)"),
-            self.tr("Text Files (*.txt)"),
-            EricFileDialog.DontConfirmOverwrite,
-        )
-        if not fileName:
-            return
+        if FileSystemUtilities.isRemoteFileName(savePath):
+            fileName, selectedFilter = EricServerFileDialog.getSaveFileNameAndFilter(
+                self,
+                self.tr("Save to readable file"),
+                savePath,
+                self.tr("Text Files (*.txt);;All Files (*)"),
+                self.tr("Text Files (*.txt)"),
+            )
+            if not fileName:
+                return
 
-        fpath = pathlib.Path(fileName)
-        if not fpath.suffix:
-            ex = selectedFilter.split("(*")[1].split(")")[0]
-            if ex:
-                fpath = fpath.with_suffix(ex)
-        if fpath.exists():
+            ext = self.__remotefsInterface.splitext(fileName)[1]
+            if not ext:
+                ex = selectedFilter.split("(*")[1].split(")")[0]
+                if ex:
+                    fileName += ex
+            fileExists = self.__remotefsInterface.exists(fileName)
+        else:
+            fileName, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
+                self,
+                self.tr("Save to readable file"),
+                savePath,
+                self.tr("Text Files (*.txt);;All Files (*)"),
+                self.tr("Text Files (*.txt)"),
+                EricFileDialog.DontConfirmOverwrite,
+            )
+            if not fileName:
+                return
+
+            fpath = pathlib.Path(fileName)
+            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 to readable file"),
                 self.tr(
                     "<p>The file <b>{0}</b> already exists. Overwrite it?</p>"
-                ).format(fpath),
+                ).format(fileName),
                 icon=EricMessageBox.Warning,
             )
             if not res:
@@ -1295,8 +1363,13 @@
             else self.__editor.toReadableString()
         )
         try:
-            with fpath.open("w", encoding="latin1") as f:
-                f.write(readableData)
+            if FileSystemUtilities.isRemoteFileName(fileName):
+                self.__remotefsInterface.writeFile(
+                    fileName, readableData.encode("latin1")
+                )
+            else:
+                with open(fileName, "w", encoding="latin1") as f:
+                    f.write(readableData)
         except OSError as err:
             EricMessageBox.warning(
                 self,
@@ -1535,6 +1608,10 @@
 
         self.__recentMenu.clear()
 
+        connected = (
+            self.__fromEric and ericApp().getObject("EricServer").isServerConnected()
+        )
+
         for idx, rs in enumerate(self.__recent, start=1):
             formatStr = "&{0:d}. {1}" if idx < 10 else "{0:d}. {1}"
             act = self.__recentMenu.addAction(
@@ -1546,7 +1623,10 @@
                 )
             )
             act.setData(rs)
-            act.setEnabled(pathlib.Path(rs).exists())
+            act.setEnabled(
+                (FileSystemUtilities.isRemoteFileName(rs) and connected)
+                or pathlib.Path(rs).exists()
+            )
 
         self.__recentMenu.addSeparator()
         self.__recentMenu.addAction(self.tr("&Clear"), self.__clearRecent)
@@ -1581,7 +1661,7 @@
         rs = Preferences.Prefs.rsettings.value(recentNameHexFiles)
         if rs is not None:
             for f in Preferences.toList(rs):
-                if pathlib.Path(f).exists():
+                if FileSystemUtilities.isRemoteFileName(f) or pathlib.Path(f).exists():
                     self.__recent.append(f)
 
     def __saveRecent(self):

eric ide

mercurial