kde-extraapps/gwenview/tests/manual/thumbnailgen.cpp

121 lines
3.8 KiB
C++

// vim: set tabstop=4 shiftwidth=4 expandtab:
/*
Gwenview: an image viewer
Copyright 2012 Aurélien Gâteau <agateau@kde.org>
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
of the License, 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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA.
*/
// Local
#include <lib/thumbnailprovider/thumbnailprovider.h>
#include <../auto/testutils.h>
// KDE
#include <KAboutData>
#include <KApplication>
#include <KCmdLineArgs>
#include <KDebug>
// Qt
#include <QDir>
#include <QTime>
using namespace Gwenview;
int main(int argc, char** argv)
{
KAboutData aboutData(
"thumbnailgen", // appName
0, // catalogName
ki18n("thumbnailgen"), // programName
"0.0.0");
// Parser init
KCmdLineArgs::init(argc, argv, &aboutData);
KCmdLineOptions options;
options.add("+image-dir", ki18n("Image dir to open"));
options.add("+size", ki18n("What size of thumbnails to generate. Can be either 'normal' or 'large'"));
options.add("t").add("thumbnail-dir <dir>", ki18n("Use <dir> instead of ~/.thumbnails to store thumbnails"));
KCmdLineArgs::addCmdLineOptions(options);
KApplication app;
// Read cmdline options
KCmdLineArgs* args = KCmdLineArgs::parsedArgs();
if (args->count() != 2) {
kFatal() << "Wrong number of arguments";
return 1;
}
QString imageDirName = args->arg(0);
ThumbnailGroup::Enum group = ThumbnailGroup::Normal;
if (args->arg(1) == "large") {
group = ThumbnailGroup::Large;
} else if (args->arg(1) == "normal") {
// group is already set to the right value
} else {
kFatal() << "Invalid thumbnail size:" << args->arg(1);
}
QString thumbnailBaseDirName = args->isSet("thumbnail-dir") ? args->getOption("thumbnail-dir") : QString();
// Set up thumbnail base dir
if (!thumbnailBaseDirName.isEmpty()) {
QDir dir = QDir(thumbnailBaseDirName);
thumbnailBaseDirName = dir.absolutePath();
if (!dir.exists()) {
bool ok = QDir::root().mkpath(thumbnailBaseDirName);
if (!ok) {
kFatal() << "Could not create" << thumbnailBaseDirName;
return 1;
}
}
if (!thumbnailBaseDirName.endsWith("/")) {
thumbnailBaseDirName += "/";
}
ThumbnailProvider::setThumbnailBaseDir(thumbnailBaseDirName);
}
// List dir
QDir dir(imageDirName);
KFileItemList list;
Q_FOREACH(const QString &name, dir.entryList()) {
KUrl url = KUrl::fromLocalFile(dir.absoluteFilePath(name));
KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url);
list << item;
}
kWarning() << "Generating thumbnails for" << list.count() << "files";
// Start the job
QTime chrono;
ThumbnailProvider job;
job.setThumbnailGroup(group);
job.appendItems(list);
chrono.start();
QEventLoop loop;
QObject::connect(&job, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
kWarning() << "Time to generate thumbnails:" << chrono.restart();
waitForDeferredDeletes();
while (!ThumbnailProvider::isThumbnailWriterEmpty()) {
QCoreApplication::processEvents();
}
kWarning() << "Time to save pending thumbnails:" << chrono.restart();
return 0;
}