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.
184 lines
4.5 KiB
184 lines
4.5 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>
|
|
#include <tqtimer.h>
|
|
#include <tqdatetime.h>
|
|
|
|
// KDE includes.
|
|
|
|
#include <tdelocale.h>
|
|
#include <tdeapplication.h>
|
|
#include <kiconloader.h>
|
|
|
|
// Local includes.
|
|
|
|
#include "ddebug.h"
|
|
#include "album.h"
|
|
#include "albummanager.h"
|
|
#include "imageinfojob.h"
|
|
#include "metadatahub.h"
|
|
#include "batchalbumssyncmetadata.h"
|
|
#include "batchalbumssyncmetadata.moc"
|
|
|
|
namespace Digikam
|
|
{
|
|
|
|
class BatchAlbumsSyncMetadataPriv
|
|
{
|
|
public:
|
|
|
|
BatchAlbumsSyncMetadataPriv()
|
|
{
|
|
cancel = false;
|
|
imageInfoJob = 0;
|
|
palbumList = AlbumManager::instance()->allPAlbums();
|
|
duration.start();
|
|
}
|
|
|
|
bool cancel;
|
|
|
|
TQTime duration;
|
|
|
|
ImageInfoJob *imageInfoJob;
|
|
|
|
AlbumList palbumList;
|
|
AlbumList::Iterator albumsIt;
|
|
};
|
|
|
|
BatchAlbumsSyncMetadata::BatchAlbumsSyncMetadata(TQWidget* parent)
|
|
: DProgressDlg(parent)
|
|
{
|
|
d = new BatchAlbumsSyncMetadataPriv;
|
|
d->imageInfoJob = new ImageInfoJob();
|
|
setValue(0);
|
|
setCaption(i18n("Sync All Images' Metadata"));
|
|
setLabel(i18n("<b>Syncing the metadata of all images with the digiKam database. Please wait...</b>"));
|
|
setButtonText(i18n("&Abort"));
|
|
resize(600, 300);
|
|
TQTimer::singleShot(500, this, TQT_SLOT(slotStart()));
|
|
}
|
|
|
|
BatchAlbumsSyncMetadata::~BatchAlbumsSyncMetadata()
|
|
{
|
|
delete d;
|
|
}
|
|
|
|
void BatchAlbumsSyncMetadata::slotStart()
|
|
{
|
|
setTitle(i18n("Parsing all albums"));
|
|
setTotalSteps(d->palbumList.count());
|
|
|
|
connect(d->imageInfoJob, TQT_SIGNAL(signalItemsInfo(const ImageInfoList&)),
|
|
this, TQT_SLOT(slotAlbumParsed(const ImageInfoList&)));
|
|
|
|
connect(d->imageInfoJob, TQT_SIGNAL(signalCompleted()),
|
|
this, TQT_SLOT(slotComplete()));
|
|
|
|
d->albumsIt = d->palbumList.begin();
|
|
parseAlbum();
|
|
}
|
|
|
|
void BatchAlbumsSyncMetadata::parseAlbum()
|
|
{
|
|
if (d->albumsIt == d->palbumList.end()) // All is done.
|
|
{
|
|
TQTime t;
|
|
t = t.addMSecs(d->duration.elapsed());
|
|
setLabel(i18n("<b>The metadata of all images has been synchronized with the digiKam database.</b>"));
|
|
setTitle(i18n("Duration: %1").arg(t.toString()));
|
|
setButtonText(i18n("&Close"));
|
|
advance(1);
|
|
abort();
|
|
}
|
|
else if (!(*d->albumsIt)->isRoot())
|
|
{
|
|
d->imageInfoJob->allItemsFromAlbum(*d->albumsIt);
|
|
DDebug() << "Sync Items from Album :" << (*d->albumsIt)->kurl().directory() << endl;
|
|
}
|
|
else
|
|
{
|
|
d->albumsIt++;
|
|
parseAlbum();
|
|
}
|
|
}
|
|
|
|
void BatchAlbumsSyncMetadata::slotAlbumParsed(const ImageInfoList& list)
|
|
{
|
|
TQPixmap pix = TDEApplication::kApplication()->iconLoader()->loadIcon(
|
|
"folder_image", TDEIcon::NoGroup, 32);
|
|
|
|
ImageInfoList imageInfoList = list;
|
|
|
|
if (!imageInfoList.isEmpty())
|
|
{
|
|
addedAction(pix, imageInfoList.first()->kurl().directory());
|
|
|
|
for (ImageInfo *info = imageInfoList.first(); info; info = imageInfoList.next())
|
|
{
|
|
MetadataHub fileHub;
|
|
// read in from database
|
|
fileHub.load(info);
|
|
// write out to file DMetadata
|
|
fileHub.write(info->filePath());
|
|
}
|
|
}
|
|
|
|
advance(1);
|
|
d->albumsIt++;
|
|
parseAlbum();
|
|
}
|
|
|
|
void BatchAlbumsSyncMetadata::slotComplete()
|
|
{
|
|
advance(1);
|
|
d->albumsIt++;
|
|
parseAlbum();
|
|
}
|
|
|
|
void BatchAlbumsSyncMetadata::slotCancel()
|
|
{
|
|
abort();
|
|
done(Cancel);
|
|
}
|
|
|
|
void BatchAlbumsSyncMetadata::closeEvent(TQCloseEvent *e)
|
|
{
|
|
abort();
|
|
e->accept();
|
|
}
|
|
|
|
void BatchAlbumsSyncMetadata::abort()
|
|
{
|
|
d->cancel = true;
|
|
d->imageInfoJob->stop();
|
|
emit signalComplete();
|
|
}
|
|
|
|
} // namespace Digikam
|
|
|
|
|