@ -85,6 +85,9 @@ void qt_mac_set_dock_menu(QMenu *menu);
@@ -85,6 +85,9 @@ void qt_mac_set_dock_menu(QMenu *menu);
# include "programupdater.h"
# endif
# include "powermanagement.h"
# ifdef Q_OS_WIN
# include "downloadthread.h"
# endif
using namespace libtorrent ;
@ -98,7 +101,11 @@ using namespace libtorrent;
@@ -98,7 +101,11 @@ using namespace libtorrent;
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// Constructor
MainWindow : : MainWindow ( QWidget * parent , const QStringList & torrentCmdLine ) : QMainWindow ( parent ) , m_posInitialized ( false ) , force_exit ( false ) {
MainWindow : : MainWindow ( QWidget * parent , const QStringList & torrentCmdLine ) : QMainWindow ( parent ) , m_posInitialized ( false ) , force_exit ( false )
# ifdef Q_OS_WIN
, has_python ( false )
# endif
{
setupUi ( this ) ;
Preferences * const pref = Preferences : : instance ( ) ;
@ -249,9 +256,10 @@ MainWindow::MainWindow(QWidget *parent, const QStringList& torrentCmdLine) : QMa
@@ -249,9 +256,10 @@ MainWindow::MainWindow(QWidget *parent, const QStringList& torrentCmdLine) : QMa
actionRSS_Reader - > setChecked ( pref - > isRSSEnabled ( ) ) ;
actionSearch_engine - > setChecked ( pref - > isSearchEnabled ( ) ) ;
actionExecution_Logs - > setChecked ( pref - > isExecutionLogEnabled ( ) ) ;
displaySearchTab ( actionSearch_engine - > isChecked ( ) ) ;
displayRSSTab ( actionRSS_Reader - > isChecked ( ) ) ;
on_actionExecution_Logs_triggered ( actionExecution_Logs - > isChecked ( ) ) ;
if ( actionSearch_engine - > isChecked ( ) )
QTimer : : singleShot ( 0 , this , SLOT ( on_actionSearch_engine_triggered ( ) ) ) ;
// Auto shutdown actions
QActionGroup * autoShutdownGroup = new QActionGroup ( this ) ;
@ -1317,7 +1325,27 @@ void MainWindow::on_actionRSS_Reader_triggered() {
@@ -1317,7 +1325,27 @@ void MainWindow::on_actionRSS_Reader_triggered() {
}
void MainWindow : : on_actionSearch_engine_triggered ( ) {
Preferences : : instance ( ) - > setSearchEnabled ( actionSearch_engine - > isChecked ( ) ) ;
# ifdef Q_OS_WIN
if ( ! has_python & & actionSearch_engine - > isChecked ( ) ) {
bool res = addPythonPathToEnv ( ) ;
if ( res )
has_python = true ;
else if ( QMessageBox : : question ( this , tr ( " Missing Python Interpreter " ) ,
tr ( " Python 2.x is required to use the search engine but it does not seem to be installed. \n Do you want to install it now? " ) ,
QMessageBox : : Yes | QMessageBox : : No , QMessageBox : : Yes ) = = QMessageBox : : Yes ) {
// Download and Install Python
installPython ( ) ;
actionSearch_engine - > setChecked ( false ) ;
Preferences : : instance ( ) - > setSearchEnabled ( false ) ;
return ;
}
else {
actionSearch_engine - > setChecked ( false ) ;
Preferences : : instance ( ) - > setSearchEnabled ( false ) ;
return ;
}
}
# endif
displaySearchTab ( actionSearch_engine - > isChecked ( ) ) ;
}
@ -1467,3 +1495,65 @@ void MainWindow::checkProgramUpdate() {
@@ -1467,3 +1495,65 @@ void MainWindow::checkProgramUpdate() {
updater - > checkForUpdates ( ) ;
}
# endif
# ifdef Q_OS_WIN
bool MainWindow : : addPythonPathToEnv ( ) {
if ( has_python )
return true ;
QString python_path = Preferences : : getPythonPath ( ) ;
if ( ! python_path . isEmpty ( ) ) {
// Add it to PATH envvar
QString path_envar = QString : : fromLocal8Bit ( qgetenv ( " PATH " ) . constData ( ) ) ;
if ( path_envar . isNull ( ) ) {
path_envar = " " ;
}
path_envar = python_path + " ; " + path_envar ;
qDebug ( " New PATH envvar is: %s " , qPrintable ( path_envar ) ) ;
qputenv ( " PATH " , fsutils : : toNativePath ( path_envar ) . toLocal8Bit ( ) ) ;
return true ;
}
return false ;
}
void MainWindow : : installPython ( ) {
setCursor ( QCursor ( Qt : : WaitCursor ) ) ;
// Download python
DownloadThread * pydownloader = new DownloadThread ( this ) ;
connect ( pydownloader , SIGNAL ( downloadFinished ( QString , QString ) ) , this , SLOT ( pythonDownloadSuccess ( QString , QString ) ) ) ;
connect ( pydownloader , SIGNAL ( downloadFailure ( QString , QString ) ) , this , SLOT ( pythonDownloadFailure ( QString , QString ) ) ) ;
pydownloader - > downloadUrl ( " http://python.org/ftp/python/2.7.3/python-2.7.3.msi " ) ;
}
void MainWindow : : pythonDownloadSuccess ( QString url , QString file_path ) {
setCursor ( QCursor ( Qt : : ArrowCursor ) ) ;
Q_UNUSED ( url ) ;
QFile : : rename ( file_path , file_path + " .msi " ) ;
QProcess installer ;
qDebug ( " Launching Python installer in passive mode... " ) ;
installer . start ( " msiexec.exe /passive /i " + fsutils : : toNativePath ( file_path ) + " .msi " ) ;
// Wait for setup to complete
installer . waitForFinished ( ) ;
qDebug ( " Installer stdout: %s " , installer . readAllStandardOutput ( ) . data ( ) ) ;
qDebug ( " Installer stderr: %s " , installer . readAllStandardError ( ) . data ( ) ) ;
qDebug ( " Setup should be complete! " ) ;
// Delete temp file
fsutils : : forceRemove ( file_path ) ;
// Reload search engine
has_python = addPythonPathToEnv ( ) ;
if ( has_python ) {
actionSearch_engine - > setChecked ( true ) ;
Preferences : : instance ( ) - > setSearchEnabled ( true ) ;
displaySearchTab ( true ) ;
}
sender ( ) - > deleteLater ( ) ;
}
void MainWindow : : pythonDownloadFailure ( QString url , QString error ) {
Q_UNUSED ( url ) ;
setCursor ( QCursor ( Qt : : ArrowCursor ) ) ;
QMessageBox : : warning ( this , tr ( " Download error " ) , tr ( " Python setup could not be downloaded, reason: %1. \n Please install it manually. " ) . arg ( error ) ) ;
sender ( ) - > deleteLater ( ) ;
}
# endif