src/eric7/UI/Browser.py

branch
eric7
changeset 10949
2057b1b198a5
parent 10918
056bd087096f
child 11090
f5f5f5803935
equal deleted inserted replaced
10948:89b36a39fe69 10949:2057b1b198a5
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(
1189 ) 1221 )
1190 1222
1191 @pyqtSlot() 1223 @pyqtSlot()
1192 def __deleteMultiple(self): 1224 def __deleteMultiple(self):
1193 """ 1225 """
1194 Private slot to delete multiple directories and files. 1226 Private slot to delete multiple files.
1195 1227
1196 Note: The context menu for multi selection is only shown for file 1228 Note: The context menu for multi selection is only shown for file
1197 items. 1229 items.
1198 """ 1230 """
1199 fileNames = [] 1231 fileNames = []
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(

eric ide

mercurial