Sistem Asistanı (v1.1) / sistem_asistani.py
sistem_asistani.py 116 satır • 3.65 KB
# sistem_asistani.py

import sys
import os
import traceback
import platform
from datetime import datetime

try:
    from PyQt6.QtWebEngineWidgets import QWebEngineView
except ImportError:
    pass
# ------------------------------------------------

def hata_raporu_yaz(exctype, value, tb):
    """
    Hata oluştuğunda Masaüstüne detaylı log dosyası oluşturur.
    """
    try:
        # 1. Hata Metnini Hazırla
        hata_zamani = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        hata_detayi = "".join(traceback.format_exception(exctype, value, tb))
        sistem_bilgisi = f"{platform.system()} {platform.release()} ({platform.machine()})"
        
        rapor = (
            f"\n{'='*50}\n"
            f"SİSTEM ASİSTANI - HATA RAPORU\n"
            f"Zaman: {hata_zamani}\n"
            f"Sistem: {sistem_bilgisi}\n"
            f"{'-'*50}\n"
            f"{hata_detayi}"
            f"{'='*50}\n"
        )

        # 2. Masaüstü Yolunu Bul (Türkçe/İngilizce uyumlu)
        home = os.path.expanduser("~")
        desktop = os.path.join(home, "Masaüstü")
        if not os.path.exists(desktop):
            desktop = os.path.join(home, "Desktop")
            if not os.path.exists(desktop):
                desktop = home # Masaüstü bulunamazsa Ev dizinine yaz

        dosya_yolu = os.path.join(desktop, "Sistem-Asistani-Hata.txt")

        # 3. Dosyaya Yaz (Append modu - üstüne ekler)
        with open(dosya_yolu, "a", encoding="utf-8") as f:
            f.write(rapor)
        
        print(f"HATA OLUŞTU! Rapor kaydedildi: {dosya_yolu}")
        
    except Exception as e:
        print(f"Hata raporu yazılırken bile hata oluştu: {e}")

# Beklenmeyen hataları yakalamak için kancayı (hook) ayarla
sys.excepthook = hata_raporu_yaz

def bagimliliklari_ayarla():
    """
    Eğer 'bagimliliklar' klasörü varsa, onu Python'un arama yoluna ekler.
    """
    base_dir = os.path.dirname(os.path.abspath(__file__))
    deps_dir = os.path.join(base_dir, "bagimliliklar")
    
    if os.path.exists(deps_dir):
        if deps_dir not in sys.path:
            sys.path.insert(0, deps_dir)

def uygulamayi_baslat():
    # WebEngine ayarları
    os.environ["QTWEBENGINE_DISABLE_SANDBOX"] = "1"
    os.environ["QTWEBENGINE_CHROMIUM_FLAGS"] = "--disable-gpu --no-sandbox --disable-logging --ignore-certificate-errors"
    
    try:
        # 1. Bağımlılık yolunu ayarla
        bagimliliklari_ayarla()

        # 2. Modülleri çağır
        from PyQt6.QtWidgets import QApplication, QMessageBox
        from PyQt6.QtNetwork import QLocalSocket
        from PyQt6.QtGui import QFont

        # Uygulama örneğini oluştur
        app = QApplication(sys.argv)
        app.setApplicationName("Sistem Asistanı")
        
        # Tekil çalışma kontrolü (Socket)
        socket_name = "SistemAsistaniInstance"
        socket = QLocalSocket()
        socket.connectToServer(socket_name)

        if socket.waitForConnected(500):
            print("Program zaten çalışıyor. Mevcut pencere öne getiriliyor...")
            socket.write(b"SHOW")
            socket.waitForBytesWritten(1000)
            socket.disconnectFromServer()
            sys.exit(0)
        
        # Ana pencereyi yükle
        from ana_pencere import AnaPencere

        font = QFont("Sans Serif", 10)
        app.setFont(font)

        p = AnaPencere(socket_name=socket_name)
        p.show()

        sys.exit(app.exec())

    except Exception as e:
        # Ana döngü başlamadan çökme olursa burası yakalar
        exc_type, exc_value, exc_traceback = sys.exc_info()
        hata_raporu_yaz(exc_type, exc_value, exc_traceback)
        sys.exit(1)

if __name__ == '__main__':
    uygulamayi_baslat()