Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
    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
Beispiel #4
0
    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)
Beispiel #5
0
            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, "", "" )
Beispiel #6
0
            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, "", "" )
Beispiel #7
0
            def __call__( self, filename ):

                try:
                    item = item_Default(
                        self.location,
                        ckit.joinPath( self.dirname, filename )
                        )
                    return item
                except Exception:
                    cfiler_debug.printErrorInfo()
                    return None
Beispiel #8
0
    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' )
Beispiel #9
0
 def getCopy( self, name ):
     path = ckit.joinPath( self.location, name )
     dirname, filename = ckit.splitPath(path)
     return ( lister_Default( self.main_window, dirname ), filename )
Beispiel #10
0
    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)
Beispiel #11
0
 def jobHelp(job_item):
     help_path = ckit.joinPath(ckit.getAppExePath(),
                               'doc\\index.html')
     pyauto.shellExecute(None, help_path, "", "")
Beispiel #12
0
    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()