diff -r 89b36a39fe69 -r 2057b1b198a5 src/eric7/UI/Browser.py --- 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,