kde-extraapps/akregator/plugins/onlinesync/onlinesyncplugin.cpp

146 lines
4.8 KiB
C++

/*
This file is part of Akregator.
Copyright (C) 2008 Didier Hoarau <did.hoarau@gmail.com>
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) 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, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
#include "onlinesyncplugin.h"
#include "ui/configurationdialog.h"
#include "sync/feedsync.h"
#include <KAction>
#include <KActionMenu>
#include <KActionCollection>
#include <KLocalizedString>
#include <KConfigGroup>
using namespace Akregator;
using namespace feedsync;
K_PLUGIN_FACTORY(OnlineSyncPluginFactory,
registerPlugin<Akregator::OnlineSyncPluginIface>();
)
K_EXPORT_PLUGIN(OnlineSyncPluginFactory( "akregator_onlinesync_plugin" ) )
OnlineSyncPluginIface::OnlineSyncPluginIface( QObject* parent, const QList<QVariant>& args ) : Plugin( parent ), m_impl( new OnlineSyncPlugin( parent, args ) )
{
}
OnlineSyncPluginIface::~OnlineSyncPluginIface() {
delete m_impl;
}
OnlineSyncPlugin::OnlineSyncPlugin( QObject* parent, const QList<QVariant>& args ) : KParts::Plugin( parent ), m_syncTool( new FeedSync( this ) )
{
Q_UNUSED( args )
setComponentData( OnlineSyncPluginFactory::componentData() );
setXMLFile( "akregator_onlinesync_plugin.rc" , /*merge=*/true );
KActionCollection* coll = actionCollection();
m_feedSyncMenu = coll->add<KActionMenu>("file_onlinesync_sync");
m_feedSyncMenu->setText(i18n("Synchronize Feeds"));
// Fill
updateActions();
}
OnlineSyncPlugin::~OnlineSyncPlugin()
{
kDebug();
}
void OnlineSyncPlugin::updateActions()
{
kDebug();
// Clear the menubar
Q_FOREACH( KAction* const i, m_feedSyncActions )
m_feedSyncMenu->removeAction( i );
qDeleteAll( m_feedSyncActions );
m_feedSyncActions.clear();
// Fill the menubar
KActionCollection* coll = actionCollection();
KAction* action;
// Read configuration
const KConfig config("akregator_feedsyncrc");
Q_FOREACH ( const QString& groupname, config.groupList() ) {
if ( groupname.startsWith( QLatin1String("FeedSyncSource_") ) ) {
kDebug() << groupname;
KConfigGroup generalGroup( &config, groupname );
action = coll->addAction(groupname);
action->setProperty("ConfigGroup",groupname);
action->setProperty("SyncType", m_syncTool->Get);
action->setIcon(KIcon("mail-receive"));
action->setText(i18n("Get from %1",generalGroup.readEntry( "Identifier", QString() )));
m_feedSyncMenu->addAction(action);
m_feedSyncActions.append(action);
connect( action, SIGNAL(triggered(bool)), m_syncTool, SLOT(sync()) );
action = coll->addAction(groupname);
action->setProperty("ConfigGroup",groupname);
action->setProperty("SyncType", m_syncTool->Send);
action->setIcon(KIcon("mail-send"));
action->setText(i18n("Send to %1",generalGroup.readEntry( "Identifier", QString() )));
m_feedSyncMenu->addAction(action);
m_feedSyncActions.append(action);
connect( action, SIGNAL(triggered(bool)), m_syncTool, SLOT(sync()) );
}
}
action = coll->addAction("feedsync_manage");
action->setIcon(KIcon("application-rss+xml"));
action->setText(i18n("Manage..."));
m_feedSyncMenu->addAction(action);
m_feedSyncActions.append(action);
connect(action, SIGNAL(triggered(bool)), this, SLOT(slotFeedSyncManage()));
}
void OnlineSyncPlugin::doSynchronize()
{
kDebug();
}
void OnlineSyncPlugin::slotFeedSyncManage()
{
kDebug();
feedsync::ConfigurationDialog* dlg = new feedsync::ConfigurationDialog();
dlg->setAttribute( Qt::WA_DeleteOnClose );
connect( dlg, SIGNAL(finished()), this, SLOT(slotFeedSyncManageDone()) );
dlg->show();
}
void OnlineSyncPlugin::slotFeedSyncManageDone()
{
kDebug();
updateActions();
}
void OnlineSyncPluginIface::insertGuiClients( KXMLGUIClient* parent ) {
parent->insertChildClient( m_impl );
}
void OnlineSyncPluginIface::removeGuiClients( KXMLGUIClient* parent ) {
parent->removeChildClient( m_impl );
}