#!/usr/bin/env python3 # -*- coding: UTF-8 -*- import os import sys import argparse import setproctitle import psutil import ctypes from PySide6.QtCore import Qt, QCoreApplication from PySide6.QtWidgets import QApplication, QMessageBox # from PyQt5.QtWidgets import QApplication 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()