// vim: set tabstop=4 shiftwidth=4 expandtab: /* Gwenview: an image viewer Copyright 2012 Aurélien Gâteau 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 #include <../auto/testutils.h> // KDE #include #include #include #include // Qt #include #include 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 ", ki18n("Use 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; }