示例#1
0
 def HitTest(self, path, ret_list):
     """_performSearchStepから呼ばれ、与えられたpathのファイルが検索にヒットするならリスト追加する"""
     if misc.isDocumentExt(path.split(".")[-1]):
         fullpath = os.path.join(self.rootDirectory, path)
         content = misc.ExtractText(fullpath).split("\n")
         fileobj = None  # 複数ヒットでファイルオブジェクトを生成し続けないようにキャッシュする
         ln = 1
         hitobjects = []
         for elem in content:
             m = re.search(self.keyword, elem)
             if m:
                 preview_start = max(0, m.start() - 10)
                 preview = elem[preview_start:preview_start + 25]
                 if not fileobj:
                     fileobj = self._MakeObject(browsableObjects.File,
                                                fullpath)
                 obj = browsableObjects.GrepItem()
                 obj.Initialize(ln, preview, fileobj)
                 hitobjects.append(obj)
             # end ヒット
             ln += 1
         # end 行数ごとに検索
         for elem in hitobjects:
             hits = len(hitobjects)
             elem.SetHitCount(hits)
         # end 最終的なヒットカウントを設定
         self.results.extend(hitobjects)
         ret_list.extend(hitobjects)
         return len(hitobjects)
     # end 対応している拡張子
     return 0
示例#2
0
 def ReadFooter(self):
     ext = self.GetFocusedElement().fullpath.split(".")[-1].lower()
     if not misc.isDocumentExt(ext):
         globalVars.app.say(_("ドキュメントファイルではありません。"), interrupt=True)
         return
     #end 非対応
     ln = globalVars.app.config.getint("preview", "footer_line_count", 10,
                                       1, 100)
     s = misc.ExtractText(self.GetFocusedElement().fullpath).split("\n")
     if len(s) > 10: s = s[-10:]
     prefix = _("末尾%(ln)d行") % {'ln': ln}
     globalVars.app.say("%s %s" % (prefix, "\n".join(s)), interrupt=True)
示例#3
0
文件: base.py 项目: yncat/falcon
 def Preview(self):
     ext = self.GetFocusedElement().fullpath.split(".")[-1].lower()
     if ext in constants.SUPPORTED_AUDIO_FORMATS:
         self.StopSound()
         ret = globalVars.app.PlaySound(self.GetFocusedElement().fullpath,
                                        custom_location=True,
                                        volume=globalVars.app.config.getint(
                                            "preview", "audio_volume", 100,
                                            1, 300))
         if ret == -1:
             dialog(_("エラー"),
                    _("再生に失敗しました。ファイルにアクセスができないか、ファイルが壊れている可能性があります。"))
             return errorCodes.FILE_NOT_FOUND
         self.stopSoundHandle = ret
     elif misc.isDocumentExt(ext):
         globalVars.app.say(misc.ExtractText(
             self.GetFocusedElement().fullpath),
                            interrupt=True)
     else:
         globalVars.app.say(_("プレビューに対応していないファイル形式です。"), interrupt=True)
示例#4
0
 def _performSearchStep(self, taskState):
     """検索を1ステップ実行する。100県のヒットが出るまで検索するか、リストが終わるまで検索し、終わったら関数から抜ける。途中で EOL に当たったら、検索終了としてTrueを返し、そうでないときにFalseを帰す。また、表示関数に渡しやすいように、今回のステップでヒットした要素のリストも返す。スレッドからtaskStateを受け取っていて、キャンセルされたら hits を-1にセットして抜ける。"""
     ret_list = []
     i = self.searched_index
     eol = False
     total_hits = 0
     while (True):
         if taskState.canceled: return False, -1  #途中でキャンセル
         path = self.searches[i]
         if path == "eol":  #EOLで検索終了
             eol = True
             self.finished = True
             globalVars.app.PlaySound("complete.ogg")
             globalVars.app.say(
                 _("検索終了、%(item)d件ヒットしました。") % {'item': len(self)})
             break
         #end EOL
         ext = path.split(".")[-1].lower()
         if misc.isDocumentExt(ext):
             fullpath = os.path.join(self.rootDirectory, path)
             content = misc.ExtractText(fullpath).split("\n")
             fileobj = None  #複数ヒットでファイルオブジェクトを生成し続けないようにキャッシュする
             ln = 1
             hitobjects = []
             for elem in content:
                 m = re.search(self.keyword, elem)
                 if m:
                     preview_start = m.start() - 10
                     if preview_start < 0: preview_start = 0
                     preview = elem[preview_start:preview_start + 20]
                     if not fileobj:
                         stat = os.stat(fullpath)
                         mod = datetime.datetime.fromtimestamp(
                             stat.st_mtime)
                         creation = datetime.datetime.fromtimestamp(
                             stat.st_ctime)
                         ret, shfileinfo = shell.SHGetFileInfo(
                             fullpath, 0,
                             shellcon.SHGFI_ICON | shellcon.SHGFI_TYPENAME)
                         fileobj = browsableObjects.File()
                         fileobj.Initialize(
                             os.path.dirname(fullpath),
                             os.path.basename(fullpath), fullpath,
                             stat.st_size, mod,
                             win32file.GetFileAttributes(fullpath),
                             shfileinfo[4], creation,
                             win32api.GetShortPathName(fullpath))
                     #end make fileobj
                     obj = browsableObjects.GrepItem()
                     obj.Initialize(ln, preview, fileobj)
                     hitobjects.append(obj)
                 #end ヒット
                 ln += 1
             #end 行数ごとに検索
             if len(hitobjects) > 0:  #このファイルの中でヒットがあった
                 total_hits += len(hitobjects)
                 for elem in hitobjects:
                     hits = len(hitobjects)
                     elem.SetHitCount(hits)
                 #end 最終的なヒットカウントを設定
                 self.results.extend(hitobjects)
                 ret_list.extend(hitobjects)
             #end このファイルでヒットがあった
         #end 対応している拡張子
         if total_hits >= 100:
             self.searched_index = i + 1  #次の位置をキャッシュ
             break
         #end 100県検索
         i += 1
         if i >= len(self.searches):  #検索は終わってないが、ファイルリスト取得が追いついてない
             self.searched_index = len(self.searches)
             break
         #end リストが追いついてない
     #end 検索ループ
     return eol, ret_list