list.
MediaImageContainer::MediaImageContainer()
: EmuFrontFile(EmuFrontFile::FileType_MediaImageContainer)
{
- lstMediaImage = QList<MediaImage*>();
+ lstMediaImage = QMap<QString, EmuFrontObject*>();
filePath = 0;
}
MediaImageContainer::MediaImageContainer(int id, QString name,
- QString checksum, int size, QList<MediaImage *>images, FilePathObject *fpo)
+ QString checksum, int size, QMap<QString, EmuFrontObject*>images, FilePathObject *fpo)
: EmuFrontFile(id, name, checksum, size, EmuFrontFile::FileType_MediaImageContainer),
lstMediaImage(images), filePath(fpo)
{ }
MediaImageContainer::MediaImageContainer(QString name, QString checksum,
- int size, QList<MediaImage *>images, FilePathObject *fpo)
+ int size, QMap<QString, EmuFrontObject*>images, FilePathObject *fpo)
: EmuFrontFile(-1, name, checksum, size, EmuFrontFile::FileType_MediaImageContainer),
lstMediaImage(images), filePath(fpo)
{ }
MediaImageContainer::MediaImageContainer(MediaImageContainer &mic)
: EmuFrontFile(mic)
{
- lstMediaImage = QList<MediaImage*>();
- foreach(MediaImage *mi, mic.lstMediaImage)
- lstMediaImage.append(new MediaImage(*mi));
+ lstMediaImage = QMap<QString, EmuFrontObject*>();
+
+ QMapIterator<QString, EmuFrontObject*> it(mic.lstMediaImage);
+ MediaImage *mi = 0;
+ while(it.hasNext()) {
+ it.next();
+ mi = dynamic_cast<MediaImage*>(it.value());
+ lstMediaImage[mi->getCheckSum()] = new MediaImage(*mi);
+ }
+
filePath = new FilePathObject(*(mic.filePath));
}
checkSum = mic.checkSum;
size = mic.size;
qDeleteAll(lstMediaImage);
- foreach(MediaImage *mi, mic.lstMediaImage)
- lstMediaImage.append(new MediaImage(*mi));
+
+ QMapIterator<QString, EmuFrontObject*> it(mic.lstMediaImage);
+ MediaImage *mi = 0;
+ while(it.hasNext()) {
+ it.next();
+ mi = dynamic_cast<MediaImage*>(it.value());
+ lstMediaImage[mi->getCheckSum()] = new MediaImage(*mi);
+ }
filePath = new FilePathObject(*(mic.filePath));
return (*this);
}
-void MediaImageContainer::setMediaImages(QList<MediaImage *> list)
+void MediaImageContainer::setMediaImages(QMap<QString, EmuFrontObject*> list)
{
qDeleteAll(lstMediaImage);
lstMediaImage = list;
}
-QList<MediaImage *> MediaImageContainer::getMediaImages() const
+QMap<QString, EmuFrontObject*> MediaImageContainer::getMediaImages() const
{ return lstMediaImage; }
void MediaImageContainer::addMediaImage(MediaImage *mi)
-{ lstMediaImage.append(mi); }
+{ lstMediaImage[mi->getCheckSum()] = mi; }
void MediaImageContainer::clearMediaImages()
{
public:
MediaImageContainer();
MediaImageContainer(int id, QString name, QString checksum,
- int size, QList<MediaImage*> images, FilePathObject *fpo);
+ int size, QMap<QString, EmuFrontObject*> images, FilePathObject *fpo);
MediaImageContainer(QString name, QString checksum,
- int size, QList<MediaImage*> images, FilePathObject *fpo);
+ int size, QMap<QString, EmuFrontObject*> images, FilePathObject *fpo);
~MediaImageContainer();
MediaImageContainer(MediaImageContainer&);
MediaImageContainer& operator=(MediaImageContainer&);
- QList<MediaImage*> getMediaImages() const;
- void setMediaImages(QList<MediaImage*>);
+ QMap<QString, EmuFrontObject*> getMediaImages() const;
+ void setMediaImages(QMap<QString, EmuFrontObject*>);
void addMediaImage(MediaImage*);
void clearMediaImages();
void setFilePath(FilePathObject*);
FilePathObject* getFilePath() const;
private:
- QList<MediaImage*> lstMediaImage;
+ QMap<QString, EmuFrontObject*> lstMediaImage;
FilePathObject *filePath;
};
Returns a list of media image id corresponding to the given list of media
images inserted to the database or already in the database.
*/
-QList<int> DbMediaImage::storeMediaImages(QList<MediaImage *> images)
+QList<int> DbMediaImage::storeMediaImages(QMap<QString, EmuFrontObject*> images)
{
qDebug() << "Storing media images to database.";
QList<int> ids = QList<int>();
- foreach(MediaImage* mi, images)
+ QMapIterator<QString, EmuFrontObject*> it(images);
+ MediaImage *mi = 0;
+ while(it.hasNext())
{
+ it.next();
+ mi = dynamic_cast<MediaImage*>(it.value());
QString cksum = mi->getCheckSum();
qDebug() << "Storing media image " << mi->getName()
<< " with checksum " << cksum;
/* Fetches a list of media images inside a media image container
with a given id */
-QList<MediaImage*> DbMediaImage::getMediaImages(int micId) const
+QMap<QString, EmuFrontObject*> DbMediaImage::getMediaImages(int micId) const
{
- QList<MediaImage*> list;
+ QMap<QString, EmuFrontObject*> list;
QSqlQuery q;
q.prepare("SELECT file.id, file.name, file.checksum, file.size "
"FROM file INNER JOIN mediaimagecontainer_mediaimage "
name = rec.value(DbMediaImage::File_Name).toString();
checksum = rec.value(DbMediaImage::File_CheckSum).toString();
size = rec.value(DbMediaImage::File_FileSize).toInt();
- list.append(new MediaImage(id, name, checksum, size));
+ list[checksum] = new MediaImage(id, name, checksum, size);
}
return list;
}
#include "dbfile.h"
#include "../dataobjects/mediaimage.h"
+#include <QMap>
class DbMediaImage : public DbFile
{
public:
DbMediaImage(QObject *parent);
- QList<int> storeMediaImages(QList<MediaImage*>);
+ QList<int> storeMediaImages(QMap<QString, EmuFrontObject*>);
void removeOrphanedMediaImages(QList<int> ids);
- QList<MediaImage*> getMediaImages(int id) const;
+ QMap<QString, EmuFrontObject*> getMediaImages(int id) const;
/*virtual bool updateDataObjectToModel(const EmuFrontObject *);
virtual bool insertDataObjectToModel(const EmuFrontObject *);
virtual bool deleteDataObjectFromModel(QModelIndex *);
throw new EmuFrontException("Cannot install media image "
"container to database without a file path object!");
- QList<MediaImage*> images = mic->getMediaImages();
+ QMap<QString, EmuFrontObject*> images = mic->getMediaImages();
QList<int> ids = dbMediaImage->storeMediaImages(images);
qDebug() << "Stored " << ids.count() << " media images.";
= dynamic_cast<FilePathObject*>(dbFilePath->getDataObject(fpId));
//int supId = rec->value(MIC_SetupId).toInt();
//Setup *sup = dbSetup->getDataObject(supId)
- QList<MediaImage*> images = dbMediaImage->getMediaImages(id);
+ QMap<QString, EmuFrontObject*> images = dbMediaImage->getMediaImages(id);
mic = new MediaImageContainer(
id, name, checksum, size, images, fpo
void EmuLauncher::launchEmu()
{
- QList<EmuFrontObject*> mediaImages;
+ QMap<QString, EmuFrontObject*> mediaImages;
QList<MediaImageContainer*> mediaImageContainers;
Executable *exe;
try {
continue;
}
mediaImageContainers << mic;
- QList<MediaImage*> contained = mic->getMediaImages();
- foreach(MediaImage *mi, contained)
- mediaImages << mi;
+ QMap<QString, EmuFrontObject*> contained = mic->getMediaImages();
+ mediaImages.unite(contained);
+ /*QMapIterator<QString, MediaImage*> it(contained);
+ while (it.hasNext()){
+ mediaImages << it.value();
+ }*/
}
if (mediaImages.count() < 1) {
pos += rx.matchedLength();
}
- QList<MediaImage*> selectedImages;
+ QList<EmuFrontObject*> selectedImages;
if (list.count() > 1) {
for(int i = 0; i < list.count(); i++) {
//QInputDialog::getItem();
// show select boot image dialog
bool ok;
EmuFrontObject *efo = EmuFrontInputDialog::getItem(
- this, tr("Select boot image"), tr("Select"), mediaImages, 0, false, &ok);
+ this, tr("Select boot image"), tr("Select"), mediaImages.values(), 0, false, &ok);
if (!ok) {
throw new EmuFrontException(tr("Boot image selection was canceled, aborting."));
}
+ selectedImages << efo;
}
+ else if (mediaImages.count() == 1)
+ selectedImages << mediaImages.values().first();
// in the both cases the (ordered) list of media images will be passed to emuHelper
- foreach(EmuFrontObject *mi, mediaImages) {
- qDebug() << "Media image " << mi->getName();
- }
- emuHelper->launch(exe, mediaImageContainers, mediaImages);
+ if (selectedImages.count() < 1)
+ throw new EmuFrontException(tr("No media images selected"));
+
+ emuHelper->launch(exe, mediaImageContainers, selectedImages);
} catch (EmuFrontException efe) {
delete exe;
qDeleteAll(mediaImageContainers);
unzipHelper = new UnzipHelper(this);
}
-void EmuHelper::launch(const Executable * ex, QList<MediaImageContainer *> &micList, QList<EmuFrontObject *> &miList)
+void EmuHelper::launch(const Executable * ex, QList<MediaImageContainer *> micList,
+ QList<EmuFrontObject *> miList)
{
+ if (miList.count() < 1) {
+ throw EmuFrontException(tr("No media images available!"));
+ }
+ if (micList.count() < 1) {
+ throw EmuFrontException(tr("No media image containers available!"));
+ }
// extract the media image container to tmp folder
// (TODO: tmp folder configuration)
- // TODO: support multiple media images
- MediaImageContainer *mic = micList.first();
-
- QString fp;
- fp.append(mic->getFilePath()->getName());
- if (!fp.endsWith('/')) fp.append("/");
- fp.append(mic->getName());
-
- int ret = unzipHelper->extractAll(fp, "/tmp/");
-
- if (ret) {
- throw EmuFrontException(tr("Unzip failed with %1.").arg(ret));
+ foreach(MediaImageContainer *mic, micList) {
+ QString fp;
+ fp.append(mic->getFilePath()->getName());
+ if (!fp.endsWith('/')) fp.append("/");
+ fp.append(mic->getName());
+ int ret = unzipHelper->extractAll(fp, "/tmp/");
+ if (ret) {
+ qDebug() << "Failed unzipping " << fp << ".";
+ //throw EmuFrontException(tr("Unzip failed with %1.").arg(ret));
+ }
}
// TODO: launch the 1st media image in the media image list of ex
QString opts = ex->getOptions();
QString tmpfp = " \"/tmp/";
- qDebug() << "Launching file '" << mic->getMediaImages().first()->getName() << " '";
- tmpfp.append(mic->getMediaImages().first()->getName()).append("\"");
+ // if only one media image placeholder -> TODO: if more placeholders e.g. $1 $2 ...
+ tmpfp.append(miList.first()->getName()).append("\"");
opts.replace("$1", tmpfp);
QString cmdWithParams;
cmdWithParams.append(ex->getExecutable());
// TODO: tmp will be set dynamically
// TODO: assigning multiple media images
qDebug() << "Command with params " << cmdWithParams;
- // Executable and MediaImageContainer objects are no more needed:
+ // Executable and MediaImageContainer / MediaImage objects are no more needed:
delete ex;
- delete mic;
+ qDeleteAll(micList);
+ //qDeleteAll(miList); these objects are already deleted along with micList
start(cmdWithParams, QIODevice::ReadOnly);
}
Q_OBJECT
public:
explicit EmuHelper(QObject *parent = 0);
- void launch(const Executable * ex, QList<MediaImageContainer *> &micList, QList<EmuFrontObject*> &miList);
+ void launch(const Executable * ex, QList<MediaImageContainer *> micList, QList<EmuFrontObject*> miList);
private slots:
void processError(QProcess::ProcessError);
void processFinished(int);
qDebug() << QString("%1 %2").arg(fileInfo.size(), 10).arg(fileInfo.absoluteFilePath());
//... and collect the contents of each archive
- QList<MediaImage*> files = unzipHelper->listContents(fileInfo.absoluteFilePath(), fp);
+ QMap<QString, EmuFrontObject*> files = unzipHelper->listContents(fileInfo.absoluteFilePath(), fp);
if (files.count() > 0)
{
{
}
-QList<MediaImage*> UnzipHelper::listContents(const QString filePath, const FilePathObject *fp)
+QMap<QString, EmuFrontObject*> UnzipHelper::listContents(const QString filePath, const FilePathObject *fp)
{
if (!fp->getSetup()){
throw EmuFrontException(tr("Setup not available with %1.").arg(fp->getName()));
}
Setup *sup = fp->getSetup();
- QList<MediaImage*> fileList;
+ QMap<QString, EmuFrontObject*> fileList;
QString command;
command.append(UNZIP_COMMAND);
int length = lenStr.toInt(&ok);
if (!ok) continue;
MediaImage *effo = new MediaImage(filename, checksum, length);
- fileList << effo;
+ fileList[checksum] = effo;
}
qDebug() << "File list has " << fileList.size() << " entries.";
#include "processhelper.h"
-class MediaImage;
+class EmuFrontObject;
class FilePathObject;
class UnzipHelper : public ProcessHelper
{
public:
UnzipHelper(QObject *parent = 0);
- QList<MediaImage*> listContents(const QString filePath, const FilePathObject *fp);
+ QMap<QString, EmuFrontObject*> listContents(const QString filePath, const FilePathObject *fp);
int extractAll(QString filePath, QString targetPath);
private:
static const QString UNZIP_COMMAND;