Expanded implementation for saving media image containers to database
[emufront] / src / db / dbmediaimagecontainer.cpp
index c73b924..e870f58 100644 (file)
@@ -24,6 +24,7 @@ DbMediaImageContainer::DbMediaImageContainer(QObject *parent)
     : DbQueryModelManager(parent)
 {
     dbMediaImage = new DbMediaImage(parent);
+    dbFile = new DbFile(parent);
 }
 
 bool DbMediaImageContainer::updateDataObjectToModel(const EmuFrontObject *efo)
@@ -91,7 +92,7 @@ int DbMediaImageContainer::getMediaImageContainer(QString checksum) const
 * Stores media image containers, including the media images included
 * to database.
 */
-void DbMediaImageContainer::storeContainers(QList<MediaImageContainer *> lst)
+void DbMediaImageContainer::storeContainers(QList<MediaImageContainer *> lst, FilePathObject *fpo)
 {
     qDebug() << "Storing media image containers to database.";
     foreach(MediaImageContainer *mic, lst)
@@ -109,18 +110,28 @@ void DbMediaImageContainer::storeContainers(QList<MediaImageContainer *> lst)
 
         if (ids.count() > 0)
         {
-            // store media image to db
-            int micId = insertDataObjectToModel(mic);
-
-            if (micId < 0){
+            try {
+                // mediaimagecontainer table: id, fileid, filepathid, updatetime
+
+                // insert the media image container file to file table
+                int micFileId = dbFile->insertDataObjectToModel(mic);
+                if (micFileId < 0) {
+                    throw new EmuFrontException(QString(tr("Inserting media image container %1 to file database failed")).arg(mic->getName()));
+                }
+                int fpId = fpo->getId();
+                // store media image to db
+                int micId = insertDataObjectToModel(mic);
+                if (micId < 0){
+                    // because the previous insert failed, the next is most likely going to fail, throw exception
+                    throw new EmuFrontException(QString(tr("Failed inserting media image container '%1' to database!")).arg(mic->getName()));
+                }
+
+                // link all the media image ids in list to media image container id
+                linkMediaImagesWithContainer(micId, ids);
+            } catch (EmuFrontException e) {
                 // need to remove the media images without media image container in list 'ids'
                 dbMediaImage->removeOrphanedMediaImages(ids);
-                // because the previous insert failed, the next is most likely going to fail, throw exception
-                qDebug() << QString(tr("Failed inserting media image container '%1' to database!")).arg(mic->getName());
             }
-
-            // link all the media image ids in list to media image container id
-            linkMediaImagesWithContainer(micId, ids);
         }
     }
 }