forked from actlaboratory/falcon
-
Notifications
You must be signed in to change notification settings - Fork 0
/
workerThreadTasks.py
74 lines (67 loc) · 2.9 KB
/
workerThreadTasks.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# -*- coding: utf-8 -*-
#Falcon worker thread tasks
#Copyright (C) 2019 Yukio Nozawa <personal@nyanchangames.com>
#Note: All comments except these top lines will be written in Japanese.
"""
ワーカースレッドで実行されるタスクは、ここに並べます。
ワーカースレッドのタスクは、必ず taskState と param という辞書を引数にとり、それを使って処理します。
定期的に taskState.canceled プロパティをチェックして、 True になっていれば、処理を中断しなければなりません。その際には、 False を返します。処理を最後まで実行したら、 True を返す必要があります。
"""
import pathlib
import wx
import globalVars
import misc
import time
def DirCalc(taskState,param):
"""
計算結果は(インデックス番号,バイト単位のサイズint値)で返る。
取得失敗時に-1となる場合があるので要注意
"""
lst=param['lst']
results=[]
for elem in lst:
if taskState.canceled: return False
s=misc.GetDirectorySize(elem[1])
results.append((elem[0],s))
#end 成功か失敗か
#end for
if taskState.canceled: return False
wx.CallAfter(param['callback'],results,taskState)
return True
def GetRecursiveFileList(taskState,param):
"""
path から全てのフォルダを再帰的にたどって、ファイル名を out のリストに入れていく。なお、入る値は、 path からの相対パス。EOL=True にしておくと、ファイルリストを全部なめた段階で、eol という文字列をリストに追加してから終了する。検索終了の判定に使っている。
"""
out_lst=param['out_lst']
path=param['path']
for elem in misc.IteratePaths(path):
if taskState.canceled: return False
out_lst.append(str(pathlib.Path(elem).relative_to(path)))
#end ファイルリストをガンガン入れる
if taskState.canceled: return False
if param['eol']: out_lst.append('eol')
return True
def PerformSearch(taskState,param):
"""
検索のバックグラウンド処理。listObject の検索メソッドを実行して、見つかった者を tabObject のほうに通知しながら、リアルタイムな検索結果表示を実現している。
"""
l=param['listObject']
t=param['tabObject']
while(True):
if taskState.canceled: return False
finished,hits=l._performSearchStep(taskState)
if hits==-1: return False#検索処理からキャンセルで戻ってきた
if len(hits)>0: wx.CallAfter(t._onSearchHitCallback,hits)
if finished: break#全て検索した
time.sleep(0.1)
#end 検索ループ
return True
for elem in misc.IteratePaths(param['path']):
if taskState.canceled: return False
def DebugBeep(taskState,param):
for i in range(10):
if taskState.canceled: return False
globalVars.app.PlaySound("tip.ogg")
time.sleep(1)
#end for
return True