mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-12-18 14:38:04 -06:00
WINDOWS: Check for python before creating the search engine tab. Prevents the creation of python specific files in the user's PC if no python is found. Closes #1370.
Conflicts: src/mainwindow.cpp src/searchengine/searchengine.cpp src/searchengine/searchengine.h
This commit is contained in:
@@ -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;
|
||||
*****************************************************/
|
||||
|
||||
// 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 pref;
|
||||
@@ -249,9 +256,10 @@ MainWindow::MainWindow(QWidget *parent, const QStringList& torrentCmdLine) : QMa
|
||||
actionRSS_Reader->setChecked(RssSettings().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);
|
||||
@@ -1329,7 +1337,27 @@ void MainWindow::on_actionRSS_Reader_triggered() {
|
||||
}
|
||||
|
||||
void MainWindow::on_actionSearch_engine_triggered() {
|
||||
Preferences().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.\nDo you want to install it now?"),
|
||||
QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) {
|
||||
// Download and Install Python
|
||||
installPython();
|
||||
actionSearch_engine->setChecked(false);
|
||||
Preferences().setSearchEnabled(false);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
actionSearch_engine->setChecked(false);
|
||||
Preferences().setSearchEnabled(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
displaySearchTab(actionSearch_engine->isChecked());
|
||||
}
|
||||
|
||||
@@ -1479,3 +1507,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", 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 "+file_path.replace("/", "\\")+".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().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.\nPlease install it manually.").arg(error));
|
||||
sender()->deleteLater();
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user