diff --git a/src/CNIRevelator.py b/src/CNIRevelator.py index 6437287..7320770 100644 --- a/src/CNIRevelator.py +++ b/src/CNIRevelator.py @@ -28,30 +28,32 @@ import os import subprocess import threading import traceback +import psutil -import launcher # launcher.py -import ihm # ihm.py -import logger # logger.py -import updater # updater.py -import globs # globs.py +import launcher # launcher.py +import updater # updater.py +import globs # globs.py +import pytesseract # pytesseract.py ## MAIN FUNCTION OF CNIREVELATOR def main(): + import logger # logger.py + logfile = logger.logMain - import CNI_pytesseract as pytesseract try: - os.environ['PATH'] = CST_FOLDER + 'Tesseract-OCR4\\' - os.environ['TESSDATA_PREFIX'] = CST_FOLDER + 'Tesseract-OCR4\\tessdata' + os.environ['PATH'] = globs.CNIRFolder + '\\Tesseract-OCR4\\' + os.environ['TESSDATA_PREFIX'] = globs.CNIRFolder + '\\Tesseract-OCR4\\tessdata' tesser_version = pytesseract.get_tesseract_version() except Exception as e: - logger.error('main() : **** ERROR WITH TESSERACT MODULE ' + str(e) + ' ****') + logfile.printerr('ERROR WITH TESSERACT MODULE ' + str(e)) else: text = 'Tesseract version ' + str(tesser_version) + ' Licensed Apache 2004 successfully initiated\n' main_w.montext(text) + main_w.montext('\n\nEntrez la première ligne de MRZ svp \n') - if CST_CHANGELOG.isOn: - showinfo('Changelog : résumé de mise à jour', ('Version du logiciel : ' + CST_VER + ' ' + CST_TYPE + ' Revision ' + CST_REV + '\n\n' + CST_CHANGELOG.text), parent=main_w) + if globs.CNIRNewVersion: + showinfo('Changelog : résumé de mise à jour', ('Version du logiciel : CNIRevelator ' + globs.verstring_full + '\n\n' + globs.changelog), parent=main_w) logger.info('main() : **** Launching App_main() ****') main_w.mainloop() logger.info('main() : **** Ending App_main() ****') @@ -78,6 +80,13 @@ if updater.UPDATE_IS_MADE: break sys.exit(0) -#main() +# Here we go ! +try: + main() +except Exception: + sys.exit(1) -sys.exit(0) +# Quit totally without remain in memory +for process in psutil.process_iter(): + if process.pid == os.getpid(): + process.terminate() \ No newline at end of file diff --git a/src/globs.py b/src/globs.py index 0cf1aac..d5959cb 100644 --- a/src/globs.py +++ b/src/globs.py @@ -36,10 +36,12 @@ CNIRFolder = os.getcwd() CNIRLColor = "#006699" CNIRName = "CNIRevelator {}".format(verstring) CNIRCryptoKey = '82Xh!efX3#@P~2eG' +CNIRNewVersion = False CNIRConfig = CNIRFolder + '\\config\\conf.ig' CNIRErrLog = CNIRFolder + '\\logs\\error.log' CNIRLauncherLog = CNIRFolder + '\\logs\\launcher.log' +CNIRMainLog = CNIRFolder + '\\logs\\main.log' CNIRUrlConfig = CNIRFolder + '\\config\\urlconf.ig' CNIRVerStock = CNIRFolder + '\\downloads\\versions.lst' CNIREnv = os.getenv('APPDATA') + '/CNIRevelator/' diff --git a/src/logger.py b/src/logger.py index 65d6c2d..2191635 100644 --- a/src/logger.py +++ b/src/logger.py @@ -64,5 +64,33 @@ class NewLoggingSystem: def close(self): logging.shutdown() +class NewMainLoggingSystem: + + def __init__(self): + # Create new logging handle + logger = logging.getLogger() + logger.setLevel(logging.INFO) # To make sure we can have a debug channel + + # Create channels + formatter = logging.Formatter("\n[ %(module)s/%(funcName)s ] %(asctime)s :: %(levelname)s :: %(message)s") + error_handler = logging.FileHandler((globs.CNIRErrLog), mode='w', encoding='utf-8', delay=True) + info_handler = logging.FileHandler((globs.CNIRMainLog), mode='w', encoding='utf-8') + + error_handler.setLevel(logging.ERROR) + error_handler.setFormatter(formatter) + logger.addHandler(error_handler) + + info_handler.setLevel(logging.DEBUG) + info_handler.setFormatter(formatter) + logger.addHandler(info_handler) + + self.logger = logger + self.printerr = logger.error + self.printdbg = logger.info + + def close(self): + logging.shutdown() + ## Global Handler logCur = NewLoggingSystem() +logMain = NewMainLoggingSystem() diff --git a/src/main.py b/src/main.py index e50a224..9737dad 100644 --- a/src/main.py +++ b/src/main.py @@ -25,6 +25,10 @@ from PIL import Image, ImageFont, ImageDraw, ImageTk, ImageEnhance, ImageFilter import math, warnings, string +from tkinter import * +from tkinter.messagebox import * +from tkinter import filedialog +from tkinter import ttk import mrz # mrz.py from image import CanvasImage # image.py diff --git a/src/updater.py b/src/updater.py index 48586f0..f284aae 100644 --- a/src/updater.py +++ b/src/updater.py @@ -183,11 +183,30 @@ def batch(): # Move to the right place shutil.copytree(UPATH + 'temp\\CNIRevelator', UPATH) shutil.rmtree(UPATH + 'temp') - - logfile.printdbg('Extracted :' + UPATH + '\\CNIRevelator.exe') - + logfile.printdbg('Extracted :' + UPATH + '\\CNIRevelator.exe') + launcherWindow.printmsg('Success !') + # Verifying that Tesseract is installed + if not os.path.exists(globs.CNIRFolder + '\\Tesseract-OCR4\\'): + tesseracturl = finalurl.replace("CNIRevelator.zip", "tesseract_4.zip") + # WE ASSUME THAT THE MAIN FILE IS CNIRevelator.zip AND THAT THE TESSERACT PACKAGE IS tesseract_4.zip + logfile.printdbg('Preparing download of Tesseract OCR 4...') + getTesseract = downloader.newdownload(credentials, tesseracturl, UPATH + '\\TsrtPackage.zip').download() + + # Unzip Tesseract + logfile.printdbg("Unzipping the package") + launcherWindow.printmsg('Installing the updates') + zip_ref = zipfile.ZipFile(UPATH + '\\TsrtPackage.zip', 'r') + zip_ref.extractall(UPATH) + zip_ref.close() + + # Cleanup + try: + os.remove(UPATH + '\\TsrtPackage.zip') + except: + pass + # Cleanup try: os.remove(globs.CNIRFolder + '\\..\\CNIPackage.zip') @@ -208,6 +227,7 @@ def umain(): # Cleaner for the old version if detected if len(sys.argv) > 1: + globs.CNIRNewVersion = True launcherWindow.printmsg('Deleting old version !') logfile.printdbg("Old install detected : {}".format(sys.argv[1])) while os.path.exists(str(sys.argv[1])):