95 lines
2.8 KiB
Python
Executable File
95 lines
2.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- coding: UTF-8 -*-
|
|
import os
|
|
import sys
|
|
import argparse
|
|
import setproctitle
|
|
import psutil
|
|
import ctypes
|
|
from PySide6.QtWidgets import QApplication, QMessageBox
|
|
from app.commons.dblogin import Login
|
|
from app import main
|
|
from logger_config import logger
|
|
|
|
parser = argparse.ArgumentParser(description='Process some integers.')
|
|
parser.add_argument('-o', metavar="theme", help='execute argument')
|
|
args = parser.parse_args()
|
|
|
|
try:
|
|
DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
|
|
'..', '..', '..')))
|
|
if os.path.isdir(DIR):
|
|
sys.path.insert(0, os.path.dirname(DIR))
|
|
except NameError:
|
|
pass
|
|
|
|
PROCESS_NAME = "app_presik_pos"
|
|
OS_NAME = os.name
|
|
|
|
|
|
class SingleInstanceApp(QApplication):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
|
|
app_open = False
|
|
num_opens = 0
|
|
for process in psutil.process_iter(['pid', 'name', 'cmdline']):
|
|
name = process.info['name']
|
|
cmdline = process.info['cmdline']
|
|
if name == PROCESS_NAME and OS_NAME == 'posix':
|
|
app_open = True
|
|
elif OS_NAME == 'nt' and isinstance(cmdline, list) and 'pospro' in cmdline:
|
|
num_opens += 1
|
|
|
|
if app_open or num_opens > 1:
|
|
logger.warning('La aplicación ya esta en ejecución')
|
|
self.show_already_running_dialog()
|
|
sys.exit(1)
|
|
|
|
def show_already_running_dialog(self):
|
|
msg = QMessageBox()
|
|
msg.setIcon(QMessageBox.Warning)
|
|
msg.setText("La aplicación ya está en ejecución.")
|
|
msg.setWindowTitle("Aplicación en ejecución")
|
|
msg.setStandardButtons(QMessageBox.Ok)
|
|
msg.exec()
|
|
|
|
|
|
class Client(object):
|
|
|
|
def __init__(self, parent=None):
|
|
# self.app = QApplication(sys.argv)
|
|
self.app = SingleInstanceApp(sys.argv)
|
|
self.app.setOrganizationName("PRESIK SAS")
|
|
self.app.setOrganizationDomain("presik.com")
|
|
self.app.setApplicationName("SMART POS")
|
|
self.app.setStyle("fusion")
|
|
if OS_NAME == 'posix':
|
|
setproctitle.setproctitle(PROCESS_NAME)
|
|
elif OS_NAME == 'nt':
|
|
kernel32 = ctypes.windll.kernel32
|
|
kernel32.SetConsoleTitleW(PROCESS_NAME)
|
|
|
|
def init_login(self):
|
|
_file_config = 'config_pos.ini'
|
|
if args.o:
|
|
_file_config = args.o
|
|
login = Login(file_config=_file_config)
|
|
while not login.context:
|
|
login.run()
|
|
login.exec()
|
|
login.timer.stop()
|
|
return login.context, login.params
|
|
|
|
def main(self, context, params):
|
|
_ = main.AppWindow(context, params)
|
|
self.app.exec()
|
|
|
|
|
|
client = Client()
|
|
context, params = client.init_login()
|
|
|
|
if context:
|
|
client.main(context, params)
|
|
sys.exit()
|