mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-11 15:27:54 +00:00
Merge pull request #2302 from buinsky/WebUI2
Accept multiple files at once. Closes #2253
This commit is contained in:
commit
6d6e3042c2
38
src/main.cpp
38
src/main.cpp
@ -74,6 +74,20 @@ Q_IMPORT_PLUGIN(qico)
|
|||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "preferences.h"
|
#include "preferences.h"
|
||||||
|
|
||||||
|
class MessagesCollector : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public slots:
|
||||||
|
void collectMessage(const QString& message)
|
||||||
|
{
|
||||||
|
messages.append(message.split("|", QString::SkipEmptyParts));
|
||||||
|
}
|
||||||
|
public:
|
||||||
|
QStringList messages;
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "main.moc"
|
||||||
|
|
||||||
#if defined(Q_OS_WIN) && !defined(QBT_HAS_GETCURRENTPID)
|
#if defined(Q_OS_WIN) && !defined(QBT_HAS_GETCURRENTPID)
|
||||||
#error You seem to have updated QtSingleApplication without porting our custom QtSingleApplication::getRunningPid() function. Please see previous version to understate how it works.
|
#error You seem to have updated QtSingleApplication without porting our custom QtSingleApplication::getRunningPid() function. Please see previous version to understate how it works.
|
||||||
#endif
|
#endif
|
||||||
@ -113,6 +127,10 @@ int main(int argc, char *argv[])
|
|||||||
// Create Application
|
// Create Application
|
||||||
Application app("qBittorrent-" + misc::getUserIDString(), argc, argv);
|
Application app("qBittorrent-" + misc::getUserIDString(), argc, argv);
|
||||||
|
|
||||||
|
MessagesCollector* messagesCollector = new MessagesCollector();
|
||||||
|
QObject::connect(&app, SIGNAL(messageReceived(const QString &)),
|
||||||
|
messagesCollector, SLOT(collectMessage(const QString &)));
|
||||||
|
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
parseCommandLine(showVersion, showUsage, noSplash, torrents);
|
parseCommandLine(showVersion, showUsage, noSplash, torrents);
|
||||||
#else
|
#else
|
||||||
@ -131,9 +149,8 @@ int main(int argc, char *argv[])
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
||||||
// Set environment variable
|
// Set environment variable
|
||||||
if (!qputenv("QBITTORRENT", QByteArray(VERSION))) {
|
if (!qputenv("QBITTORRENT", QByteArray(VERSION)))
|
||||||
std::cerr << "Couldn't set environment variable...\n";
|
std::cerr << "Couldn't set environment variable...\n";
|
||||||
}
|
|
||||||
|
|
||||||
if (!userAgreesWithLegalNotice())
|
if (!userAgreesWithLegalNotice())
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
@ -141,6 +158,7 @@ int main(int argc, char *argv[])
|
|||||||
// Check if qBittorrent is already running for this user
|
// Check if qBittorrent is already running for this user
|
||||||
if (app.isRunning()) {
|
if (app.isRunning()) {
|
||||||
qDebug("qBittorrent is already running for this user.");
|
qDebug("qBittorrent is already running for this user.");
|
||||||
|
misc::msleep(300);
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
DWORD pid = (DWORD)app.getRunningPid();
|
DWORD pid = (DWORD)app.getRunningPid();
|
||||||
if (pid > 0) {
|
if (pid > 0) {
|
||||||
@ -181,8 +199,12 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
MainWindow window(0, torrents);
|
MainWindow window(0, torrents);
|
||||||
QObject::connect(&app, SIGNAL(messageReceived(const QString&)),
|
QObject::connect(&app, SIGNAL(messageReceived(const QString &)),
|
||||||
&window, SLOT(processParams(const QString&)));
|
&window, SLOT(processParams(const QString &)));
|
||||||
|
QObject::disconnect(&app, SIGNAL(messageReceived(const QString &)),
|
||||||
|
messagesCollector, SLOT(collectMessage(const QString &)));
|
||||||
|
window.processParams(messagesCollector->messages);
|
||||||
|
delete messagesCollector;
|
||||||
app.setActivationWindow(&window);
|
app.setActivationWindow(&window);
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
static_cast<QMacApplication*>(&app)->setReadyToProcessEvents();
|
static_cast<QMacApplication*>(&app)->setReadyToProcessEvents();
|
||||||
@ -190,8 +212,12 @@ int main(int argc, char *argv[])
|
|||||||
#else
|
#else
|
||||||
// Load Headless class
|
// Load Headless class
|
||||||
HeadlessLoader loader(torrents);
|
HeadlessLoader loader(torrents);
|
||||||
QObject::connect(&app, SIGNAL(messageReceived(const QString&)),
|
QObject::connect(&app, SIGNAL(messageReceived(const QString &)),
|
||||||
&loader, SLOT(processParams(const QString&)));
|
&loader, SLOT(processParams(const QString &)));
|
||||||
|
QObject::disconnect(&app, SIGNAL(messageReceived(const QString &)),
|
||||||
|
messagesCollector, SLOT(collectMessage(const QString &)));
|
||||||
|
loader.processParams(messagesCollector->messages);
|
||||||
|
delete messagesCollector;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int ret = app.exec();
|
int ret = app.exec();
|
||||||
|
2409
src/mainwindow.cpp
2409
src/mainwindow.cpp
File diff suppressed because it is too large
Load Diff
251
src/mainwindow.h
251
src/mainwindow.h
@ -66,152 +66,153 @@ class QTabWidget;
|
|||||||
class QTimer;
|
class QTimer;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
class MainWindow : public QMainWindow, private Ui::MainWindow{
|
class MainWindow: public QMainWindow, private Ui::MainWindow
|
||||||
Q_OBJECT
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Construct / Destruct
|
// Construct / Destruct
|
||||||
MainWindow(QWidget *parent=0, const QStringList& torrentCmdLine = QStringList());
|
MainWindow(QWidget *parent = 0, const QStringList& torrentCmdLine = QStringList());
|
||||||
// Methods
|
// Methods
|
||||||
QWidget* getCurrentTabWidget() const;
|
QWidget* getCurrentTabWidget() const;
|
||||||
TransferListWidget* getTransferList() const { return transferList; }
|
TransferListWidget* getTransferList() const { return transferList; }
|
||||||
QMenu* getTrayIconMenu();
|
QMenu* getTrayIconMenu();
|
||||||
PropertiesWidget *getProperties() const { return properties; }
|
PropertiesWidget *getProperties() const { return properties; }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void trackerAuthenticationRequired(const QTorrentHandle& h);
|
void trackerAuthenticationRequired(const QTorrentHandle& h);
|
||||||
void setTabText(int index, QString text) const;
|
void setTabText(int index, QString text) const;
|
||||||
void showNotificationBaloon(QString title, QString msg) const;
|
void showNotificationBaloon(QString title, QString msg) const;
|
||||||
void downloadFromURLList(const QStringList& urls);
|
void downloadFromURLList(const QStringList& urls);
|
||||||
void updateAltSpeedsBtn(bool alternative);
|
void updateAltSpeedsBtn(bool alternative);
|
||||||
void updateNbTorrents();
|
void updateNbTorrents();
|
||||||
void shutdownCleanUp();
|
void shutdownCleanUp();
|
||||||
|
void processParams(const QStringList& params);
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
// GUI related slots
|
// GUI related slots
|
||||||
void dropEvent(QDropEvent *event);
|
void dropEvent(QDropEvent *event);
|
||||||
void dragEnterEvent(QDragEnterEvent *event);
|
void dragEnterEvent(QDragEnterEvent *event);
|
||||||
void toggleVisibility(QSystemTrayIcon::ActivationReason e = QSystemTrayIcon::Trigger);
|
void toggleVisibility(QSystemTrayIcon::ActivationReason e = QSystemTrayIcon::Trigger);
|
||||||
void on_actionAbout_triggered();
|
void on_actionAbout_triggered();
|
||||||
void on_actionStatistics_triggered();
|
void on_actionStatistics_triggered();
|
||||||
void on_actionCreate_torrent_triggered();
|
void on_actionCreate_torrent_triggered();
|
||||||
void on_actionWebsite_triggered() const;
|
void on_actionWebsite_triggered() const;
|
||||||
void on_actionBugReport_triggered() const;
|
void on_actionBugReport_triggered() const;
|
||||||
void balloonClicked();
|
void balloonClicked();
|
||||||
void writeSettings();
|
void writeSettings();
|
||||||
void readSettings();
|
void readSettings();
|
||||||
void on_actionExit_triggered();
|
void on_actionExit_triggered();
|
||||||
void createTrayIcon();
|
void createTrayIcon();
|
||||||
void fullDiskError(const QTorrentHandle& h, QString msg) const;
|
void fullDiskError(const QTorrentHandle& h, QString msg) const;
|
||||||
void handleDownloadFromUrlFailure(QString, QString) const;
|
void handleDownloadFromUrlFailure(QString, QString) const;
|
||||||
void createSystrayDelayed();
|
void createSystrayDelayed();
|
||||||
void tab_changed(int);
|
void tab_changed(int);
|
||||||
void on_actionLock_qBittorrent_triggered();
|
void on_actionLock_qBittorrent_triggered();
|
||||||
void defineUILockPassword();
|
void defineUILockPassword();
|
||||||
void clearUILockPassword();
|
void clearUILockPassword();
|
||||||
bool unlockUI();
|
bool unlockUI();
|
||||||
void notifyOfUpdate(QString);
|
void notifyOfUpdate(QString);
|
||||||
void showConnectionSettings();
|
void showConnectionSettings();
|
||||||
void minimizeWindow();
|
void minimizeWindow();
|
||||||
void updateTrayIconMenu();
|
void updateTrayIconMenu();
|
||||||
// Keyboard shortcuts
|
// Keyboard shortcuts
|
||||||
void createKeyboardShortcuts();
|
void createKeyboardShortcuts();
|
||||||
void displayTransferTab() const;
|
void displayTransferTab() const;
|
||||||
void displaySearchTab() const;
|
void displaySearchTab() const;
|
||||||
void displayRSSTab() const;
|
void displayRSSTab() const;
|
||||||
// Torrent actions
|
// Torrent actions
|
||||||
void on_actionSet_global_upload_limit_triggered();
|
void on_actionSet_global_upload_limit_triggered();
|
||||||
void on_actionSet_global_download_limit_triggered();
|
void on_actionSet_global_download_limit_triggered();
|
||||||
void on_actionDocumentation_triggered() const;
|
void on_actionDocumentation_triggered() const;
|
||||||
void on_actionOpen_triggered();
|
void on_actionOpen_triggered();
|
||||||
void updateGUI();
|
void updateGUI();
|
||||||
void loadPreferences(bool configure_session=true);
|
void loadPreferences(bool configure_session = true);
|
||||||
void processParams(const QString& params);
|
void processParams(const QString& params);
|
||||||
void processParams(const QStringList& params);
|
void addTorrent(QString path);
|
||||||
void addTorrent(QString path);
|
void addUnauthenticatedTracker(const QPair<QTorrentHandle,QString> &tracker);
|
||||||
void addUnauthenticatedTracker(const QPair<QTorrentHandle,QString> &tracker);
|
void processDownloadedFiles(QString path, QString url);
|
||||||
void processDownloadedFiles(QString path, QString url);
|
void processNewMagnetLink(const QString& link);
|
||||||
void processNewMagnetLink(const QString& link);
|
void finishedTorrent(const QTorrentHandle& h) const;
|
||||||
void finishedTorrent(const QTorrentHandle& h) const;
|
void askRecursiveTorrentDownloadConfirmation(const QTorrentHandle &h);
|
||||||
void askRecursiveTorrentDownloadConfirmation(const QTorrentHandle &h);
|
// Options slots
|
||||||
// Options slots
|
void on_actionOptions_triggered();
|
||||||
void on_actionOptions_triggered();
|
void optionsSaved();
|
||||||
void optionsSaved();
|
// HTTP slots
|
||||||
// HTTP slots
|
void on_actionDownload_from_URL_triggered();
|
||||||
void on_actionDownload_from_URL_triggered();
|
|
||||||
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
||||||
void handleUpdateCheckFinished(bool update_available, QString new_version, bool invokedByUser);
|
void handleUpdateCheckFinished(bool update_available, QString new_version, bool invokedByUser);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void closeEvent(QCloseEvent *);
|
void closeEvent(QCloseEvent *);
|
||||||
void showEvent(QShowEvent *);
|
void showEvent(QShowEvent *);
|
||||||
bool event(QEvent * event);
|
bool event(QEvent * event);
|
||||||
void displayRSSTab(bool enable);
|
void displayRSSTab(bool enable);
|
||||||
void displaySearchTab(bool enable);
|
void displaySearchTab(bool enable);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QIcon getSystrayIcon() const;
|
QIcon getSystrayIcon() const;
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
bool addPythonPathToEnv();
|
bool addPythonPathToEnv();
|
||||||
void installPython();
|
void installPython();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void pythonDownloadSuccess(QString url, QString file_path);
|
void pythonDownloadSuccess(QString url, QString file_path);
|
||||||
void pythonDownloadFailure(QString url, QString error);
|
void pythonDownloadFailure(QString url, QString error);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QFileSystemWatcher *executable_watcher;
|
QFileSystemWatcher *executable_watcher;
|
||||||
// Bittorrent
|
// Bittorrent
|
||||||
QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers; // Still needed?
|
QList<QPair<QTorrentHandle,QString> > unauthenticated_trackers; // Still needed?
|
||||||
// GUI related
|
// GUI related
|
||||||
bool m_posInitialized;
|
bool m_posInitialized;
|
||||||
QTimer *guiUpdater;
|
QTimer *guiUpdater;
|
||||||
HidableTabWidget *tabs;
|
HidableTabWidget *tabs;
|
||||||
StatusBar *status_bar;
|
StatusBar *status_bar;
|
||||||
QPointer<options_imp> options;
|
QPointer<options_imp> options;
|
||||||
QPointer<consoleDlg> console;
|
QPointer<consoleDlg> console;
|
||||||
QPointer<about> aboutDlg;
|
QPointer<about> aboutDlg;
|
||||||
QPointer<StatsDialog> statsDlg;
|
QPointer<StatsDialog> statsDlg;
|
||||||
QPointer<TorrentCreatorDlg> createTorrentDlg;
|
QPointer<TorrentCreatorDlg> createTorrentDlg;
|
||||||
QPointer<downloadFromURL> downloadFromURLDialog;
|
QPointer<downloadFromURL> downloadFromURLDialog;
|
||||||
QPointer<QSystemTrayIcon> systrayIcon;
|
QPointer<QSystemTrayIcon> systrayIcon;
|
||||||
QPointer<QTimer> systrayCreator;
|
QPointer<QTimer> systrayCreator;
|
||||||
QPointer<QMenu> myTrayIconMenu;
|
QPointer<QMenu> myTrayIconMenu;
|
||||||
TransferListWidget *transferList;
|
TransferListWidget *transferList;
|
||||||
TransferListFiltersWidget *transferListFilters;
|
TransferListFiltersWidget *transferListFilters;
|
||||||
PropertiesWidget *properties;
|
PropertiesWidget *properties;
|
||||||
bool displaySpeedInTitle;
|
bool displaySpeedInTitle;
|
||||||
bool force_exit;
|
bool force_exit;
|
||||||
bool ui_locked;
|
bool ui_locked;
|
||||||
bool unlockDlgShowing;
|
bool unlockDlgShowing;
|
||||||
LineEdit *search_filter;
|
LineEdit *search_filter;
|
||||||
QAction *searchFilterAct;
|
QAction *searchFilterAct;
|
||||||
// Keyboard shortcuts
|
// Keyboard shortcuts
|
||||||
QShortcut *switchSearchShortcut;
|
QShortcut *switchSearchShortcut;
|
||||||
QShortcut *switchSearchShortcut2;
|
QShortcut *switchSearchShortcut2;
|
||||||
QShortcut *switchTransferShortcut;
|
QShortcut *switchTransferShortcut;
|
||||||
QShortcut *switchRSSShortcut;
|
QShortcut *switchRSSShortcut;
|
||||||
// Widgets
|
// Widgets
|
||||||
QAction *prioSeparator;
|
QAction *prioSeparator;
|
||||||
QAction *prioSeparatorMenu;
|
QAction *prioSeparatorMenu;
|
||||||
QSplitter *hSplitter;
|
QSplitter *hSplitter;
|
||||||
QSplitter *vSplitter;
|
QSplitter *vSplitter;
|
||||||
// Search
|
// Search
|
||||||
QPointer<SearchEngine> searchEngine;
|
QPointer<SearchEngine> searchEngine;
|
||||||
// RSS
|
// RSS
|
||||||
QPointer<RSSImp> rssWidget;
|
QPointer<RSSImp> rssWidget;
|
||||||
// Execution Log
|
// Execution Log
|
||||||
QPointer<ExecutionLog> m_executionLog;
|
QPointer<ExecutionLog> m_executionLog;
|
||||||
// Power Management
|
// Power Management
|
||||||
PowerManagement *m_pwr;
|
PowerManagement *m_pwr;
|
||||||
QTimer *preventTimer;
|
QTimer *preventTimer;
|
||||||
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
||||||
QTimer programUpdateTimer;
|
QTimer programUpdateTimer;
|
||||||
#endif
|
#endif
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
bool has_python;
|
bool has_python;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
Loading…
Reference in New Issue
Block a user