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.
167 lines
3.8 KiB
167 lines
3.8 KiB
/* ============================================================
|
|
*
|
|
* 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 <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>
|
|
|
|
// KDE includes.
|
|
|
|
#include <tdelocale.h>
|
|
#include <tdeapplication.h>
|
|
|
|
// 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
|
|
|
|
|