125 lines
4.3 KiB
C++
Raw Normal View History

2024-06-29 11:52:32 +06:00
// 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 <../auto/testutils.h>
#include <lib/about.h>
#include <lib/thumbnailprovider/thumbnailprovider.h>
// KF
#include <KAboutData>
#include <KLocalizedString>
// Qt
#include <QCommandLineParser>
#include <QDir>
#include <QtDebug>
using namespace Gwenview;
int main(int argc, char **argv)
{
KLocalizedString::setApplicationDomain("thumbnailgen");
QScopedPointer<KAboutData> aboutData(Gwenview::createAboutData(QStringLiteral("thumbnailgen"), /* component name */
i18n("thumbnailgen") /* display name */
));
QApplication app(argc, argv);
QCommandLineParser parser;
aboutData->setupCommandLine(&parser);
parser.addHelpOption();
parser.addVersionOption();
parser.addPositionalArgument("image-dir", i18n("Image dir to open"));
parser.addPositionalArgument("size", i18n("What size of thumbnails to generate. Can be either 'normal' or 'large'"));
parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("t") << QStringLiteral("thumbnail-dir"),
i18n("Use <dir> instead of ~/.thumbnails to store thumbnails"),
"thumbnail-dir"));
parser.process(app);
aboutData->processCommandLine(&parser);
// Read cmdline options
const QStringList args = parser.positionalArguments();
if (args.count() != 2) {
qFatal("Wrong number of arguments");
return 1;
}
const QString imageDirName = args.first();
ThumbnailGroup::Enum group = ThumbnailGroup::Normal;
if (args.last() == "large") {
group = ThumbnailGroup::Large;
} else if (args.last() == "normal") {
// group is already set to the right value
} else {
qFatal("Invalid thumbnail size: %s", qPrintable(args.last()));
}
QString thumbnailBaseDirName = parser.value(QStringLiteral("thumbnail-dir"));
// Set up thumbnail base dir
if (!thumbnailBaseDirName.isEmpty()) {
const QDir dir = QDir(thumbnailBaseDirName);
thumbnailBaseDirName = dir.absolutePath();
if (!dir.exists()) {
bool ok = QDir::root().mkpath(thumbnailBaseDirName);
if (!ok) {
qFatal("Could not create %s", qPrintable(thumbnailBaseDirName));
return 1;
}
}
if (!thumbnailBaseDirName.endsWith(QLatin1Char('/'))) {
thumbnailBaseDirName += QLatin1Char('/');
}
ThumbnailProvider::setThumbnailBaseDir(thumbnailBaseDirName);
}
// List dir
QDir dir(imageDirName);
KFileItemList list;
const auto entryList = dir.entryList();
for (const QString &name : entryList) {
const QUrl url = QUrl::fromLocalFile(dir.absoluteFilePath(name));
KFileItem item(url);
list << item;
}
qWarning() << "Generating thumbnails for" << list.count() << "files";
// Start the job
QElapsedTimer chrono;
ThumbnailProvider job;
job.setThumbnailGroup(group);
job.appendItems(list);
chrono.start();
QEventLoop loop;
QObject::connect(&job, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
qWarning() << "Time to generate thumbnails:" << chrono.restart();
waitForDeferredDeletes();
while (!ThumbnailProvider::isThumbnailWriterEmpty()) {
QCoreApplication::processEvents();
}
qWarning() << "Time to save pending thumbnails:" << chrono.restart();
return 0;
}