File indexing completed on 2024-04-28 04:21:24
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: