/* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 2007-22-01 * Description : batch sync pictures metadata from all Albums * with digiKam database * * Copyright (C) 2007 by Gilles Caulier * * 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 // KDE includes. #include #include // Local includes. #include "ddebug.h" #include "album.h" #include "imageinfojob.h" #include "metadatahub.h" #include "statusprogressbar.h" #include "batchsyncmetadata.h" #include "batchsyncmetadata.moc" namespace Digikam { class BatchSyncMetadataPriv { public: BatchSyncMetadataPriv() { cancel = false; imageInfoJob = new ImageInfoJob(); album = 0; count = 0; imageInfo = 0; } bool cancel; int count; Album *album; ImageInfoJob *imageInfoJob; ImageInfoList imageInfoList; ImageInfo *imageInfo; }; BatchSyncMetadata::BatchSyncMetadata(TQObject* parent, Album *album) : TQObject(parent) { d = new BatchSyncMetadataPriv; d->album = album; } BatchSyncMetadata::BatchSyncMetadata(TQObject* parent, const ImageInfoList& list) : TQObject(parent) { d = new BatchSyncMetadataPriv; d->imageInfoList = list; } BatchSyncMetadata::~BatchSyncMetadata() { delete d; } void BatchSyncMetadata::parseAlbum() { d->imageInfoJob->allItemsFromAlbum(d->album); connect(d->imageInfoJob, TQT_SIGNAL(signalItemsInfo(const ImageInfoList&)), this, TQT_SLOT(slotAlbumParsed(const ImageInfoList&))); connect(d->imageInfoJob, TQT_SIGNAL(signalCompleted()), this, TQT_SLOT(slotComplete())); } void BatchSyncMetadata::slotComplete() { if (d->imageInfoList.isEmpty()) complete(); } void BatchSyncMetadata::slotAlbumParsed(const ImageInfoList& list) { d->imageInfoList = list; parseList(); } void BatchSyncMetadata::parseList() { emit signalProgressBarMode(StatusProgressBar::CancelProgressBarMode, i18n("Synchonizing images' Metadata with database. Please wait...")); d->imageInfo = d->imageInfoList.first(); parsePicture(); } void BatchSyncMetadata::parsePicture() { if (!d->imageInfo) // All is done. { complete(); slotAbort(); } else if (d->cancel) { complete(); } else { MetadataHub fileHub; // read in from database fileHub.load(d->imageInfo); // write out to file DMetadata fileHub.write(d->imageInfo->filePath()); emit signalProgressValue((int)((d->count++/(float)d->imageInfoList.count())*100.0)); d->imageInfo = d->imageInfoList.next(); kapp->processEvents(); parsePicture(); } } void BatchSyncMetadata::slotAbort() { d->cancel = true; d->imageInfoJob->stop(); } void BatchSyncMetadata::complete() { emit signalProgressBarMode(StatusProgressBar::TextMode, TQString()); emit signalComplete(); } } // namespace Digikam