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 }