Expanded implementation for saving media image containers to database
[emufront] / src / db / dbmediaimagecontainer.cpp
index 949f233..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)
@@ -32,10 +33,10 @@ bool DbMediaImageContainer::updateDataObjectToModel(const EmuFrontObject *efo)
     return false;
 }
 
-bool DbMediaImageContainer::insertDataObjectToModel(const EmuFrontObject *efo)
+int DbMediaImageContainer::insertDataObjectToModel(const EmuFrontObject *efo)
 {
     // TODO
-    return false;
+    return -1;
 }
 
 bool DbMediaImageContainer::deleteDataObjectFromModel(QModelIndex *i)
@@ -56,6 +57,12 @@ QString DbMediaImageContainer::constructSelect(QString whereClause) const
     return "";
 }
 
+QString DbMediaImageContainer::constructFilterById(int id) const
+{
+    // TODO
+    return "";
+}
+
 QString DbMediaImageContainer::constructSelectById(int id) const
 {
     // TODO
@@ -85,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)
@@ -103,11 +110,33 @@ void DbMediaImageContainer::storeContainers(QList<MediaImageContainer *> lst)
 
         if (ids.count() > 0)
         {
-            // store media image to db
-
-            // get last insert id of stored media image
-
-            // link all the media image ids in list to media image container id
+            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);
+            }
         }
     }
 }
+
+void DbMediaImageContainer::linkMediaImagesWithContainer(int micId, QList<int> miIds)
+{
+    // TODO
+}