diff --git a/.gitignore b/.gitignore index 1439162..6b4ab33 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ src/oggenc2.exe src/bootstrap.exe src/Microsoft.VC90.CRT src/Microsoft.VC90.MFC -src/documentation/ \ No newline at end of file +src/documentation/ +src/com_cache/ \ No newline at end of file diff --git a/src/fixes/__init__.py b/src/fixes/__init__.py index 5dac1c5..ec193a5 100644 --- a/src/fixes/__init__.py +++ b/src/fixes/__init__.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- +import sys import fix_requests +import fix_win32com def setup(): fix_requests.fix() - + if hasattr(sys, "frozen"): + fix_win32com.fix() diff --git a/src/fixes/fix_win32com.py b/src/fixes/fix_win32com.py new file mode 100644 index 0000000..5ae96cb --- /dev/null +++ b/src/fixes/fix_win32com.py @@ -0,0 +1,5 @@ +import win32com.client +def fix(): + if win32com.client.gencache.is_readonly == True: + win32com.client.gencache.is_readonly = False + win32com.client.gencache.Rebuild() \ No newline at end of file diff --git a/src/libloader/com.py b/src/libloader/com.py index 29ede4c..82f13db 100644 --- a/src/libloader/com.py +++ b/src/libloader/com.py @@ -1,7 +1,7 @@ from pywintypes import com_error import win32com import paths -win32com.__gen_path__=paths.data_path(u"com_cache") +win32com.__gen_path__=paths.com_path() import sys import os sys.path.append(os.path.join(win32com.__gen_path__, ".")) @@ -32,3 +32,9 @@ def load_com(*names): raise com_error("Unable to load any of the provided com objects.") return result + +def preexec(): + global fixed + if fixed==False: + gencache._GetModule=patched_getmodule + fixed=True diff --git a/src/main.py b/src/main.py index 77ecb4c..7041811 100644 --- a/src/main.py +++ b/src/main.py @@ -3,13 +3,13 @@ import sys import fixes if hasattr(sys, "frozen"): fixes.setup() +import logger import platform import languageHandler import widgetUtils import paths import config import output -import logger import logging import keys import application diff --git a/src/output.py b/src/output.py index c655be8..c5127d7 100644 --- a/src/output.py +++ b/src/output.py @@ -1,28 +1,37 @@ # *- coding: utf-8 -*- import logging as original_logging -logging = original_logging.getLogger('core.output') +logger = original_logging.getLogger('core.output') from accessible_output2 import outputs import sys speaker = None +retries = 0 def speak(text, interrupt=0): - global speaker + global speaker, retries if not speaker: setup() - speaker.speak(text, interrupt) - speaker.braille(text) + try: + speaker.speak(text, interrupt) + except: + if retries < 5: + retries = retries + 1 + speak(text) +# speaker.braille(text) def setup (): global speaker - logging.debug("Initializing output subsystem.") + logger.debug("Initializing output subsystem.") try: # speaker = speech.Speaker(speech.outputs.Sapi5()) # else: speaker = outputs.auto.Auto() except: - return logging.exception("Output: Error during initialization.") + logger.exception("Output: Error during initialization.") + +def enable_sapi(): + speaker = outputs.sapi.SAPI5() def copy(text): import win32clipboard diff --git a/src/paths.py b/src/paths.py index a1767cd..715c779 100644 --- a/src/paths.py +++ b/src/paths.py @@ -64,4 +64,17 @@ def locale_path(): @merge_paths def sound_path(): - return app_path(u"sounds") \ No newline at end of file + return app_path(u"sounds") + +@merge_paths +def com_path(): + global mode, directory + if mode == "portable": + if directory != None: path = os.path.join(directory, "com_cache") + elif directory == None: path = app_path(u"com_cache") + elif mode == "installed": + path = data_path(u"com_cache") + if not os.path.exists(path): + log.debug("%s path does not exist, creating..." % (path,)) + os.mkdir(path) + return path