2021-04-12 08:44:18 +12:00
import platform
import time
2021-04-08 00:46:27 +12:00
from PyQt5 . QtCore import QSettings
2021-04-07 22:11:31 +12:00
from PyQt5 . QtGui import QCloseEvent
from PyQt5 . QtWidgets import QMainWindow , QMessageBox
2021-02-10 23:48:25 +13:00
2021-04-12 08:44:18 +12:00
from pypresence import Presence
from custom_legendary . core import LegendaryCore
2021-04-08 08:39:23 +12:00
from rare . components . tab_widget import TabWidget
2021-02-10 23:48:25 +13:00
class MainWindow ( QMainWindow ) :
2021-04-12 08:44:18 +12:00
def __init__ ( self , core : LegendaryCore ) :
2021-02-10 23:48:25 +13:00
super ( MainWindow , self ) . __init__ ( )
2021-04-13 06:31:12 +12:00
self . settings = QSettings ( )
2021-04-12 08:44:18 +12:00
self . core = core
2021-04-11 00:58:34 +12:00
width , height = 1200 , 800
2021-04-13 06:31:12 +12:00
if self . settings . value ( " save_size " , False ) :
width , height = self . settings . value ( " window_size " , ( 1200 , 800 ) , tuple )
2021-04-11 00:58:34 +12:00
self . setGeometry ( 0 , 0 , width , height )
2021-02-10 23:48:25 +13:00
self . setWindowTitle ( " Rare - GUI for legendary " )
2021-04-07 22:11:31 +12:00
self . tab_widget = TabWidget ( core )
self . setCentralWidget ( self . tab_widget )
2021-04-12 08:44:18 +12:00
2021-04-13 00:10:36 +12:00
self . tab_widget . games_tab . default_widget . game_list . game_started . connect ( self . set_discord_rpc )
self . tab_widget . delete_presence . connect ( self . remove_rpc )
2021-04-13 02:02:16 +12:00
game = self . tab_widget . games_tab . default_widget . game_list . active_game
if game != ( " " , 0 ) :
self . set_discord_rpc ( game [ 0 ] ) # Appname
2021-04-13 06:31:12 +12:00
self . RPC = None
if self . settings . value ( " rpc_enable " , 0 , int ) == 1 : # show always
self . RPC = Presence ( " 830732538225360908 " )
self . RPC . connect ( )
self . update_rpc ( )
2021-02-10 23:48:25 +13:00
self . show ( )
2021-04-07 22:11:31 +12:00
2021-04-12 08:44:18 +12:00
def remove_rpc ( self ) :
2021-04-13 06:31:12 +12:00
if self . settings . value ( " rpc_enable " , 0 , int ) != 1 :
if not self . RPC :
return
self . RPC . close ( )
del self . RPC
self . RPC = None
else :
self . update_rpc ( )
2021-04-12 08:44:18 +12:00
def set_discord_rpc ( self , app_name ) :
2021-04-13 06:31:12 +12:00
if not self . RPC :
self . RPC = Presence ( " 830732538225360908 " ) # Rare app: https://discord.com/developers/applications
self . RPC . connect ( )
self . update_rpc ( app_name )
def update_rpc ( self , app_name = None ) :
if self . settings . value ( " rpc_enable " , 0 , int ) == 2 :
self . remove_rpc ( )
return
title = None
if not app_name :
self . RPC . update ( large_image = " logo " ,
details = " https://github.com/Dummerle/Rare " )
return
if self . settings . value ( " rpc_name " , True , bool ) :
title = self . core . get_installed_game ( app_name ) . title
start = None
if self . settings . value ( " rpc_time " , True , bool ) :
start = str ( time . time ( ) ) . split ( " . " ) [ 0 ]
os = None
if self . settings . value ( " rpc_os " , True , bool ) :
os = " via Rare on " + platform . system ( )
self . RPC . update ( large_image = " logo " ,
details = title ,
large_text = title ,
state = os ,
start = start )
2021-04-12 08:44:18 +12:00
2021-04-07 22:11:31 +12:00
def closeEvent ( self , e : QCloseEvent ) :
2021-04-13 06:31:12 +12:00
if self . settings . value ( " sys_tray " , True , bool ) :
2021-04-08 00:46:27 +12:00
self . hide ( )
e . ignore ( )
2021-04-11 00:58:34 +12:00
return
elif self . tab_widget . downloadTab . active_game is not None :
if not QMessageBox . question ( self , " Close " , self . tr ( " There is a download active. Do you really want to exit app? " ) , QMessageBox . Yes , QMessageBox . No ) == QMessageBox . Yes :
e . ignore ( )
return
2021-04-13 06:31:12 +12:00
if self . settings . value ( " save_size " , False , bool ) :
2021-04-11 00:58:34 +12:00
size = self . size ( ) . width ( ) , self . size ( ) . height ( )
2021-04-13 06:31:12 +12:00
self . settings . setValue ( " window_size " , size )
2021-04-11 00:58:34 +12:00
e . accept ( )