-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.py
129 lines (109 loc) · 3.43 KB
/
app.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# -*- coding: utf-8 -*-
# Soc Main
import locale
import _locale
import os
import proxyUtil
import pathlib
import sys
import threading
import tempfile
import AppBase
import constants
import CredentialManager
import errorCodes
import globalVars
import update
import util
from simpleDialog import *
from sources.file import fileSource
class Main(AppBase.MainBase):
def __init__(self):
super().__init__()
def initialize(self):
"""アプリを初期化する。"""
self.initTempDir()
# プロキシの設定を適用
self.proxyEnviron = proxyUtil.virtualProxyEnviron()
self.setProxyEnviron()
# googleのCredentialを準備
self.credentialManager=CredentialManager.CredentialManager()
self.setGlobalVars()
self.installThreadExcepthook()
# update関係を準備
if self.config.getboolean("general", "update"):
globalVars.update.update(True)
self.SetDefaultEncoding()
#popplerにパスを通す
os.environ["PATH"] += os.pathsep + os.getcwd() + "/poppler/bin"
# メインビューを表示
from views import main
self.hMainView=main.MainView()
if self.config.getboolean(self.hMainView.identifier,"maximized",False):
self.hMainView.hFrame.Maximize()
self.hMainView.Show()
globalVars.jobList[0].setOnEvent(self.hMainView.evtReceiver.onEvent)
if len(sys.argv) < 2:
return True
import views.new
dialog = views.new.Dialog()
dialog.Initialize(sys.argv[1:])
dialog.Show()
return True
def initTempDir(self):
dir = None
setting = os.path.expandvars(self.config.getstring("ocr", "tmpdir", ""))
try:
if setting:
os.makedirs(setting, exist_ok=True)
if os.access(setting,os.W_OK):
dir = setting
else:
self.log.error("setting tempdir %s access failed" % setting)
except Exception as e:
self.log.error(str(e))
self.tmpDir = tempfile.TemporaryDirectory(dir=dir)
self.log.info("tmpdir path:" + self.tmpDir.name)
def setProxyEnviron(self):
if self.config.getboolean("proxy", "usemanualsetting", False) == True:
self.proxyEnviron.set_environ(self.config["proxy"]["server"], self.config.getint("proxy", "port", 8080, 0, 65535))
else:
self.proxyEnviron.set_environ()
#windows標準のコードページではなくUTF-8を強制するHack
def SetDefaultEncoding(self):
country=_locale._getdefaultlocale()[0]
_locale._getdefaultlocale = (lambda *args: ([country,'utf8']))
def setGlobalVars(self):
globalVars.update = update.update()
import ocrManager
globalVars.manager = ocrManager.manager()
import jobObjects
globalVars.jobList.append(jobObjects.virtualAllItemJob())
return
def getTmpDir(self):
return self.tmpDir.name
def OnExit(self):
#設定の保存やリソースの開放など、終了前に行いたい処理があれば記述できる
#ビューへのアクセスや終了の抑制はできないので注意。
# managerを止める
globalVars.manager = None
#一時ディレクトリを削除する
self.tmpDir.cleanup()
# プロキシの設定を元に戻す
if self.proxyEnviron != None: self.proxyEnviron.unset_environ()
# アップデート
globalVars.update.runUpdate()
#戻り値は無視される
return 0
def installThreadExcepthook(self):
_init = threading.Thread.__init__
def init(self, *args, **kwargs):
_init(self, *args, **kwargs)
_run = self.run
def run(*args, **kwargs):
try:
_run(*args, **kwargs)
except:
sys.excepthook(*sys.exc_info())
self.run = run
threading.Thread.__init__ = init