127 |
127 |
128 self.__ericServerInterface = serverInterface |
128 self.__ericServerInterface = serverInterface |
129 self.__remotefsInterface = serverInterface.getServiceInterface("FileSystem") |
129 self.__remotefsInterface = serverInterface.getServiceInterface("FileSystem") |
130 |
130 |
131 self.__model = BrowserModel(fsInterface=self.__remotefsInterface) |
131 self.__model = BrowserModel(fsInterface=self.__remotefsInterface) |
132 self.__sortModel = BrowserSortFilterProxyModel() |
132 self.__sortModel = BrowserSortFilterProxyModel(remoteServer=serverInterface) |
133 self.__sortModel.setSourceModel(self.__model) |
133 self.__sortModel.setSourceModel(self.__model) |
134 self.setModel(self.__sortModel) |
134 self.setModel(self.__sortModel) |
135 |
135 |
136 self.selectedItemsFilter = [BrowserFileItem] |
136 self.selectedItemsFilter = [BrowserFileItem] |
137 |
137 |
639 directory = ( |
639 directory = ( |
640 itm.dirName() |
640 itm.dirName() |
641 if isinstance(itm, (BrowserDirectoryItem, BrowserSimpleDirectoryItem)) |
641 if isinstance(itm, (BrowserDirectoryItem, BrowserSimpleDirectoryItem)) |
642 else os.path.dirname(itm.fileName()) |
642 else os.path.dirname(itm.fileName()) |
643 ) |
643 ) |
|
644 if FileSystemUtilities.isRemoteFileName(directory): |
|
645 EricMessageBox.critical( |
|
646 self, |
|
647 self.tr("Show in File Manager"), |
|
648 self.tr( |
|
649 "Directories accessed through an eric-ide server cannot be" |
|
650 " opened in a file manager application. Aborting..." |
|
651 ), |
|
652 ) |
|
653 return |
|
654 |
644 ok = FileSystemUtilities.startfile(directory) |
655 ok = FileSystemUtilities.startfile(directory) |
645 |
656 |
646 if not ok: |
657 if not ok: |
647 EricMessageBox.warning( |
658 EricMessageBox.warning( |
648 self, |
659 self, |
853 def __refreshDirectory(self): |
864 def __refreshDirectory(self): |
854 """ |
865 """ |
855 Private slot to refresh a directory entry. |
866 Private slot to refresh a directory entry. |
856 """ |
867 """ |
857 index = self.currentIndex() |
868 index = self.currentIndex() |
858 refreshDir = self.model().item(index).dirName() |
869 self.__model.refreshDirectory(self.model().mapToSource(index)) |
859 self.__model.directoryChanged(refreshDir) |
|
860 |
870 |
861 @pyqtSlot() |
871 @pyqtSlot() |
862 def __findInDirectory(self): |
872 def __findInDirectory(self): |
863 """ |
873 """ |
864 Private slot to handle the Find in directory popup menu entry. |
874 Private slot to handle the Find in directory popup menu entry. |
1059 self.tr("New Directory"), |
1069 self.tr("New Directory"), |
1060 self.tr("Name for new directory:"), |
1070 self.tr("Name for new directory:"), |
1061 QLineEdit.EchoMode.Normal, |
1071 QLineEdit.EchoMode.Normal, |
1062 ) |
1072 ) |
1063 if ok and bool(newName): |
1073 if ok and bool(newName): |
1064 dirpath = os.path.join(dname, newName) |
1074 if FileSystemUtilities.isRemoteFileName(dname): |
1065 if os.path.exists(dirpath): |
1075 dirpath = self.__remotefsInterface.join(dname, newName) |
|
1076 dirExists = self.__remotefsInterface.exists(dirpath) |
|
1077 else: |
|
1078 dirpath = os.path.join(dname, newName) |
|
1079 dirExists = os.path.exists(dirpath) |
|
1080 if dirExists: |
1066 EricMessageBox.warning( |
1081 EricMessageBox.warning( |
1067 self, |
1082 self, |
1068 self.tr("New Directory"), |
1083 self.tr("New Directory"), |
1069 self.tr( |
1084 self.tr( |
1070 "A file or directory named <b>{0}</b> exists" |
1085 "A file or directory named <b>{0}</b> exists" |
1071 " already. Aborting..." |
1086 " already. Aborting..." |
1072 ).format(newName), |
1087 ).format(newName), |
1073 ) |
1088 ) |
1074 else: |
1089 else: |
1075 try: |
1090 try: |
1076 os.mkdir(dirpath, mode=0o751) |
1091 if FileSystemUtilities.isRemoteFileName(dirpath): |
|
1092 self.__remotefsInterface.mkdir(dirpath, mode=0o751) |
|
1093 else: |
|
1094 os.mkdir(dirpath, mode=0o751) |
1077 except OSError as err: |
1095 except OSError as err: |
1078 EricMessageBox.critical( |
1096 EricMessageBox.critical( |
1079 self, |
1097 self, |
1080 self.tr("New Directory"), |
1098 self.tr("New Directory"), |
1081 self.tr( |
1099 self.tr( |
1097 self.tr("New File"), |
1115 self.tr("New File"), |
1098 self.tr("Name for new file:"), |
1116 self.tr("Name for new file:"), |
1099 QLineEdit.EchoMode.Normal, |
1117 QLineEdit.EchoMode.Normal, |
1100 ) |
1118 ) |
1101 if ok and bool(fname): |
1119 if ok and bool(fname): |
1102 filepath = os.path.join(dname, fname) |
1120 if FileSystemUtilities.isRemoteFileName(dname): |
1103 if os.path.exists(filepath): |
1121 filepath = self.__remotefsInterface.join(dname, fname) |
|
1122 fileExists = self.__remotefsInterface.exists(filepath) |
|
1123 else: |
|
1124 filepath = os.path.join(dname, fname) |
|
1125 fileExists = os.path.exists(filepath) |
|
1126 if fileExists: |
1104 EricMessageBox.warning( |
1127 EricMessageBox.warning( |
1105 self, |
1128 self, |
1106 self.tr("New File"), |
1129 self.tr("New File"), |
1107 self.tr( |
1130 self.tr( |
1108 "A file or directory named <b>{0}</b> exists" |
1131 "A file or directory named <b>{0}</b> exists" |
1109 " already. Aborting..." |
1132 " already. Aborting..." |
1110 ).format(fname), |
1133 ).format(fname), |
1111 ) |
1134 ) |
1112 else: |
1135 else: |
1113 try: |
1136 try: |
1114 with open(filepath, "w"): |
1137 if FileSystemUtilities.isRemoteFileName(filepath): |
1115 pass |
1138 self.__remotefsInterface.writeFile(filepath, b"") |
|
1139 else: |
|
1140 with open(filepath, "w"): |
|
1141 pass |
1116 except OSError as err: |
1142 except OSError as err: |
1117 EricMessageBox.critical( |
1143 EricMessageBox.critical( |
1118 self, |
1144 self, |
1119 self.tr("New File"), |
1145 self.tr("New File"), |
1120 self.tr( |
1146 self.tr( |
1149 self.tr("Do you really want to delete this file?"), |
1175 self.tr("Do you really want to delete this file?"), |
1150 [fn], |
1176 [fn], |
1151 ) |
1177 ) |
1152 if dlg.exec() == QDialog.DialogCode.Accepted: |
1178 if dlg.exec() == QDialog.DialogCode.Accepted: |
1153 try: |
1179 try: |
1154 os.remove(fn) |
1180 if FileSystemUtilities.isRemoteFileName(fn): |
|
1181 self.__remotefsInterface.remove(fn) |
|
1182 else: |
|
1183 os.remove(fn) |
1155 except OSError as err: |
1184 except OSError as err: |
1156 EricMessageBox.critical( |
1185 EricMessageBox.critical( |
1157 self.ui, |
1186 self.ui, |
1158 self.tr("Delete File"), |
1187 self.tr("Delete File"), |
1159 self.tr( |
1188 self.tr( |
1175 self.tr("Do you really want to delete this directory?"), |
1204 self.tr("Do you really want to delete this directory?"), |
1176 [dn], |
1205 [dn], |
1177 ) |
1206 ) |
1178 if dlg.exec() == QDialog.DialogCode.Accepted: |
1207 if dlg.exec() == QDialog.DialogCode.Accepted: |
1179 try: |
1208 try: |
1180 shutil.rmtree(dn, ignore_errors=True) |
1209 if FileSystemUtilities.isRemoteFileName(dn): |
|
1210 self.__remotefsInterface.shutilRmtree(dn, ignore_errors=True) |
|
1211 else: |
|
1212 shutil.rmtree(dn, ignore_errors=True) |
1181 except OSError as err: |
1213 except OSError as err: |
1182 EricMessageBox.critical( |
1214 EricMessageBox.critical( |
1183 self.ui, |
1215 self.ui, |
1184 self.tr("Delete Directory"), |
1216 self.tr("Delete Directory"), |
1185 self.tr( |
1217 self.tr( |
1207 sorted(fileNames), |
1239 sorted(fileNames), |
1208 ) |
1240 ) |
1209 if dlg.exec() == QDialog.DialogCode.Accepted: |
1241 if dlg.exec() == QDialog.DialogCode.Accepted: |
1210 for fn in fileNames: |
1242 for fn in fileNames: |
1211 try: |
1243 try: |
1212 os.remove(fn) |
1244 if FileSystemUtilities.isRemoteFileName(fn): |
|
1245 self.__remotefsInterface.remove(fn) |
|
1246 else: |
|
1247 os.remove(fn) |
1213 except OSError as err: |
1248 except OSError as err: |
1214 EricMessageBox.critical( |
1249 EricMessageBox.critical( |
1215 self.ui, |
1250 self.ui, |
1216 self.tr("Delete File"), |
1251 self.tr("Delete File"), |
1217 self.tr( |
1252 self.tr( |