From d2fdce46263a6cee66c4adee9ea7366d085a1729 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Wed, 1 Aug 2012 17:46:50 +0200 Subject: Urlbar, first code ported to the new API --- src/urlbar/rsswidget.cpp | 165 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 src/urlbar/rsswidget.cpp (limited to 'src/urlbar/rsswidget.cpp') diff --git a/src/urlbar/rsswidget.cpp b/src/urlbar/rsswidget.cpp new file mode 100644 index 00000000..0d142d19 --- /dev/null +++ b/src/urlbar/rsswidget.cpp @@ -0,0 +1,165 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2010-2011 by Matthieu Gicquel +* +* +* 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 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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 . +* +* ============================================================ */ + + +// Auto Includes +#include "rsswidget.h" +#include "rsswidget.moc" + +// Local includes +#include "application.h" +#include "tabwindow.h" +#include "iconmanager.h" + +// KDE Includes +#include +#include +#include +#include +#include + +// Qt Includes +#include +#include + +#include +#include +#include +#include + + +RSSWidget::RSSWidget(const QMap< KUrl, QString > &map, QWidget *parent) + : QMenu(parent) + , m_map(map) +{ + setAttribute(Qt::WA_DeleteOnClose); + setFixedWidth(350); + + QFormLayout *layout = new QFormLayout(this); + + // Title + QLabel *title = new QLabel(this); + title->setText(i18n("Subscribe to RSS Feeds")); + QFont f = title->font(); + f.setBold(true); + title->setFont(f); + layout->addRow(title); + + // Agregators + QLabel *agregator = new QLabel(this); + agregator->setText(i18n("Aggregator:")); + + m_agregators = new KComboBox(this); + m_agregators->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + + m_agregators->addItem(KIcon("akregator"), QString("Akregator")); + m_agregators->addItem(IconManager::self()->iconForUrl(KUrl("http://google.com/reader")), i18n("Google Reader")); + + layout->addRow(agregator, m_agregators); + + // Feeds List + QLabel *feed = new QLabel(this); + feed->setText(i18n("Feed:")); + + m_feeds = new KComboBox(this); + m_feeds->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + + Q_FOREACH(const QString & title, m_map) + { + m_feeds->addItem(title); + } + + layout->addRow(feed, m_feeds); + + // Buttons + QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel, Qt::Horizontal, this); + + QPushButton *addFeed = new QPushButton(KIcon("list-add"), i18n("Add Feed"), buttonBox); + buttonBox->addButton(addFeed, QDialogButtonBox::AcceptRole); + + connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); + + layout->addRow(buttonBox); +} + + +void RSSWidget::showAt(const QPoint &pos) +{ + adjustSize(); + + QPoint p(pos.x() - width(), pos.y() + 10); + move(p); + show(); +} + + +void RSSWidget::accept() +{ + QString url = m_map.key(m_feeds->currentText()).toMimeDataString(); + + if (m_agregators->currentIndex() == 0) + addWithAkregator(url); + else + addWithGoogleReader(url); + + close(); +} + + +void RSSWidget::addWithGoogleReader(const QString &url) +{ + KUrl toLoad = KUrl("http://www.google.com/ig/add?feedurl=" + url); + rApp->tabWindow()->loadUrl(toLoad); +} + + +void RSSWidget::addWithAkregator(const QString &url) +{ + // Akregator is running + if (QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.akregator")) + { + QDBusInterface akregator("org.kde.akregator", "/Akregator", "org.kde.akregator.part"); + QDBusReply reply = akregator.call("addFeedsToGroup", QStringList(url) , i18n("Imported Feeds")); + + if (!reply.isValid()) + { + KMessageBox::error(0, QString(i18n("Could not add feed to Akregator. Please add it manually:") + + "

" + url + "")); + } + } + // Akregator is not running + else + { + KProcess proc; + proc << "akregator" << "-g" << i18n("Imported Feeds"); + proc << "-a" << url; + if (proc.startDetached() == 0) + { + KMessageBox::error(0, QString(i18n("There was an error. Please verify Akregator is installed on your system.") + + "

" + url + "")); + } + } +} -- cgit v1.2.1