Browse Source

Fix asking to install Python

The dialog asking users to install python is borked since the last refactor, this
commit fixes it.
adaptive-webui-19844
Chocobo1 6 years ago
parent
commit
7d808cfc99
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
  1. 11
      src/base/utils/foreignapps.cpp
  2. 1
      src/base/utils/foreignapps.h
  3. 99
      src/gui/mainwindow.cpp
  4. 1
      src/gui/mainwindow.h

11
src/base/utils/foreignapps.cpp

@ -77,7 +77,8 @@ namespace @@ -77,7 +77,8 @@ namespace
return false;
}
LogMsg(QCoreApplication::translate("Utils::ForeignApps", "Python detected, version: %1").arg(info.version), Log::INFO);
LogMsg(QCoreApplication::translate("Utils::ForeignApps", "Python detected, executable name: '%1', version: %2")
.arg(info.executableName, info.version), Log::INFO);
return true;
}
@ -236,6 +237,14 @@ bool Utils::ForeignApps::PythonInfo::isValid() const @@ -236,6 +237,14 @@ bool Utils::ForeignApps::PythonInfo::isValid() const
return (!executableName.isEmpty() && version.isValid());
}
bool Utils::ForeignApps::PythonInfo::isSupportedVersion() const
{
const int majorVer = version.majorNumber();
return ((majorVer > 3)
|| ((majorVer == 3) && (version >= Version {3, 3, 0}))
|| ((majorVer == 2) && (version >= Version {2, 7, 9})));
}
PythonInfo Utils::ForeignApps::pythonInfo()
{
static PythonInfo pyInfo;

1
src/base/utils/foreignapps.h

@ -42,6 +42,7 @@ namespace Utils @@ -42,6 +42,7 @@ namespace Utils
using Version = Utils::Version<quint8, 3, 1>;
bool isValid() const;
bool isSupportedVersion() const;
QString executableName;
Version version;

99
src/gui/mainwindow.cpp

@ -1784,67 +1784,50 @@ void MainWindow::on_actionRSSReader_triggered() @@ -1784,67 +1784,50 @@ void MainWindow::on_actionRSSReader_triggered()
void MainWindow::on_actionSearchWidget_triggered()
{
if (!m_hasPython && m_ui->actionSearchWidget->isChecked()) {
int majorVersion = Utils::ForeignApps::pythonInfo().version.majorNumber();
const Utils::ForeignApps::PythonInfo pyInfo = Utils::ForeignApps::pythonInfo();
// Check if python is already in PATH
if (majorVersion > 0) {
// Prevent translators from messing with PATH
Logger::instance()->addMessage(tr("Python found in %1: %2", "Python found in PATH: /usr/local/bin:/usr/bin:/etc/bin")
.arg("PATH", qgetenv("PATH").constData()), Log::INFO);
}
#ifdef Q_OS_WIN
else if (addPythonPathToEnv()) {
majorVersion = Utils::ForeignApps::pythonInfo().version.majorNumber();
}
#endif
else {
QMessageBox::information(this, tr("Undetermined Python version"), tr("Couldn't determine your Python version. Search engine disabled."));
// Not installed
if (!pyInfo.isValid()) {
m_ui->actionSearchWidget->setChecked(false);
Preferences::instance()->setSearchEnabled(false);
#ifdef Q_OS_WIN
const QMessageBox::StandardButton buttonPressed = QMessageBox::question(this, tr("Missing Python Runtime")
, tr("Python 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);
if (buttonPressed == QMessageBox::Yes)
installPython();
#else
QMessageBox::information(this, tr("Missing Python Runtime")
, tr("Python is required to use the search engine but it does not seem to be installed."));
#endif
return;
}
bool res = false;
if ((majorVersion == 2) || (majorVersion == 3)) {
// Check Python minimum requirement: 2.7.9 / 3.3.0
using Version = Utils::ForeignApps::PythonInfo::Version;
const Version pyVersion = Utils::ForeignApps::pythonInfo().version;
if (((majorVersion == 2) && (pyVersion < Version {2, 7, 9}))
|| ((majorVersion == 3) && (pyVersion < Version {3, 3, 0}))) {
QMessageBox::information(this, tr("Old Python Interpreter"), tr("Your Python version (%1) is outdated. Please upgrade to latest version for search engines to work.\nMinimum requirement: 2.7.9 / 3.3.0.").arg(pyVersion));
// Check version requirement
if (!pyInfo.isSupportedVersion()) {
m_ui->actionSearchWidget->setChecked(false);
Preferences::instance()->setSearchEnabled(false);
return;
}
res = true;
}
if (res) {
m_hasPython = true;
}
#ifdef Q_OS_WIN
else if (QMessageBox::question(this, tr("Missing Python Interpreter"),
tr("Python 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
const QMessageBox::StandardButton buttonPressed = QMessageBox::question(this, tr("Old Python Runtime")
, tr("Your Python version (%1) is outdated. Minimum requirement: 2.7.9 / 3.3.0.\nDo you want to install a newer version now?")
, (QMessageBox::Yes | QMessageBox::No), QMessageBox::Yes);
if (buttonPressed == QMessageBox::Yes)
installPython();
m_ui->actionSearchWidget->setChecked(false);
Preferences::instance()->setSearchEnabled(false);
return;
}
#endif
else {
#ifndef Q_OS_WIN
QMessageBox::information(this, tr("Missing Python Interpreter"), tr("Python is required to use the search engine but it does not seem to be installed."));
#else
QMessageBox::information(this, tr("Old Python Runtime")
, tr("Your Python version (%1) is outdated. Please upgrade to latest version for search engines to work.\nMinimum requirement: 2.7.9 / 3.3.0.")
.arg(pyInfo.version));
#endif
m_ui->actionSearchWidget->setChecked(false);
Preferences::instance()->setSearchEnabled(false);
return;
}
m_hasPython = true;
m_ui->actionSearchWidget->setChecked(true);
Preferences::instance()->setSearchEnabled(true);
}
displaySearchTab(m_ui->actionSearchWidget->isChecked());
}
@ -2061,25 +2044,6 @@ void MainWindow::checkProgramUpdate() @@ -2061,25 +2044,6 @@ void MainWindow::checkProgramUpdate()
#endif
#ifdef Q_OS_WIN
bool MainWindow::addPythonPathToEnv()
{
if (m_hasPython) return true;
QString pythonPath = Preferences::getPythonPath();
if (!pythonPath.isEmpty()) {
Logger::instance()->addMessage(tr("Python found in '%1'").arg(Utils::Fs::toNativePath(pythonPath)), Log::INFO);
// Add it to PATH envvar
QString pathEnvar = QString::fromLocal8Bit(qgetenv("PATH").constData());
if (pathEnvar.isNull())
pathEnvar = "";
pathEnvar = pythonPath + ';' + pathEnvar;
qDebug("New PATH envvar is: %s", qUtf8Printable(pathEnvar));
qputenv("PATH", Utils::Fs::toNativePath(pathEnvar).toLocal8Bit());
return true;
}
return false;
}
void MainWindow::installPython()
{
setCursor(QCursor(Qt::WaitCursor));
@ -2123,10 +2087,7 @@ void MainWindow::pythonDownloadSuccess(const QString &url, const QString &filePa @@ -2123,10 +2087,7 @@ void MainWindow::pythonDownloadSuccess(const QString &url, const QString &filePa
else
Utils::Fs::forceRemove(filePath + ".msi");
// Reload search engine
m_hasPython = addPythonPathToEnv();
if (m_hasPython) {
// Make it print the version to Log
Utils::ForeignApps::pythonInfo();
if (Utils::ForeignApps::pythonInfo().isSupportedVersion()) {
m_ui->actionSearchWidget->setChecked(true);
displaySearchTab(true);
}

1
src/gui/mainwindow.h

@ -201,7 +201,6 @@ private: @@ -201,7 +201,6 @@ private:
QIcon getSystrayIcon() const;
#endif
#ifdef Q_OS_WIN
bool addPythonPathToEnv();
void installPython();
#endif

Loading…
Cancel
Save