def UpdateFilelist(self, silence=False, cursorTargetName=""): """検索をやり直す。ファイルは非同期処理で増えるので、cursorTargetNameは使用されない。""" if not self.tempListObject.GetFinishedStatus(): globalVars.app.say(_("現在検索中です。再建策はできません。"), interrupt=True) return # end まだ検索終わってない if not silence: globalVars.app.say(_("再建策"), interrupt=True) # end not silence self.DeleteAllItems() searches = [] self.listObject.RedoSearch(searches) task = workerThreads.RegisterTask( workerThreadTasks.GetRecursiveFileList, { 'path': self.listObject.rootDirectory, 'out_lst': searches, 'eol': True }) self.tempListObject = self.listType() self.tempListObject.Initialize(self.listObject.rootDirectory, searches, keyword, isRegularExpression) workerThreads.RegisterTask(workerThreadTasks.PerformSearch, { 'listObject': self.tempListObject, 'tabObject': self })
def Search(self): basePath = self.parent.activeTab.listObject.rootDirectory out_lst = [] # 入力画面が出てるときに、もうファイルリスト取得を開始してしまう task = workerThreads.RegisterTask(workerThreadTasks.GetRecursiveFileList, {'path': basePath, 'out_lst': out_lst, 'eol': True}) searchHistory = history.History(globalVars.app.config.getint("search", "history_count", 0, 0, 100), False) grepHistory = history.History(globalVars.app.config.getint("search", "history_count", 0, 0, 100), False) hist = {} try: with open(constants.HISTORY_FILE_NAME, 'rb') as f: hist = pickle.load(f) searchHistory.lst = hist["search"] searchHistory.cursor = len(hist["search"]) - 1 grepHistory.lst = hist["grep"] grepHistory.cursor = len(hist["grep"]) - 1 except BaseException: pass d = views.search.Dialog(basePath, list(reversed(searchHistory.getList())), list(reversed(grepHistory.getList()))) d.Initialize() canceled = False while(True): ret = d.Show() if ret == wx.ID_CANCEL: task.Cancel() canceled = True break # end キャンセルして抜ける val = d.GetValue() if val['isRegularExpression']: ret = misc.ValidateRegularExpression(val['keyword']) if ret != "OK": dialog(_("エラー"), _("正規表現の文法が間違っています。\nエラー内容: %(error)s") % {'error': ret}) continue # end 正規表現違う # end 正規表現モードがオンかどうか break # end 入力が正しくなるまで if canceled: return actionstr = "search" if val['type'] == 0 else "grep" target = { 'action': actionstr, 'basePath': basePath, 'out_lst': out_lst, 'keyword': val['keyword'], 'isRegularExpression': val['isRegularExpression']} self.parent.Navigate(target, as_new_tab=True) if val['type'] == 0: searchHistory.add(val['keyword']) else: grepHistory.add(val['keyword']) hist["search"] = searchHistory.getList() hist["grep"] = grepHistory.getList() try: with open(constants.HISTORY_FILE_NAME, 'wb') as f: pickle.dump(hist, f) except BaseException: pass
def StartSearch(self,rootPath,searches,keyword, isRegularExpression): self.listObject=lists.SearchResultList() self.listObject.Initialize(rootPath,searches,keyword, isRegularExpression) self.SetListColumns(self.listObject) workerThreads.RegisterTask(workerThreadTasks.PerformSearch,{'listObject': self.listObject, 'tabObject': self}) #タブの名前変更を通知 globalVars.app.hMainView.UpdateTabName()
def _getNetworkList(self): if self.networkListTask is not None: self.networkListTask.Cancel() self.networkListTask = None # end cancel previous self.networkListTask = workerThreads.RegisterTask( workerThreadTasks.GetNetworkResources, { "isReady": self.isReady, "onAppend": self.OnAppendNetworkResource, "onFinish": self.OnFinishNetworkResource })
def UpdateFilelist(self,silence=False,cursorTargetName=""): """検索をやり直す。ファイルは非同期処理で増えるので、cursorTargetNameは使用されない。""" if not self.listObject.GetFinishedStatus(): globalVars.app.say(_("現在検索中です。再建策はできません。"), interrupt=True) return #end まだ検索終わってない if silence==False: globalVars.app.say(_("再建策"), interrupt=True) #end not silence self.hListCtrl.DeleteAllItems() self.listObject.RedoSearch() workerThreads.RegisterTask(workerThreadTasks.PerformSearch,{'listObject': self.listObject, 'tabObject': self})
def DirCalc(self): lst = [] for i in self.GetSelectedItems(index_mode=True): elem = self.listObject.GetElement(i) elem.size = constants.DIR_SIZE_CALCURATING self.hListCtrl.RefreshItem(i) lst.append((i, elem.fullpath)) # end for param = {'lst': lst, 'callback': self._dirCalc_receive} self.background_tasks.append( workerThreads.RegisterTask( workerThreadTasks.DirCalc, param))
def DirCalc(self): lst = [] for i in self.GetSelectedItems(index_mode=True): elem = self.listObject.GetElement(i) if elem.__class__.__name__ == "Folder": self.hListCtrl.SetItem(index=i, column=1, label=_("<計算中>")) lst.append((i, elem.fullpath)) #end フォルダだったら #end for param = {'lst': lst, 'callback': self._dirCalc_receive} self.background_tasks.append( workerThreads.RegisterTask(workerThreadTasks.DirCalc, param))
def Search(self): basePath = self.parent.activeTab.listObject.rootDirectory out_lst = [] #入力画面が出てるときに、もうファイルリスト取得を開始してしまう task = workerThreads.RegisterTask( workerThreadTasks.GetRecursiveFileList, { 'path': basePath, 'out_lst': out_lst, 'eol': True }) d = views.search.Dialog(basePath) d.Initialize() canceled = False while (True): ret = d.Show() if ret == wx.ID_CANCEL: task.Cancel() canceled = True break #end キャンセルして抜ける val = d.GetValue() if val['isRegularExpression']: ret = misc.ValidateRegularExpression(val['keyword']) if ret != "OK": dialog( _("エラー"), _("正規表現の文法が間違っています。\nエラー内容: %(error)s") % {'error': ret}) continue #end 正規表現違う #end 正規表現モードがオンかどうか break #end 入力が正しくなるまで d.Destroy() if canceled: return actionstr = "search" if val['type'] == 0 else "grep" target = { 'action': actionstr, 'basePath': basePath, 'out_lst': out_lst, 'keyword': val['keyword'], 'isRegularExpression': val['isRegularExpression'] } self.parent.Navigate(target, as_new_tab=True)
def FileOperationTest(self): if self.task: self.task.Cancel() else: self.task = workerThreads.RegisterTask(workerThreadTasks.DebugBeep)
def ShowDetail(self, elem): d = views.objectDetail.Dialog() d.Initialize() d.add(_("名前"), elem.basename) d.add(_("パス"), elem.fullpath) if isinstance(elem, browsableObjects.File) or isinstance(elem, browsableObjects.Stream): if elem.size >= 0: d.add(_("サイズ"), misc.ConvertBytesTo(elem.size, misc.UNIT_AUTO, True)) d.add(_("サイズ(バイト)"), elem.size) if isinstance(elem, browsableObjects.Folder): d.add(_("内容"), _("ファイル数: %d サブディレクトリ数: %d") % (elem.fileCount, elem.dirCount)) elif isinstance(elem, browsableObjects.Folder): d.add(_("サイズ"), d.CALCURATING) d.add(_("サイズ(バイト)"), d.CALCURATING) d.add(_("内容"), d.CALCURATING) param = {'lst': [(0, elem.fullpath)], 'callback': d.setDirCalcResult} d.setTask(workerThreads.RegisterTask(workerThreadTasks.DirCalc, param)) if isinstance(elem, browsableObjects.File): d.add(_("作成日時"), elem.creationDate.strftime("%Y/%m/%d(%a) %H:%M:%S")) d.add(_("更新日時"), elem.modDate.strftime("%Y/%m/%d(%a) %H:%M:%S")) d.add(_("属性"), elem.longAttributesString) d.add(_("種類"), elem.typeString) if not elem.shortName == "": d.add(_("短い名前"), elem.shortName) else: d.add(_("短い名前"), _("なし")) h = win32file.CreateFile( elem.fullpath, 0, win32file.FILE_SHARE_READ | win32file.FILE_SHARE_WRITE, None, win32file.OPEN_EXISTING, win32file.FILE_FLAG_BACKUP_SEMANTICS, # これがないとディレクトリを開けない 0) info = win32file.GetFileInformationByHandleEx(h, win32file.FileStandardInfo) if info: d.add(_("消費ディスク領域"), misc.ConvertBytesTo(info["AllocationSize"], misc.UNIT_AUTO, True) + " (" + str(info["AllocationSize"]) + " bytes)") tmp = "" if info["DeletePending"]: tmp += _("削除予約済 ") if info["NumberOfLinks"] > 1: tmp += _("ハードリンクにより他の %d 箇所から参照" % (info["NumberOfLinks"] - 1)) if tmp == "": tmp = _("なし") d.add(_("追加情報"), tmp) if isinstance(elem, browsableObjects.Drive): if elem.free >= 0: d.add(_("フォーマット"), fileSystemManager.GetFileSystemObject(elem.letter)) if elem.total > 0: d.add(_("空き容量"), "%s (%s%%)" % (misc.ConvertBytesTo(elem.free, misc.UNIT_AUTO, True), elem.free * 100 // elem.total)) else: d.add(_("空き容量"), misc.ConvertBytesTo(elem.free, misc.UNIT_AUTO, True)) d.add(_("総容量"), misc.ConvertBytesTo(elem.total, misc.UNIT_AUTO, True)) else: d.add(_("フォーマット"), _("未挿入")) d.add(_("種類"), elem.typeString) if isinstance(elem, browsableObjects.NetworkResource) and elem.address != "": d.add(_("IPアドレス"), elem.address) d.Show() return