Expanded implementation for saving media image containers to database
[emufront] / src / db / dbmediaimagecontainer.cpp
1 // EmuFront
2 // Copyright 2010 Mikko Keinänen
3 //
4 // This file is part of EmuFront.
5 //
6 //
7 // EmuFront is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // EmuFront is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with EmuFront.  If not, see <http://www.gnu.org/licenses/>.
19
20 #include <QDebug>
21 #include "dbmediaimagecontainer.h"
22
23 DbMediaImageContainer::DbMediaImageContainer(QObject *parent)
24     : DbQueryModelManager(parent)
25 {
26     dbMediaImage = new DbMediaImage(parent);
27     dbFile = new DbFile(parent);
28 }
29
30 bool DbMediaImageContainer::updateDataObjectToModel(const EmuFrontObject *efo)
31 {
32     // TODO
33     return false;
34 }
35
36 int DbMediaImageContainer::insertDataObjectToModel(const EmuFrontObject *efo)
37 {
38     // TODO
39     return -1;
40 }
41
42 bool DbMediaImageContainer::deleteDataObjectFromModel(QModelIndex *i)
43 {
44     // TODO
45     return false;
46 }
47
48 int DbMediaImageContainer::countDataObjectRefs(int id) const
49 {
50     // TODO
51     return -1;
52 }
53
54 QString DbMediaImageContainer::constructSelect(QString whereClause) const
55 {
56     // TODO
57     return "";
58 }
59
60 QString DbMediaImageContainer::constructFilterById(int id) const
61 {
62     // TODO
63     return "";
64 }
65
66 QString DbMediaImageContainer::constructSelectById(int id) const
67 {
68     // TODO
69     return "";
70 }
71
72 EmuFrontObject* DbMediaImageContainer::recordToDataObject(const QSqlRecord *)
73 {
74     // TODO
75     return 0;
76 }
77
78 QSqlQueryModel* DbMediaImageContainer::getData()
79 {
80     // TODO
81     return 0;
82 }
83
84 int DbMediaImageContainer::getMediaImageContainer(QString checksum) const
85 {
86     // TODO
87     return -1;
88 }
89
90
91 /**
92 * Stores media image containers, including the media images included
93 * to database.
94 */
95 void DbMediaImageContainer::storeContainers(QList<MediaImageContainer *> lst, FilePathObject *fpo)
96 {
97     qDebug() << "Storing media image containers to database.";
98     foreach(MediaImageContainer *mic, lst)
99     {
100         qDebug() << "Media image container " << mic->getName();
101         QList<MediaImage*> images = mic->getMediaImages();
102
103         /* If media image container is already in the db, continue */
104         if (getMediaImageContainer(mic->getCheckSum()) >= 0)
105             continue;
106
107         // this is a new media image container, lets build a list
108         // of media image id's for this container
109         QList<int> ids = dbMediaImage->storeMediaImages(images);
110
111         if (ids.count() > 0)
112         {
113             try {
114                 // mediaimagecontainer table: id, fileid, filepathid, updatetime
115
116                 // insert the media image container file to file table
117                 int micFileId = dbFile->insertDataObjectToModel(mic);
118                 if (micFileId < 0) {
119                     throw new EmuFrontException(QString(tr("Inserting media image container %1 to file database failed")).arg(mic->getName()));
120                 }
121                 int fpId = fpo->getId();
122                 // store media image to db
123                 int micId = insertDataObjectToModel(mic);
124                 if (micId < 0){
125                     // because the previous insert failed, the next is most likely going to fail, throw exception
126                     throw new EmuFrontException(QString(tr("Failed inserting media image container '%1' to database!")).arg(mic->getName()));
127                 }
128
129                 // link all the media image ids in list to media image container id
130                 linkMediaImagesWithContainer(micId, ids);
131             } catch (EmuFrontException e) {
132                 // need to remove the media images without media image container in list 'ids'
133                 dbMediaImage->removeOrphanedMediaImages(ids);
134             }
135         }
136     }
137 }
138
139 void DbMediaImageContainer::linkMediaImagesWithContainer(int micId, QList<int> miIds)
140 {
141     // TODO
142 }