You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
173 lines
3.4 KiB
173 lines
3.4 KiB
/* KPilot
|
|
**
|
|
** Copyright (C) 1998-2001 by Dan Pilone
|
|
** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
|
|
**
|
|
** This defines the "ActionQueue", which is the pile of actions
|
|
** that will occur during a HotSync.
|
|
*/
|
|
|
|
/*
|
|
** 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 in a file called COPYING; if not, write to
|
|
** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
** MA 02110-1301, USA.
|
|
*/
|
|
|
|
/*
|
|
** Bug reports and questions can be sent to kde-pim@kde.org
|
|
*/
|
|
#include "options.h"
|
|
|
|
#include <qtimer.h>
|
|
|
|
#include "actions.h"
|
|
#include "plugin.h"
|
|
|
|
#include "actionQueue.moc"
|
|
|
|
|
|
|
|
|
|
ActionQueue::ActionQueue(KPilotLink *d) :
|
|
SyncAction(d,"ActionQueue")
|
|
// The string lists have default constructors
|
|
{
|
|
FUNCTIONSETUP;
|
|
}
|
|
|
|
ActionQueue::~ActionQueue()
|
|
{
|
|
FUNCTIONSETUP;
|
|
clear();
|
|
}
|
|
|
|
void ActionQueue::clear()
|
|
{
|
|
SyncAction *del = 0L;
|
|
while ( (del = nextAction()) )
|
|
{
|
|
delete del;
|
|
}
|
|
|
|
Q_ASSERT(isEmpty());
|
|
}
|
|
|
|
void ActionQueue::queueInit()
|
|
{
|
|
FUNCTIONSETUP;
|
|
|
|
addAction(new WelcomeAction(fHandle));
|
|
}
|
|
|
|
void ActionQueue::queueConduits(const QStringList &l,
|
|
const SyncAction::SyncMode &m)
|
|
{
|
|
FUNCTIONSETUP;
|
|
|
|
// Add conduits here ...
|
|
//
|
|
//
|
|
for (QStringList::ConstIterator it = l.begin();
|
|
it != l.end();
|
|
++it)
|
|
{
|
|
if ((*it).startsWith(CSL1("internal_")))
|
|
{
|
|
#ifdef DEBUG
|
|
DEBUGKPILOT << fname <<
|
|
": Ignoring conduit " << *it << endl;
|
|
#endif
|
|
continue;
|
|
}
|
|
|
|
#ifdef DEBUG
|
|
DEBUGKPILOT << fname
|
|
<< ": Creating proxy with mode=" << m.name() << endl;
|
|
#endif
|
|
ConduitProxy *cp = new ConduitProxy(fHandle,*it,m);
|
|
addAction(cp);
|
|
}
|
|
}
|
|
|
|
void ActionQueue::queueCleanup()
|
|
{
|
|
addAction(new CleanupAction(fHandle));
|
|
}
|
|
|
|
bool ActionQueue::exec()
|
|
{
|
|
actionCompleted(0L);
|
|
return true;
|
|
}
|
|
|
|
void ActionQueue::actionCompleted(SyncAction *b)
|
|
{
|
|
FUNCTIONSETUP;
|
|
|
|
if (b)
|
|
{
|
|
#ifdef DEBUG
|
|
DEBUGKPILOT << fname
|
|
<< ": Completed action "
|
|
<< b->name()
|
|
<< endl;
|
|
#endif
|
|
delete b;
|
|
}
|
|
|
|
if (isEmpty())
|
|
{
|
|
delayDone();
|
|
return;
|
|
}
|
|
if ( deviceLink() && (!deviceLink()->tickle()) )
|
|
{
|
|
emit logError(i18n("The connection to the handheld "
|
|
"was lost. Synchronization cannot continue."));
|
|
clear();
|
|
delayDone();
|
|
return;
|
|
}
|
|
|
|
SyncAction *a = nextAction();
|
|
|
|
if (!a)
|
|
{
|
|
WARNINGKPILOT << "NULL action on stack."
|
|
<< endl;
|
|
return;
|
|
}
|
|
|
|
#ifdef DEBUG
|
|
DEBUGKPILOT << fname
|
|
<< ": Will run action "
|
|
<< a->name()
|
|
<< endl;
|
|
#endif
|
|
|
|
QObject::connect(a, SIGNAL(logMessage(const QString &)),
|
|
this, SIGNAL(logMessage(const QString &)));
|
|
QObject::connect(a, SIGNAL(logError(const QString &)),
|
|
this, SIGNAL(logMessage(const QString &)));
|
|
QObject::connect(a, SIGNAL(logProgress(const QString &, int)),
|
|
this, SIGNAL(logProgress(const QString &, int)));
|
|
QObject::connect(a, SIGNAL(syncDone(SyncAction *)),
|
|
this, SLOT(actionCompleted(SyncAction *)));
|
|
|
|
// Run the action picked from the queue when we get back
|
|
// to the event loop.
|
|
QTimer::singleShot(0,a,SLOT(execConduit()));
|
|
}
|
|
|