File indexing completed on 2024-05-19 04:07:53

0001 /*
0002     SPDX-FileCopyrightText: 2011 Stefan Majewsky <majewsky@gmx.net>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "components.h"
0008 #include "puzzle.h"
0009 #include "puzzlestructs.h"
0010 
0011 #include <QDir>
0012 #include <KConfigGroup>
0013 #include <KDesktopFile>
0014 
0015 Palapeli::RetailStorageComponent::RetailStorageComponent(const QString& desktopFile)
0016     : m_desktopFile(desktopFile)
0017 {
0018 }
0019 
0020 Palapeli::PuzzleComponent* Palapeli::RetailStorageComponent::cast(Type type) const
0021 {
0022     //all casting via CreationContextComponent
0023     if (type != CreationContext)
0024     {
0025         return puzzle()->get(CreationContext)->cast(type);
0026     }
0027     //create creation context
0028     Palapeli::PuzzleCreationContext creationContext;
0029     //open manifest
0030     QDir dir = QFileInfo(m_desktopFile).dir();
0031     KDesktopFile manifest(m_desktopFile);
0032     KConfigGroup jobGroup(&manifest, QStringLiteral("Job"));
0033     //read simple metadata
0034     creationContext.name = manifest.readName();
0035     creationContext.author = manifest.desktopGroup().readEntry("X-KDE-PluginInfo-Author", QString());
0036     creationContext.comment = manifest.readComment();
0037     creationContext.modifyProtection = manifest.group(QStringLiteral("Collection")).readEntry("ModifyProtection", false);
0038     //read image
0039     const QString imageName = jobGroup.readEntry("Image", QString());
0040     creationContext.image.load(dir.absoluteFilePath(imageName));
0041     creationContext.thumbnail = creationContext.image.scaled(Palapeli::PuzzleMetadata::ThumbnailBaseSize, Qt::KeepAspectRatio);
0042     creationContext.pieceCount = -1; //TODO: not available now
0043     //load slicer configuration
0044     creationContext.slicer = jobGroup.readEntry("Slicer", QString());
0045     creationContext.slicerMode = jobGroup.readEntry("SlicerMode", QByteArray());
0046     //all the other entries in jobGroup belong into slicerArgs
0047     QMap<QString, QString> args = jobGroup.entryMap();
0048     args.remove(QStringLiteral("Image"));
0049     args.remove(QStringLiteral("ImageSize"));
0050     args.remove(QStringLiteral("Slicer"));
0051     args.remove(QStringLiteral("SlicerMode"));
0052     QMapIterator<QString, QString> iter(args);
0053     while (iter.hasNext())
0054     {
0055         iter.next();
0056         creationContext.slicerArgs.insert(iter.key().toUtf8(), iter.value());
0057     }
0058     return new Palapeli::CreationContextComponent(creationContext);
0059 }