2014-10-27 16:29:04 -06:00
# -*- coding: utf-8 -*-
2022-12-09 12:35:26 -06:00
import httpcore
httpcore . SyncHTTPTransport = httpcore . AsyncHTTPProxy
2022-11-03 11:34:21 -06:00
import sys
import os
import platform
#redirect the original stdout and stderr
stdout = sys . stdout
stderr = sys . stderr
sys . stdout = open ( os . path . join ( os . getenv ( " temp " ) , " stdout.log " ) , " w " )
sys . stderr = open ( os . path . join ( os . getenv ( " temp " ) , " stderr.log " ) , " w " )
2014-11-12 20:41:29 -06:00
import languageHandler
2014-10-27 16:29:04 -06:00
import paths
2022-11-03 11:34:21 -06:00
#check if TWBlue is installed
2019-06-06 11:52:23 -05:00
# ToDo: Remove this soon as this is done already when importing the paths module.
if os . path . exists ( os . path . join ( paths . app_path ( ) , " Uninstall.exe " ) ) :
2021-06-16 16:18:41 -05:00
paths . mode = " installed "
2022-12-10 18:29:59 -06:00
import psutil
2014-10-27 16:29:04 -06:00
import commandline
2014-11-12 20:41:29 -06:00
import config
import output
2015-01-19 12:15:57 -06:00
import logging
import application
2015-01-27 17:09:28 -06:00
from mysc . thread_utils import call_threaded
2015-02-22 18:45:26 -06:00
import fixes
2015-04-03 16:57:08 -06:00
import widgetUtils
2015-07-29 14:05:26 -05:00
import webbrowser
from wxUI import commonMessageDialogs
2022-11-03 11:34:21 -06:00
from logger import logger
from update import updater
stdout_temp = sys . stdout
stderr_temp = sys . stderr
2015-02-28 08:31:19 -06:00
#if it's a binary version
2022-11-03 11:34:21 -06:00
if hasattr ( sys , ' frozen ' ) :
sys . stderr = open ( os . path . join ( paths . logs_path ( ) , " stderr.log " ) , ' w ' )
sys . stdout = open ( os . path . join ( paths . logs_path ( ) , " stdout.log " ) , ' w ' )
else :
sys . stdout = stdout
sys . stderr = stderr
# We are running from source, let's prepare vlc module for that situation
arch = " x86 "
if platform . architecture ( ) [ 0 ] [ : 2 ] == " 64 " :
arch = " x64 "
os . environ [ ' PYTHON_VLC_MODULE_PATH ' ] = os . path . abspath ( os . path . join ( paths . app_path ( ) , " .. " , " windows-dependencies " , arch ) )
os . environ [ ' PYTHON_VLC_LIB_PATH ' ] = os . path . abspath ( os . path . join ( paths . app_path ( ) , " .. " , " windows-dependencies " , arch , " libvlc.dll " ) )
#the final log files have been opened succesfully, let's close the temporary files
stdout_temp . close ( )
stderr_temp . close ( )
#finally, remove the temporary files. TW Blue doesn't need them anymore, and we will get more free space on the harddrive
os . remove ( stdout_temp . name )
os . remove ( stderr_temp . name )
2018-08-12 06:38:39 -05:00
import sound
2015-04-03 16:57:08 -06:00
2015-01-19 12:15:57 -06:00
log = logging . getLogger ( " main " )
2014-11-12 20:41:29 -06:00
def setup ( ) :
2021-06-16 16:18:41 -05:00
log . debug ( " Starting " + application . name + " %s " % ( application . version , ) )
config . setup ( )
proxy_setup ( )
log . debug ( " Using %s %s " % ( platform . system ( ) , platform . architecture ( ) [ 0 ] ) )
log . debug ( " Application path is %s " % ( paths . app_path ( ) , ) )
log . debug ( " config path is %s " % ( paths . config_path ( ) , ) )
sound . setup ( )
languageHandler . setLanguage ( config . app [ " app-settings " ] [ " language " ] )
fixes . setup ( )
output . setup ( )
from controller import settings
from controller import mainController
from sessionmanager import sessionManager
app = widgetUtils . mainLoopObject ( )
check_pid ( )
2022-11-03 11:34:21 -06:00
if config . app [ " app-settings " ] [ " donation_dialog_displayed " ] == False :
donation ( )
if config . app [ ' app-settings ' ] [ ' check_for_updates ' ] :
updater . do_update ( )
2021-06-16 16:18:41 -05:00
sm = sessionManager . sessionManagerController ( )
sm . fill_list ( )
2022-11-03 11:34:21 -06:00
if len ( sm . sessions ) == 0 :
sm . show ( )
2021-06-16 16:18:41 -05:00
else :
sm . do_ok ( )
if hasattr ( sm . view , " destroy " ) :
sm . view . destroy ( )
del sm
r = mainController . Controller ( )
r . view . show ( )
r . do_work ( )
r . check_invisible_at_startup ( )
2022-11-03 11:34:21 -06:00
call_threaded ( r . start )
2021-06-16 16:18:41 -05:00
app . run ( )
2014-11-12 20:41:29 -06:00
2021-01-22 10:40:48 -06:00
def proxy_setup ( ) :
2021-06-16 16:18:41 -05:00
if config . app [ " proxy " ] [ " server " ] != " " and config . app [ " proxy " ] [ " type " ] > 0 :
log . debug ( " Loading proxy settings " )
proxy_url = config . app [ " proxy " ] [ " server " ] + " : " + str ( config . app [ " proxy " ] [ " port " ] )
if config . app [ " proxy " ] [ " user " ] != " " and config . app [ " proxy " ] [ " password " ] != " " :
proxy_url = config . app [ " proxy " ] [ " user " ] + " : " + config . app [ " proxy " ] [ " password " ] + " @ " + proxy_url
elif config . app [ " proxy " ] [ " user " ] != " " and config . proxyTypes [ config . app [ " proxy " ] [ " type " ] ] in [ " socks4 " , " socks4a " ] :
proxy_url = config . app [ " proxy " ] [ " user " ] + " @ " + proxy_url
proxy_url = config . proxyTypes [ config . app [ " proxy " ] [ " type " ] ] + " :// " + proxy_url
os . environ [ " HTTP_PROXY " ] = proxy_url
os . environ [ " HTTPS_PROXY " ] = proxy_url
2021-01-22 10:40:48 -06:00
2015-07-29 14:05:26 -05:00
def donation ( ) :
2021-06-16 16:18:41 -05:00
dlg = commonMessageDialogs . donation ( )
if dlg == widgetUtils . YES :
2023-12-31 12:20:06 -06:00
webbrowser . open_new_tab ( _ ( " https://twblue.mcvsoftware.com/donate " ) )
2021-06-16 16:18:41 -05:00
config . app [ " app-settings " ] [ " donation_dialog_displayed " ] = True
2015-07-29 14:05:26 -05:00
2018-12-31 15:14:09 -06:00
def check_pid ( ) :
2022-12-10 18:29:59 -06:00
" Ensures that only one copy of the application is running at a time. "
2021-06-16 16:18:41 -05:00
pidpath = os . path . join ( os . getenv ( " temp " ) , " {} .pid " . format ( application . name ) )
if os . path . exists ( pidpath ) :
with open ( pidpath ) as fin :
pid = int ( fin . read ( ) )
2022-12-13 11:16:10 -06:00
try :
p = psutil . Process ( pid = pid )
if p . is_running ( ) :
# Display warning dialog
commonMessageDialogs . common_error ( _ ( " {0} is already running. Close the other instance before starting this one. If you ' re sure that {0} isn ' t running, try deleting the file at {1} . If you ' re unsure of how to do this, contact the {0} developers. " ) . format ( application . name , pidpath ) )
sys . exit ( 1 )
except psutil . NoSuchProcess :
2021-06-16 16:18:41 -05:00
commonMessageDialogs . dead_pid ( )
# Write the new PID
with open ( pidpath , " w " ) as cam :
cam . write ( str ( os . getpid ( ) ) )
2018-12-31 15:14:09 -06:00
2015-04-03 16:57:08 -06:00
setup ( )