kde-playground/kdepimlibs/akonadi/tests/itemdumper.cpp
2015-04-14 21:49:29 +00:00

104 lines
3.4 KiB
C++

/*
Copyright (c) 2006 Volker Krause <vkrause@kde.org>
Copyright (c) 2007 Robert Zwerus <arzie@dds.nl>
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This library 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 Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
*/
#include "itemdumper.h"
#include "collectionpathresolver_p.h"
#include <akonadi/item.h>
#include <QtCore/QDebug>
#include <QtCore/QFile>
#include <QApplication>
#include <klocale.h>
#include <kapplication.h>
#include <kcmdlineargs.h>
#include <akonadi/transactionjobs.h>
#include <akonadi/itemcreatejob.h>
#define GLOBAL_TRANSACTION 1
using namespace Akonadi;
ItemDumper::ItemDumper( const QString &path, const QString &filename, const QString &mimetype, int count ) :
mJobCount( 0 )
{
CollectionPathResolver* resolver = new CollectionPathResolver( path, this );
Q_ASSERT( resolver->exec() );
const Collection collection = Collection( resolver->collection() );
QFile f( filename );
Q_ASSERT( f.open(QIODevice::ReadOnly) );
QByteArray data = f.readAll();
f.close();
Item item;
item.setMimeType( mimetype );
item.setPayloadFromData( data );
mTime.start();
#ifdef GLOBAL_TRANSACTION
TransactionBeginJob *begin = new TransactionBeginJob( this );
connect( begin, SIGNAL(result(KJob*)), SLOT(done(KJob*)) );
++mJobCount;
#endif
for ( int i = 0; i < count; ++i ) {
++mJobCount;
ItemCreateJob *job = new ItemCreateJob( item, collection, this );
connect( job, SIGNAL(result(KJob*)), SLOT(done(KJob*)) );
}
#ifdef GLOBAL_TRANSACTION
TransactionCommitJob *commit = new TransactionCommitJob( this );
connect( commit, SIGNAL(result(KJob*)), SLOT(done(KJob*)) );
++mJobCount;
#endif
}
void ItemDumper::done( KJob * job )
{
--mJobCount;
if ( job->error() ) {
qWarning() << "Error while creating item: " << job->errorString();
}
if ( mJobCount <= 0 ) {
qDebug() << "Time:" << mTime.elapsed() << "ms";
qApp->quit();
}
}
int main( int argc, char** argv )
{
KCmdLineArgs::init( argc, argv, "test", 0, ki18n("Test Application") ,"1.0" ,ki18n("test app") );
KCmdLineOptions options;
options.add("path <argument>", ki18n("IMAP destination path"));
options.add("mimetype <argument>", ki18n("Source mimetype"), "application/octet-stream");
options.add("file <argument>", ki18n("Source file"));
options.add("count <argument>", ki18n("Number of times this file is added"), "1");
KCmdLineArgs::addCmdLineOptions( options );
KApplication app;
KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
QString path = args->getOption( "path" );
QString mimetype = args->getOption( "mimetype" );
QString file = args->getOption( "file" );
int count = qMax( 1, args->getOption( "count").toInt() );
ItemDumper d( path, file, mimetype, count );
return app.exec();
}