AutoTao/main.py

92 lines
3.0 KiB
Python

import sys
import logging
from PySide6.QtWidgets import QApplication
from src.mainWindow import MainWindow
from src.databaseManager import DatabaseManager
# from src.databaseManager_duck import DatabaseManager
from src.loggerModule import Logger
from login.login_dialog import LoginDialog
import configparser
import ctypes, os
# COM 초기화 (멀티스레드 모드)
def initialize_com():
COINIT_MULTITHREADED = 0x0
ctypes.windll.ole32.CoInitializeEx(None, COINIT_MULTITHREADED)
# COM 해제
def uninitialize_com():
ctypes.windll.ole32.CoUninitialize()
def get_base_dir():
"""
실행 환경에 따라 base_dir을 설정하는 메서드.
"""
if getattr(sys, 'frozen', False): # 패키징된 경우
base_dir = os.path.dirname(sys.executable)
internal_dir = os.path.join(base_dir, '_internal') # _internal 디렉토리 포함
if os.path.exists(internal_dir):
return internal_dir
else:
base_dir = os.path.dirname(os.path.abspath(__file__))
return base_dir
def load_config(logger, file_path: str) -> configparser.ConfigParser:
"""
config.ini 파일을 읽어서 ConfigParser 객체로 반환
"""
config = configparser.ConfigParser()
try:
config.read(file_path, encoding="utf-8") # UTF-8 인코딩으로 설정 파일 읽기
logger.log(f"Config 파일 '{file_path}' 로드 성공", level=logging.INFO)
except Exception as e:
logger.log(f"Config 파일 로드 중 오류 발생: {e}", level=logging.ERROR, exc_info=True)
return config
if __name__ == "__main__":
initialize_com() # COM 초기화
logger = Logger(log_file="Scrapper2.log", logger_name="Scrapper_Logger", level=logging.DEBUG)
base_dir = get_base_dir()
config_path = os.path.join(base_dir, "config.ini")
config = load_config(logger, config_path)
app = QApplication(sys.argv)
db_manager = DatabaseManager(logger) # 데이터베이스 매니저 인스턴스 생성
# 로그인 다이얼로그 실행 (모달)
login_dialog = LoginDialog(logger)
if login_dialog.exec() == LoginDialog.Accepted:
user_info = login_dialog.get_user_info()
supabase_manager = login_dialog.get_supabase_manager()
else:
sys.exit("로그인 실패 또는 취소되었습니다.")
# 로그인 성공 후, 멤버십 유효성 검사
valid = supabase_manager.check_membership_validity(user_info)
if valid:
# 전체 프로그램 GUI 실행
window = MainWindow(logger, db_manager, supabase_manager, user_info, config)
window.show()
sys.exit(app.exec()) # 메인 UI 실행
else: # 로그인 실패 시
sys.exit(0) # 프로그램 종료
uninitialize_com() # COM 해제
# # 로그인 다이얼로그 실행
# login_dialog = UserInfoDialog()
# if login_dialog.exec(): # 로그인 성공 시
# window = MainWindow(logger, db_manager)
# window.show()
# sys.exit(app.exec()) # 메인 UI 실행
# else: # 로그인 실패 시
# sys.exit(0) # 프로그램 종료