File indexing completed on 2024-04-28 15:40:25

0001 // SPDX-FileCopyrightText: 2003-2010 Jesper K. Pedersen <jesper.pedersen@kdab.com>
0002 // SPDX-FileCopyrightText: 2018-2023 Johannes Zarl-Zierl <johannes@zarl-zierl.at>
0003 // SPDX-FileCopyrightText: 2020 Tobias Leupold <tl@stonemx.de>
0004 // SPDX-FileCopyrightText: 2023 Alexander Lohnau <alexander.lohnau@gmx.de>
0005 //
0006 // SPDX-License-Identifier: GPL-2.0-or-later
0007 
0008 #include "DemoUtil.h"
0009 
0010 #include "FileUtil.h"
0011 
0012 #include <MainWindow/Window.h>
0013 #include <kpabase/Logging.h>
0014 
0015 #include <KIO/DeleteJob>
0016 #include <KJob>
0017 #include <KJobWidgets>
0018 #include <KLocalizedString>
0019 #include <KMessageBox>
0020 #include <QDir>
0021 #include <QDirIterator>
0022 #include <QFileInfo>
0023 #include <QStandardPaths>
0024 #include <QUrl>
0025 
0026 namespace
0027 {
0028 
0029 void copyList(const QStringList &from, const QString &directoryTo)
0030 {
0031     for (QStringList::ConstIterator it = from.constBegin(); it != from.constEnd(); ++it) {
0032         const QString destFile = directoryTo + QString::fromLatin1("/") + QFileInfo(*it).fileName();
0033         if (!QFileInfo::exists(destFile)) {
0034             const bool ok = Utilities::copyOrOverwrite(*it, destFile);
0035             if (!ok) {
0036                 KMessageBox::error(nullptr, i18n("Unable to copy '%1' to '%2'.", *it, destFile), i18n("Error Running Demo"));
0037                 exit(-1);
0038             }
0039         }
0040     }
0041 }
0042 }
0043 
0044 QString Utilities::setupDemo()
0045 {
0046     const QString demoDir = QString::fromLatin1("%1/kphotoalbum-demo-%2").arg(QDir::tempPath(), QString::fromLocal8Bit(qgetenv("LOGNAME")));
0047     QFileInfo fi(demoDir);
0048     if (!fi.exists()) {
0049         bool ok = QDir().mkdir(demoDir);
0050         if (!ok) {
0051             KMessageBox::error(nullptr, i18n("Unable to create folder '%1' needed for demo.", demoDir), i18n("Error Running Demo"));
0052             exit(-1);
0053         }
0054     }
0055 
0056     // index.xml
0057     const QString demoDB = QStandardPaths::locate(QStandardPaths::DataLocation, QString::fromLatin1("demo/index.xml"));
0058     if (demoDB.isEmpty()) {
0059         qCDebug(UtilitiesLog) << "No demo database in standard locations:" << QStandardPaths::standardLocations(QStandardPaths::DataLocation);
0060         exit(-1);
0061     }
0062     const QString configFile = demoDir + QString::fromLatin1("/index.xml");
0063     if (QFile::exists(configFile))
0064         return configFile;
0065 
0066     copyOrOverwrite(demoDB, configFile);
0067 
0068     // Images
0069     const QStringList kpaDemoDirs = QStandardPaths::locateAll(
0070         QStandardPaths::DataLocation,
0071         QString::fromLatin1("demo"),
0072         QStandardPaths::LocateDirectory);
0073     QStringList images;
0074     for (const QString &dir : kpaDemoDirs) {
0075         QDirIterator it(dir, QStringList() << QStringLiteral("*.jpg") << QStringLiteral("*.avi"));
0076         while (it.hasNext()) {
0077             images.append(it.next());
0078         }
0079     }
0080     copyList(images, demoDir);
0081 
0082     // CategoryImages
0083     QString catDir = demoDir + QString::fromLatin1("/CategoryImages");
0084     fi = QFileInfo(catDir);
0085     if (!fi.exists()) {
0086         bool ok = QDir().mkdir(catDir);
0087         if (!ok) {
0088             KMessageBox::error(nullptr, i18n("Unable to create folder '%1' needed for demo.", catDir), i18n("Error Running Demo"));
0089             exit(-1);
0090         }
0091     }
0092 
0093     const QStringList kpaDemoCatDirs = QStandardPaths::locateAll(
0094         QStandardPaths::DataLocation,
0095         QString::fromLatin1("demo/CategoryImages"),
0096         QStandardPaths::LocateDirectory);
0097     QStringList catImages;
0098     for (const QString &dir : kpaDemoCatDirs) {
0099         QDirIterator it(dir, QStringList() << QStringLiteral("*.jpg"));
0100         while (it.hasNext()) {
0101             catImages.append(it.next());
0102         }
0103     }
0104     copyList(catImages, catDir);
0105 
0106     return configFile;
0107 }
0108 
0109 void Utilities::deleteDemo()
0110 {
0111     QString dir = QString::fromLatin1("%1/kphotoalbum-demo-%2").arg(QDir::tempPath(), QString::fromLocal8Bit(qgetenv("LOGNAME")));
0112     QUrl demoUrl = QUrl::fromLocalFile(dir);
0113     KJob *delDemoJob = KIO::del(demoUrl);
0114     KJobWidgets::setWindow(delDemoJob, MainWindow::Window::theMainWindow());
0115     delDemoJob->exec();
0116 }
0117 
0118 // vi:expandtab:tabstop=4 shiftwidth=4: