/* ============================================================ * QupZilla - WebKit based browser * Copyright (C) 2010-2014 David Rosca * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ============================================================ */ #include "rssnotification.h" #include "ui_rssnotification.h" #include "mainapplication.h" #include "browsinglibrary.h" #include "iconprovider.h" #include "processinfo.h" #include "rssmanager.h" #include "settings.h" #include "webview.h" #include "qztools.h" #include #include #include RSSNotification::RSSNotification(const QString &title, const QUrl &url, WebView* parent) : AnimatedWidget(AnimatedWidget::Down, 300, parent) , ui(new Ui::RSSNotification) , m_title(title) , m_url(url) , m_view(parent) { setAutoFillBackground(true); setAttribute(Qt::WA_DeleteOnClose); ui->setupUi(widget()); ui->closeButton->setIcon(IconProvider::standardIcon(QStyle::SP_DialogCloseButton)); ui->label->setText(tr("RSS feed \"%1\"").arg(title)); RssApp bloglines; bloglines.type = WebApplication; bloglines.title = "Bloglines"; bloglines.icon = QIcon(":/icons/sites/bloglines.png"); bloglines.address = "http://www.bloglines.com/sub?url="; RssApp myaol; myaol.type = WebApplication; myaol.title = "My AOL"; myaol.icon = QIcon(":/icons/sites/aol.png"); myaol.address = "http://feeds.my.aol.com/add.jsp?url="; RssApp netvibes; netvibes.type = WebApplication; netvibes.title = "Netvibes"; netvibes.icon = QIcon(":/icons/sites/netvibes.png"); netvibes.address = "http://www.netvibes.com/subscribe.php?url="; RssApp yahoo; yahoo.type = WebApplication; yahoo.title = "Yahoo!"; yahoo.icon = QIcon(":/icons/sites/yahoo.png"); yahoo.address = "http://add.my.yahoo.com/rss?url="; m_rssApps << bloglines << myaol << netvibes << yahoo; #ifdef Q_OS_UNIX const QString akregatorBin = QzTools::resolveFromPath("akregator"); const QString lifereaBin = QzTools::resolveFromPath("liferea"); const QString lifereaAddFeedBin = QzTools::resolveFromPath("liferea-add-feed"); if (!akregatorBin.isEmpty()) { RssApp akregator; akregator.type = DesktopApplication; akregator.title = "Akregator"; akregator.icon = QIcon(":/icons/sites/akregator.png"); akregator.executable = akregatorBin; akregator.arguments = "-a"; m_rssApps << akregator; } if (!lifereaBin.isEmpty() && !lifereaAddFeedBin.isEmpty()) { RssApp liferea; liferea.type = DesktopApplication; liferea.title = "Liferea"; liferea.icon = QIcon(":/icons/sites/liferea.png"); liferea.executable = lifereaAddFeedBin; m_rssApps << liferea; } #endif foreach (const RssApp &app, m_rssApps) { ui->comboBox->addItem(app.icon, app.title, QVariant(app.type)); } ui->comboBox->addItem(QIcon(":/icons/qupzilla.png"), tr("Internal Reader"), QVariant(Internal)); ui->comboBox->addItem(tr("Other..."), QVariant(Other)); Settings settings; settings.beginGroup("RSS"); ui->comboBox->setCurrentIndex(settings.value("LastAddOptionIndex", ui->comboBox->count() - 2).toInt()); settings.endGroup(); connect(ui->add, SIGNAL(clicked()), this, SLOT(addRss())); connect(ui->closeButton, SIGNAL(clicked()), this, SLOT(hide())); startAnimation(); } void RSSNotification::hide() { m_view->setFocus(); AnimatedWidget::hide(); } void RSSNotification::addRss() { bool success = false; int index = ui->comboBox->currentIndex(); switch (ui->comboBox->itemData(index).toInt()) { case WebApplication: { const RssApp app = m_rssApps.at(index); const QUrl url = QUrl::fromEncoded(QString(app.address + QUrl::toPercentEncoding(m_url.toString())).toLatin1()); m_view->openUrlInNewTab(url, Qz::NT_CleanSelectedTab); success = true; break; } case DesktopApplication: { const RssApp app = m_rssApps.at(index); if (app.title == QLatin1String("Liferea")) { if (!ProcessInfo("liferea").isRunning()) { QMessageBox::warning(this, tr("Liferea not running"), tr("Liferea must be running in order to add new feed.")); success = false; break; } } const QString arguments = QString("%1 %2").arg(app.arguments, QString::fromUtf8(m_url.toEncoded())); success = QzTools::startExternalProcess(app.executable, arguments); break; } case Other: { QApplication::clipboard()->setText(m_url.toEncoded()); const QString message = tr("To add this RSS feed into other application, please use this information:

" "Title: %1
Url: %2

" "Url address of this feed has been copied into your clipboard.").arg(m_title, m_url.toString()); QMessageBox::information(0, tr("Add feed into other application"), message); success = true; break; } case Internal: success = mApp->rssManager()->addRssFeed(m_url, m_title, m_view->icon()); if (success) { mApp->browsingLibrary()->showRSS(mApp->windows().at(0)); } break; default: break; } if (success) { Settings settings; settings.beginGroup("RSS"); settings.setValue("LastAddOptionIndex", index); settings.endGroup(); hide(); } } RSSNotification::~RSSNotification() { delete ui; }