Browse Source

Merge pull request #2624 from pmzqla/python

Prefer python3 over python2
adaptive-webui-19844
sledgehammer999 9 years ago
parent
commit
d6af4683bb
  1. 11
      src/core/preferences.cpp
  2. 36
      src/core/utils/misc.cpp
  3. 1
      src/core/utils/misc.h
  4. 4
      src/gui/mainwindow.cpp
  5. 9
      src/searchengine/searchengine.cpp
  6. 3
      src/searchengine/supportedengines.h

11
src/core/preferences.cpp

@ -1763,11 +1763,12 @@ QString Preferences::getPythonPath() @@ -1763,11 +1763,12 @@ QString Preferences::getPythonPath()
return path;
// Fallback: Detect python from default locations
QStringList supported_versions;
supported_versions << "34" << "33" << "32" << "31" << "30" << "27" << "26" << "25";
foreach (const QString &v, supported_versions)
if (QFile::exists("C:/Python" + v + "/python.exe"))
return "C:/Python" + v;
const QStringList dirs = QDir("C:/").entryList(QStringList("Python*"), QDir::Dirs, QDir::Name | QDir::Reversed);
foreach (const QString &dir, dirs) {
const QString path("C:/" + dir + "/python.exe");
if (QFile::exists(path))
return path;
}
return QString();
}

36
src/core/utils/misc.cpp

@ -233,6 +233,26 @@ int Utils::Misc::pythonVersion() @@ -233,6 +233,26 @@ int Utils::Misc::pythonVersion()
static int version = -1;
if (version < 0) {
QProcess python_proc;
#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
/*
* On Unix-Like Systems python2 and python3 should always exist
* http://legacy.python.org/dev/peps/pep-0394/
*/
python_proc.start("python3", QStringList() << "--version", QIODevice::ReadOnly);
if (python_proc.waitForFinished()) {
if (python_proc.exitCode() == 0) {
version = 3;
return 3;
}
}
python_proc.start("python2", QStringList() << "--version", QIODevice::ReadOnly);
if (python_proc.waitForFinished()) {
if (python_proc.exitCode() == 0) {
version = 2;
return 2;
}
}
#else
python_proc.start("python", QStringList() << "--version", QIODevice::ReadOnly);
if (!python_proc.waitForFinished()) return -1;
if (python_proc.exitCode() < 0) return -1;
@ -245,10 +265,26 @@ int Utils::Misc::pythonVersion() @@ -245,10 +265,26 @@ int Utils::Misc::pythonVersion()
version = 3;
else
version = 2;
#endif
}
return version;
}
QString Utils::Misc::pythonExecutable()
{
#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
/*
* On Unix-Like Systems python2 and python3 should always exist
* http://legacy.python.org/dev/peps/pep-0394/
*/
if (pythonVersion() == 3)
return "python3";
if (pythonVersion() == 2)
return "python2";
#endif
return "python";
}
// return best userfriendly storage unit (B, KiB, MiB, GiB, TiB)
// use Binary prefix standards from IEC 60027-2
// see http://en.wikipedia.org/wiki/Kilobyte

1
src/core/utils/misc.h

@ -56,6 +56,7 @@ namespace Utils @@ -56,6 +56,7 @@ namespace Utils
QPoint screenCenter(QWidget *win);
#endif
int pythonVersion();
QString pythonExecutable();
// return best userfriendly storage unit (B, KiB, MiB, GiB, TiB)
// use Binary prefix standards from IEC 60027-2
// see http://en.wikipedia.org/wiki/Kilobyte

4
src/gui/mainwindow.cpp

@ -1380,7 +1380,7 @@ void MainWindow::on_actionSearch_engine_triggered() @@ -1380,7 +1380,7 @@ void MainWindow::on_actionSearch_engine_triggered()
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?"),
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
installPython();
@ -1570,7 +1570,7 @@ void MainWindow::installPython() @@ -1570,7 +1570,7 @@ void MainWindow::installPython()
{
setCursor(QCursor(Qt::WaitCursor));
// Download python
Net::DownloadHandler *handler = Net::DownloadManager::instance()->downloadUrl("http://python.org/ftp/python/2.7.3/python-2.7.3.msi");
Net::DownloadHandler *handler = Net::DownloadManager::instance()->downloadUrl("https://www.python.org/ftp/python/3.4.3/python-3.4.3.msi");
connect(handler, SIGNAL(downloadFinished(QString, QString)), this, SLOT(pythonDownloadSuccess(QString, QString)));
connect(handler, SIGNAL(downloadFailed(QString, QString)), this, SLOT(pythonDownloadFailure(QString, QString)));
}

9
src/searchengine/searchengine.cpp

@ -182,6 +182,11 @@ void SearchEngine::giveFocusToSearchInput() { @@ -182,6 +182,11 @@ void SearchEngine::giveFocusToSearchInput() {
// Function called when we click on search button
void SearchEngine::on_search_button_clicked() {
if (Utils::Misc::pythonVersion() < 0) {
mp_mainWindow->showNotificationBaloon(tr("Search Engine"), tr("Please install Python to use the Search Engine."));
return;
}
if (searchProcess->state() != QProcess::NotRunning) {
#ifdef Q_OS_WIN
searchProcess->kill();
@ -236,7 +241,7 @@ void SearchEngine::on_search_button_clicked() { @@ -236,7 +241,7 @@ void SearchEngine::on_search_button_clicked() {
// Changing the text of the current label
currentSearchTab->getCurrentLabel()->setText(tr("Results")+" <i>(0)</i>:");
// Launch search
searchProcess->start("python", params, QIODevice::ReadOnly);
searchProcess->start(Utils::Misc::pythonExecutable(), params, QIODevice::ReadOnly);
searchTimeout->start(180000); // 3min
}
@ -276,7 +281,7 @@ void SearchEngine::downloadTorrent(QString engine_url, QString torrent_url) { @@ -276,7 +281,7 @@ void SearchEngine::downloadTorrent(QString engine_url, QString torrent_url) {
params << engine_url;
params << torrent_url;
// Launch search
downloadProcess->start("python", params, QIODevice::ReadOnly);
downloadProcess->start(Utils::Misc::pythonExecutable(), params, QIODevice::ReadOnly);
}
}

3
src/searchengine/supportedengines.h

@ -42,6 +42,7 @@ @@ -42,6 +42,7 @@
#include <QDebug>
#include "core/utils/fs.h"
#include "core/utils/misc.h"
#include "core/preferences.h"
class SearchCategories: public QObject, public QHash<QString, QString> {
@ -150,7 +151,7 @@ public slots: @@ -150,7 +151,7 @@ public slots:
QStringList params;
params << Utils::Fs::toNativePath(Utils::Fs::searchEngineLocation()+"/nova2.py");
params << "--capabilities";
nova.start("python", params, QIODevice::ReadOnly);
nova.start(Utils::Misc::pythonExecutable(), params, QIODevice::ReadOnly);
nova.waitForStarted();
nova.waitForFinished();
QString capabilities = QString(nova.readAll());

Loading…
Cancel
Save