src/eric7/UI/Browser.py

branch
eric7
changeset 10949
2057b1b198a5
parent 10918
056bd087096f
child 11090
f5f5f5803935
--- a/src/eric7/UI/Browser.py	Sat Oct 05 10:28:34 2024 +0200
+++ b/src/eric7/UI/Browser.py	Sat Oct 05 11:35:07 2024 +0200
@@ -129,7 +129,7 @@
         self.__remotefsInterface = serverInterface.getServiceInterface("FileSystem")
 
         self.__model = BrowserModel(fsInterface=self.__remotefsInterface)
-        self.__sortModel = BrowserSortFilterProxyModel()
+        self.__sortModel = BrowserSortFilterProxyModel(remoteServer=serverInterface)
         self.__sortModel.setSourceModel(self.__model)
         self.setModel(self.__sortModel)
 
@@ -641,6 +641,17 @@
                 if isinstance(itm, (BrowserDirectoryItem, BrowserSimpleDirectoryItem))
                 else os.path.dirname(itm.fileName())
             )
+            if FileSystemUtilities.isRemoteFileName(directory):
+                EricMessageBox.critical(
+                    self,
+                    self.tr("Show in File Manager"),
+                    self.tr(
+                        "Directories accessed through an eric-ide server cannot be"
+                        " opened in a file manager application. Aborting..."
+                    ),
+                )
+                return
+
             ok = FileSystemUtilities.startfile(directory)
 
             if not ok:
@@ -855,8 +866,7 @@
         Private slot to refresh a directory entry.
         """
         index = self.currentIndex()
-        refreshDir = self.model().item(index).dirName()
-        self.__model.directoryChanged(refreshDir)
+        self.__model.refreshDirectory(self.model().mapToSource(index))
 
     @pyqtSlot()
     def __findInDirectory(self):
@@ -1061,8 +1071,13 @@
                 QLineEdit.EchoMode.Normal,
             )
             if ok and bool(newName):
-                dirpath = os.path.join(dname, newName)
-                if os.path.exists(dirpath):
+                if FileSystemUtilities.isRemoteFileName(dname):
+                    dirpath = self.__remotefsInterface.join(dname, newName)
+                    dirExists = self.__remotefsInterface.exists(dirpath)
+                else:
+                    dirpath = os.path.join(dname, newName)
+                    dirExists = os.path.exists(dirpath)
+                if dirExists:
                     EricMessageBox.warning(
                         self,
                         self.tr("New Directory"),
@@ -1073,7 +1088,10 @@
                     )
                 else:
                     try:
-                        os.mkdir(dirpath, mode=0o751)
+                        if FileSystemUtilities.isRemoteFileName(dirpath):
+                            self.__remotefsInterface.mkdir(dirpath, mode=0o751)
+                        else:
+                            os.mkdir(dirpath, mode=0o751)
                     except OSError as err:
                         EricMessageBox.critical(
                             self,
@@ -1099,8 +1117,13 @@
                 QLineEdit.EchoMode.Normal,
             )
             if ok and bool(fname):
-                filepath = os.path.join(dname, fname)
-                if os.path.exists(filepath):
+                if FileSystemUtilities.isRemoteFileName(dname):
+                    filepath = self.__remotefsInterface.join(dname, fname)
+                    fileExists = self.__remotefsInterface.exists(filepath)
+                else:
+                    filepath = os.path.join(dname, fname)
+                    fileExists = os.path.exists(filepath)
+                if fileExists:
                     EricMessageBox.warning(
                         self,
                         self.tr("New File"),
@@ -1111,8 +1134,11 @@
                     )
                 else:
                     try:
-                        with open(filepath, "w"):
-                            pass
+                        if FileSystemUtilities.isRemoteFileName(filepath):
+                            self.__remotefsInterface.writeFile(filepath, b"")
+                        else:
+                            with open(filepath, "w"):
+                                pass
                     except OSError as err:
                         EricMessageBox.critical(
                             self,
@@ -1151,7 +1177,10 @@
         )
         if dlg.exec() == QDialog.DialogCode.Accepted:
             try:
-                os.remove(fn)
+                if FileSystemUtilities.isRemoteFileName(fn):
+                    self.__remotefsInterface.remove(fn)
+                else:
+                    os.remove(fn)
             except OSError as err:
                 EricMessageBox.critical(
                     self.ui,
@@ -1177,7 +1206,10 @@
         )
         if dlg.exec() == QDialog.DialogCode.Accepted:
             try:
-                shutil.rmtree(dn, ignore_errors=True)
+                if FileSystemUtilities.isRemoteFileName(dn):
+                    self.__remotefsInterface.shutilRmtree(dn, ignore_errors=True)
+                else:
+                    shutil.rmtree(dn, ignore_errors=True)
             except OSError as err:
                 EricMessageBox.critical(
                     self.ui,
@@ -1191,7 +1223,7 @@
     @pyqtSlot()
     def __deleteMultiple(self):
         """
-        Private slot to delete multiple directories and files.
+        Private slot to delete multiple files.
 
         Note: The context menu for multi selection is only shown for file
         items.
@@ -1209,7 +1241,10 @@
         if dlg.exec() == QDialog.DialogCode.Accepted:
             for fn in fileNames:
                 try:
-                    os.remove(fn)
+                    if FileSystemUtilities.isRemoteFileName(fn):
+                        self.__remotefsInterface.remove(fn)
+                    else:
+                        os.remove(fn)
                 except OSError as err:
                     EricMessageBox.critical(
                         self.ui,

eric ide

mercurial