def onCandidate( self, update_info ): pane = self.main_window.activePane() basedir = pane.file_list.getLocation() left = update_info.text[ : update_info.selection[0] ] left_lower = left.lower() pos_arg = left.rfind(";")+1 arg = left[ pos_arg : ] pos_dir = max( arg.rfind("/")+1, arg.rfind("\\")+1 ) directory = arg[:pos_dir] directory_lower = directory.lower() name_prefix = arg[pos_dir:].lower() dirname_list = [] filename_list = [] candidate_list = [] if len(arg)>0: try: path = ckit.joinPath( basedir, directory ) unc = os.path.splitunc(path) if unc[0]: cfiler_misc.checkNetConnection(path) if unc[0] and not unc[1]: servername = unc[0].replace('/','\\') infolist = cfiler_native.enumShare(servername) for info in infolist: if info[1]==0: if info[0].lower().startswith(name_prefix): if ckit.pathSlash(): dirname_list.append( info[0] + "/" ) else: dirname_list.append( info[0] + "\\" ) else: infolist = cfiler_native.findFile( ckit.joinPath(path,'*'), use_cache=True ) for info in infolist: if info[0].lower().startswith(name_prefix): if info[3] & ckit.FILE_ATTRIBUTE_DIRECTORY: if ckit.pathSlash(): dirname_list.append( info[0] + "/" ) else: dirname_list.append( info[0] + "\\" ) else: filename_list.append( info[0] ) except Exception: cfiler_debug.printErrorInfo() for item in self.command_list: item_lower = item[0].lower() if item_lower.startswith(left_lower) and len(item_lower)!=len(left_lower): candidate_list.append( item[0] ) for item in self.main_window.enumCommand(): item_lower = item.lower() if item_lower.startswith(left_lower) and len(item_lower)!=len(left_lower): candidate_list.append( item ) return dirname_list + filename_list + candidate_list
def onCandidate(self, update_info): basedir = "." left = update_info.text[:update_info.selectionLeft()] left_lower = left.lower() pos_arg = left.rfind(";") + 1 arg = left[pos_arg:] pos_dir = max(arg.rfind("/") + 1, arg.rfind("\\") + 1) directory = arg[:pos_dir] directory_lower = directory.lower() name_prefix = arg[pos_dir:].lower() dirname_list = [] filename_list = [] candidate_list = [] if len(directory) > 0: try: path = ckit.joinPath(basedir, directory) drive, tail = os.path.splitdrive(path) unc = (drive.startswith("\\\\") or drive.startswith("//")) if unc: clnch_misc.checkNetConnection(path) if unc and not tail: servername = drive.replace('/', '\\') infolist = clnch_native.enumShare(servername) for info in infolist: if info[1] == 0: if info[0].lower().startswith(name_prefix): if ckit.pathSlash(): dirname_list.append(info[0] + "/") else: dirname_list.append(info[0] + "\\") else: infolist = clnch_native.findFile(ckit.joinPath(path, '*'), use_cache=True) for info in infolist: if info[0].lower().startswith(name_prefix): if info[3] & ckit.FILE_ATTRIBUTE_DIRECTORY: if ckit.pathSlash(): dirname_list.append(info[0] + "/") else: dirname_list.append(info[0] + "\\") else: filename_list.append(info[0]) except: pass for item in self.command_list: item_lower = item[0].lower() if item_lower.startswith(left_lower): candidate_list.append(item[0]) return dirname_list + filename_list + candidate_list
def onCandidate( self, update_info ): basedir = "." left = update_info.text[ : update_info.selectionLeft() ] left_lower = left.lower() pos_arg = left.rfind(";")+1 arg = left[ pos_arg : ] pos_dir = max( arg.rfind("/")+1, arg.rfind("\\")+1 ) directory = arg[:pos_dir] directory_lower = directory.lower() name_prefix = arg[pos_dir:].lower() dirname_list = [] filename_list = [] candidate_list = [] if len(directory)>0: try: path = ckit.joinPath( basedir, directory ) drive, tail = os.path.splitdrive(path) unc = ( drive.startswith("\\\\") or drive.startswith("//") ) if unc: clnch_misc.checkNetConnection(path) if unc and not tail: servername = drive.replace('/','\\') infolist = clnch_native.enumShare(servername) for info in infolist: if info[1]==0: if info[0].lower().startswith(name_prefix): if ckit.pathSlash(): dirname_list.append( info[0] + "/" ) else: dirname_list.append( info[0] + "\\" ) else: infolist = clnch_native.findFile( ckit.joinPath(path,'*'), use_cache=True ) for info in infolist: if info[0].lower().startswith(name_prefix): if info[3] & ckit.FILE_ATTRIBUTE_DIRECTORY: if ckit.pathSlash(): dirname_list.append( info[0] + "/" ) else: dirname_list.append( info[0] + "\\" ) else: filename_list.append( info[0] ) except: pass for item in self.command_list: item_lower = item[0].lower() if item_lower.startswith(left_lower): candidate_list.append( item[0] ) return dirname_list + filename_list + candidate_list
def __call__( self, update_info ): left = update_info.text[ : update_info.selection[0] ] pos_dir = max(left.rfind("/")+1,left.rfind("\\")+1) directory = left[:pos_dir] directory_lower = directory.lower() name_prefix = left[pos_dir:].lower() dirname_list = [] filename_list = [] for item in self.fixed_items: item_lower = item.lower() if item_lower.startswith(directory_lower): item_lower = item_lower[ len(directory_lower) : ] if item_lower.startswith(name_prefix) and len(item_lower)!=len(name_prefix): filename_list.append( item[ len(directory_lower) : ] ) path = ckit.joinPath( self.basedir, directory ) drive, tail = os.path.splitdrive(path) unc = ( drive.startswith("\\\\") or drive.startswith("//") ) if unc: checkNetConnection(path) if unc and not tail: servername = drive.replace('/','\\') try: infolist = cfiler_native.enumShare(servername) except WindowsError: infolist = [] for info in infolist: if info[1]==0: if info[0].lower().startswith(name_prefix): if ckit.pathSlash(): dirname_list.append( info[0] + "/" ) else: dirname_list.append( info[0] + "\\" ) else: try: infolist = cfiler_native.findFile( ckit.joinPath(path,'*'), use_cache=True ) except WindowsError: infolist = [] for info in infolist: if info[0].lower().startswith(name_prefix): if info[3] & ckit.FILE_ATTRIBUTE_DIRECTORY: if ckit.pathSlash(): dirname_list.append( info[0] + "/" ) else: dirname_list.append( info[0] + "\\" ) else: filename_list.append( info[0] ) return dirname_list + filename_list, len(directory)
def jobHelp(job_item): if ckit.strings.locale == ckit.TranslatedStrings.ja_JP: dirname = "ja" else: dirname = "en" help_path = ckit.joinPath( ckit.getAppExePath(), 'doc\\%s\\index.html' % dirname ) pyauto.shellExecute( None, help_path, "", "" )
def __call__( self, filename ): try: item = item_Default( self.location, ckit.joinPath( self.dirname, filename ) ) return item except Exception: cfiler_debug.printErrorInfo() return None
def mkdir( self, name, log_writer=None ): if not log_writer: def logWriter(s) : pass log_writer = logWriter fullpath = ckit.joinPath( self.location, name ) log_writer( 'ディレクトリ作成 : %s …' % fullpath ) if os.path.exists(fullpath) and os.path.isdir(fullpath): log_writer( 'すでに存在\n' ) return try: os.makedirs(fullpath) except Exception as e: cfiler_debug.printErrorInfo() log_writer( '失敗\n' ) log_writer( " %s\n" % str(e) ) else: log_writer( '完了\n' )
def getCopy( self, name ): path = ckit.joinPath( self.location, name ) dirname, filename = ckit.splitPath(path) return ( lister_Default( self.main_window, dirname ), filename )
def delete( self, recursive, item_filter, schedule_handler, log_writer=None ): if not log_writer: def logWriter(s) : pass log_writer = logWriter def remove_file( filename ): log_writer( 'ファイル削除 : %s …' % filename ) try: # READONLY属性を落とさないと削除できない attr = ckit.getFileAttribute(filename) if attr & ckit.FILE_ATTRIBUTE_READONLY: attr &= ~ckit.FILE_ATTRIBUTE_READONLY ckit.setFileAttribute(filename,attr) # 削除 os.unlink(filename) except Exception as e: cfiler_debug.printErrorInfo() log_writer( '失敗\n' ) log_writer( " %s\n" % str(e) ) else: log_writer( '完了\n' ) def remove_dir( filename, check_empty=True ): log_writer( 'ディレクトリ削除 : %s …' % filename ) if check_empty and len(os.listdir(filename))>0: log_writer( '空ではない\n' ) return try: # READONLY属性を落とさないと削除できない attr = ckit.getFileAttribute(filename) if attr & ckit.FILE_ATTRIBUTE_READONLY: attr &= ~ckit.FILE_ATTRIBUTE_READONLY ckit.setFileAttribute(filename,attr) # 削除 os.rmdir(filename) except Exception as e: cfiler_debug.printErrorInfo() log_writer( '失敗\n' ) log_writer( " %s\n" % str(e) ) else: log_writer( '完了\n' ) fullpath = ckit.joinPath( self.location, self.name ) if self.isdir(): # シンボリックリンクやジャンクションは、再帰で削除しない if self._attr & ckit.FILE_ATTRIBUTE_REPARSE_POINT: remove_dir( fullpath, check_empty=False ) elif recursive: for root, dirs, files in os.walk( fullpath, False ): if schedule_handler(): return root = ckit.replacePath(root) for name in files: if schedule_handler(): return if item_filter==None or item_filter( item_Default(root,name) ): remove_file( ckit.joinPath(root, name) ) if schedule_handler(): return remove_dir(root) else: remove_dir(fullpath) else: remove_file(fullpath)
def jobHelp(job_item): help_path = ckit.joinPath(ckit.getAppExePath(), 'doc\\index.html') pyauto.shellExecute(None, help_path, "", "")
def mkdir( self, name, log_writer=None ): comtypes.CoInitializeEx(comtypes.COINIT_MULTITHREADED) try: if not log_writer: def logWriter(s) : pass log_writer = logWriter fullpath = ckit.joinPath( self.location, name ) log_writer( 'ディレクトリ作成 : %s …' % fullpath ) if self.exists(name): log_writer( 'すでに存在\n' ) return dirs = [] for i in name.split("\\"): dirs += i.split("/") folder_obj = self.folder_obj for dirname in dirs: already_exist = False for i in folder_obj.Items(): if i.Name.lower()==dirname.lower(): already_exist = True break if not already_exist: # NewFolder は サポートされていないので、CopyHereをつかってディレクトリ作成を模倣する tmp_dir_path = cfiler_misc.makeTempDir( "networkplace_" ) tmp_dir_path2 = os.path.join( tmp_dir_path, dirname ) os.mkdir(tmp_dir_path2) tmp_dir_path2 = os.path.abspath( os.path.normpath(tmp_dir_path2) ) result = folder_obj.CopyHere(tmp_dir_path2) # CopyHere は非同期なので、実際にコピーが完了するまで待つ while 1: exist = False for i in folder_obj.Items(): if i.Name.lower()==dirname.lower(): exist = True break if exist : break time.sleep(0.1) # CopyHere が実際に完了するタイミングがわからないので、ここで削除しない #shutil.rmtree(tmp_dir_path,ignore_errors=True) if result : break for i in folder_obj.Items(): if i.Name.lower()==dirname.lower(): folder_obj = i.GetFolder break if result: log_writer( '失敗\n' ) else: log_writer( '完了\n' ) finally: comtypes.CoUninitialize()