diff --git a/CMakeLists.txt b/CMakeLists.txt index e259cfb31..1d73cb6df 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,6 +46,7 @@ set(FILE_VERSION "1,9,9,6") set(APP_AUTHOR "Martin Rotter") set(APP_URL "http://bitbucket.org/skunkos/rssguard") set(APP_URL_ISSUES "http://bitbucket.org/skunkos/rssguard/issues") +set(APP_URL_ISSUES_NEW "http://bitbucket.org/skunkos/rssguard/issues/new") set(APP_EMAIL "rotter.martinos@gmail.com") set(MINIMUM_QT_VERSION 4.7.3) set(EXE_NAME ${APP_LOW_NAME}) diff --git a/src/core/defs.h.in b/src/core/defs.h.in index 6f9ee957c..7d952e89f 100755 --- a/src/core/defs.h.in +++ b/src/core/defs.h.in @@ -37,6 +37,7 @@ #define APP_EMAIL "@APP_EMAIL@" #define APP_URL "@APP_URL@" #define APP_URL_ISSUES "@APP_URL_ISSUES@" +#define APP_URL_ISSUES_NEW "@APP_URL_ISSUES_NEW@" #define APP_VERSION "@APP_VERSION@" #define APP_USERAGENT QString("@APP_NAME@/@APP_VERSION@ (@APP_URL@) on @CMAKE_SYSTEM@; Webkit/") + qWebKitVersion() diff --git a/src/core/networkfactory.cpp b/src/core/networkfactory.cpp index daf1f5945..ebb3b2954 100644 --- a/src/core/networkfactory.cpp +++ b/src/core/networkfactory.cpp @@ -24,31 +24,11 @@ #include #include -#include -#include -#include NetworkFactory::NetworkFactory() { } -bool NetworkFactory::openUrlInExternalBrowser(const QString &url) { - if (Settings::instance()->value(APP_CFG_BROWSER, - "custom_external_browser", - false).toBool()) { - QString browser = Settings::instance()->value(APP_CFG_BROWSER, - "external_browser_executable").toString(); - QString arguments = Settings::instance()->value(APP_CFG_BROWSER, - "external_browser_arguments", - "%1").toString(); - - return QProcess::startDetached(browser, QStringList() << arguments.arg(url)); - } - else { - return QDesktopServices::openUrl(url); - } -} - QString NetworkFactory::networkErrorText(QNetworkReply::NetworkError error_code) { switch (error_code) { case QNetworkReply::ProtocolUnknownError: diff --git a/src/core/networkfactory.h b/src/core/networkfactory.h index a8c361d82..b1b93a060 100644 --- a/src/core/networkfactory.h +++ b/src/core/networkfactory.h @@ -32,8 +32,6 @@ class NetworkFactory { explicit NetworkFactory(); public: - static bool openUrlInExternalBrowser(const QString &url); - // Returns human readable text for given network error. static QString networkErrorText(QNetworkReply::NetworkError error_code); diff --git a/src/core/webfactory.cpp b/src/core/webfactory.cpp index bba6ea695..40daa368e 100644 --- a/src/core/webfactory.cpp +++ b/src/core/webfactory.cpp @@ -6,6 +6,9 @@ #include #include #include +#include +#include +#include QPointer WebFactory::s_instance; @@ -29,6 +32,23 @@ void WebFactory::loadState() { false); } +bool WebFactory::openUrlInExternalBrowser(const QString &url) { + if (Settings::instance()->value(APP_CFG_BROWSER, + "custom_external_browser", + false).toBool()) { + QString browser = Settings::instance()->value(APP_CFG_BROWSER, + "external_browser_executable").toString(); + QString arguments = Settings::instance()->value(APP_CFG_BROWSER, + "external_browser_arguments", + "%1").toString(); + + return QProcess::startDetached(browser, QStringList() << arguments.arg(url)); + } + else { + return QDesktopServices::openUrl(url); + } +} + void WebFactory::switchJavascript(bool enable, bool save_settings) { if (save_settings) { Settings::instance()->setValue(APP_CFG_BROWSER, diff --git a/src/core/webfactory.h b/src/core/webfactory.h index a3f952459..fc9520d7b 100644 --- a/src/core/webfactory.h +++ b/src/core/webfactory.h @@ -28,15 +28,19 @@ class WebFactory : public QObject { QString escapeHtml(const QString &html); QString deEscapeHtml(const QString &text); - // Singleton getter. - static WebFactory *instance(); - - public slots: - // Operations. + // Switchers. bool javascriptEnabled() const; bool pluginsEnabled() const; bool autoloadImages() const; + // Singleton getter. + static WebFactory *instance(); + + public slots: + // Opens given string URL in external browser. + bool openUrlInExternalBrowser(const QString &url); + + // Switchers. void switchJavascript(bool enable, bool save_settings = true); void switchPlugins(bool enable, bool save_settings = true); void switchImages(bool enable, bool save_settings = true); diff --git a/src/gui/formmain.cpp b/src/gui/formmain.cpp index 00a432949..1571cb5db 100755 --- a/src/gui/formmain.cpp +++ b/src/gui/formmain.cpp @@ -384,6 +384,7 @@ void FormMain::createConnections() { // Menu "Help" connections. connect(m_ui->m_actionAboutGuard, SIGNAL(triggered()), this, SLOT(showAbout())); connect(m_ui->m_actionCheckForUpdates, SIGNAL(triggered()), this, SLOT(showUpdates())); + connect(m_ui->m_actionReportBug, SIGNAL(triggered()), this, SLOT(reportABug())); // General connections. connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(onAboutToQuit())); @@ -478,6 +479,22 @@ void FormMain::showUpdates() { SystemFactory::instance()->applicationCloseLock()->unlock(); } +void FormMain::reportABug() { + if (!WebFactory::instance()->openUrlInExternalBrowser(APP_URL_ISSUES_NEW)) { + if (SystemTrayIcon::isSystemTrayActivated()) { + SystemTrayIcon::instance()->showMessage(tr("Cannot open external browser"), + tr("Cannot open external browser. Navigate to application website manually."), + QSystemTrayIcon::Warning); + } + else { + MessageBox::show(this, + QMessageBox::Warning, + tr("Cannot open external browser"), + tr("Cannot open external browser. Navigate to application website manually.")); + } + } +} + void FormMain::showSettings() { QPointer form_pointer = new FormSettings(this); form_pointer.data()->exec(); diff --git a/src/gui/formmain.h b/src/gui/formmain.h index f1bbe3731..8574bc617 100644 --- a/src/gui/formmain.h +++ b/src/gui/formmain.h @@ -113,6 +113,7 @@ class FormMain : public QMainWindow { void showSettings(); void showAbout(); void showUpdates(); + void reportABug(); private: Ui::FormMain *m_ui; diff --git a/src/gui/formmain.ui b/src/gui/formmain.ui index e88a8b7ae..b8b9d2109 100644 --- a/src/gui/formmain.ui +++ b/src/gui/formmain.ui @@ -62,6 +62,7 @@ &Help + @@ -491,6 +492,11 @@ Auto-load &images + + + Report a &bug... + + diff --git a/src/gui/formupdate.cpp b/src/gui/formupdate.cpp index 1e44a2c6b..b9f667caa 100755 --- a/src/gui/formupdate.cpp +++ b/src/gui/formupdate.cpp @@ -20,6 +20,7 @@ #include "core/defs.h" #include "core/systemfactory.h" #include "core/networkfactory.h" +#include "core/webfactory.h" #include "gui/iconthemefactory.h" #include "gui/messagebox.h" #include "gui/systemtrayicon.h" @@ -117,7 +118,7 @@ void FormUpdate::startUpdate() { url_file = APP_URL; } - if (!NetworkFactory::openUrlInExternalBrowser(url_file)) { + if (!WebFactory::instance()->openUrlInExternalBrowser(url_file)) { if (SystemTrayIcon::isSystemTrayActivated()) { SystemTrayIcon::instance()->showMessage(tr("Cannot update application"), tr("Cannot navigate to installation file. Check new installation downloads " diff --git a/src/gui/messagesview.cpp b/src/gui/messagesview.cpp index f64bbc1b3..01bddfa9c 100644 --- a/src/gui/messagesview.cpp +++ b/src/gui/messagesview.cpp @@ -21,6 +21,7 @@ #include "core/messagesmodel.h" #include "core/settings.h" #include "core/networkfactory.h" +#include "core/webfactory.h" #include "gui/formmain.h" #include "gui/messagebox.h" @@ -243,7 +244,7 @@ void MessagesView::openSelectedSourceArticlesExternally() { foreach (const QModelIndex &index, selectionModel()->selectedRows()) { QString link = m_sourceModel->messageAt(m_proxyModel->mapToSource(index).row()).m_url; - if (!NetworkFactory::openUrlInExternalBrowser(link)) { + if (!WebFactory::instance()->openUrlInExternalBrowser(link)) { MessageBox::show(this, QMessageBox::Critical, tr("Problem with starting external web browser"),