diff options
Diffstat (limited to 'src/utilities/batch/imageinfojob.cpp')
-rw-r--r-- | src/utilities/batch/imageinfojob.cpp | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/src/utilities/batch/imageinfojob.cpp b/src/utilities/batch/imageinfojob.cpp new file mode 100644 index 00000000..58660697 --- /dev/null +++ b/src/utilities/batch/imageinfojob.cpp @@ -0,0 +1,163 @@ +/* ============================================================ + * + * This file is a part of digiKam project + * http://www.digikam.org + * + * Date : 2006-22-01 + * Description : digikamalbum TDEIO slave interface to get image + * info from database. + * + * Copyright (C) 2007 by Gilles Caulier <caulier dot gilles at gmail dot 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, 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. + * + * ============================================================ */ + +// TQt includes. + +#include <tqstring.h> +#include <tqdatastream.h> + +// KDE includes. + +#include <tdeio/job.h> +#include <kurl.h> + +// Local includes. + +#include "ddebug.h" +#include "album.h" +#include "albummanager.h" +#include "albumsettings.h" +#include "imageinfojob.h" +#include "imageinfojob.moc" + +namespace Digikam +{ + +class ImageInfoJobPriv +{ +public: + + ImageInfoJobPriv() + { + job = 0; + + AlbumSettings *settings = AlbumSettings::instance(); + imagefilter = settings->getImageFileFilter().lower() + + settings->getImageFileFilter().upper() + + settings->getRawFileFilter().lower() + + settings->getRawFileFilter().upper(); + } + + TQString imagefilter; + + TDEIO::TransferJob *job; +}; + +ImageInfoJob::ImageInfoJob() +{ + d = new ImageInfoJobPriv; +} + +ImageInfoJob::~ImageInfoJob() +{ + delete d; +} + +void ImageInfoJob::allItemsFromAlbum(Album *album) +{ + if (d->job) + { + d->job->kill(); + d->job = 0; + } + + if (!album) + return; + + TQByteArray ba; + TQDataStream ds(ba, IO_WriteOnly); + ds << AlbumManager::instance()->getLibraryPath(); + ds << album->kurl(); + ds << d->imagefilter; + ds << 0; // getting dimensions (not needed here) + ds << 0; // recursive sub-album (not needed here) + ds << 0; // recursive sub-tags (not needed here) + + // Protocol = digikamalbums -> tdeio_digikamalbums + d->job = new TDEIO::TransferJob(album->kurl(), TDEIO::CMD_SPECIAL, + ba, TQByteArray(), false); + + connect(d->job, TQ_SIGNAL(result(TDEIO::Job*)), + this, TQ_SLOT(slotResult(TDEIO::Job*))); + + connect(d->job, TQ_SIGNAL(data(TDEIO::Job*, const TQByteArray&)), + this, TQ_SLOT(slotData(TDEIO::Job*, const TQByteArray&))); +} + +void ImageInfoJob::stop() +{ + if (d->job) + { + d->job->kill(); + d->job = 0; + } +} + +void ImageInfoJob::slotResult(TDEIO::Job* job) +{ + d->job = 0; + + if (job->error()) + { + DWarning() << "Failed to list url: " << job->errorString() << endl; + return; + } + + emit signalCompleted(); +} + +void ImageInfoJob::slotData(TDEIO::Job*, const TQByteArray& data) +{ + if (data.isEmpty()) + return; + + TQ_LLONG imageID; + int albumID; + TQString name; + TQString date; + size_t size; + TQSize dims; + ImageInfoList itemsList; + TQDataStream ds(data, IO_ReadOnly); + + while (!ds.atEnd()) + { + ds >> imageID; + ds >> albumID; + ds >> name; + ds >> date; + ds >> size; + ds >> dims; + + ImageInfo* info = new ImageInfo(imageID, albumID, name, + TQDateTime::fromString(date, TQt::ISODate), + size, dims); + + itemsList.append(info); + } + + emit signalItemsInfo(itemsList); +} + +} // namespace Digikam |