2014-10-27 16:29:04 -06:00
# -*- coding: utf-8 -*-
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 13:38:39 +02: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 17:40:48 +01: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 17:40:48 +01: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 21:14:09 +00: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 21:14:09 +00:00
2015-04-03 16:57:08 -06:00
setup ()