summaryrefslogtreecommitdiffstats
path: root/archivemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r--archivemodel.cpp48
1 files changed, 43 insertions, 5 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp
index 21ee015..9ef2eac 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -94,11 +94,42 @@ bool ArchiveModel::setData(const QModelIndex &idx, const QVariant &value, int ro
return true;
}
}else{
- QSqlError e = updateQuery.lastError();
- QString databaseText = e.databaseText().isEmpty() ? tr("(none)") : e.databaseText();
- QString driverText = e.driverText().isEmpty() ? tr("(none)") : e.driverText();
- QString errormsg = QString(tr("<b>Database error:</b><br/><ul><li>driverText(): %1</li><li>databaseText(): %2</li></ul>")).arg(driverText).arg(databaseText);
- emit databaseError(errormsg);
+ emitDatabaseError(updateQuery.lastError());
+ }
+ return false;
+}
+
+bool ArchiveModel::removeNode(const QModelIndex &idx){
+ if(!idx.isValid()){
+ return false;
+ }
+ SmTreeItem *item = itemAt(idx);
+ if(item->childCount()){
+ return false;
+ }
+ int nodeType = item->data(Type).toInt();
+ QSqlQuery removeQuery(mDb);
+ if(nodeType == GenreNode){
+ removeQuery.prepare("DELETE FROM genres WHERE igenres_id = :id");
+ }else if(nodeType == ActorNode){
+ removeQuery.prepare("DELETE FROM actors WHERE iactors_id = :id");
+ }else if(nodeType == SeriesNode){
+ removeQuery.prepare("DELETE FROM series WHERE iseries_id = :id");
+ }else{
+ return false;
+ }
+ QVariant id = item->data(GenericId);
+ removeQuery.bindValue(":id", id);
+ if(removeQuery.exec()){
+ if(nodeType == GenreNode || nodeType == ActorNode){
+ removeRows(idx.row(), 1, idx.parent());
+ return true;
+ }else if(nodeType == SeriesNode){
+ emit needRefresh();
+ return true;
+ }
+ }else{
+ emitDatabaseError(removeQuery.lastError());
}
return false;
}
@@ -151,6 +182,13 @@ void ArchiveModel::collectorFinished(){
setRoot(item);
}
+void ArchiveModel::emitDatabaseError(const QSqlError &e){
+ QString databaseText = e.databaseText().isEmpty() ? tr("(none)") : e.databaseText();
+ QString driverText = e.driverText().isEmpty() ? tr("(none)") : e.driverText();
+ QString errormsg = QString(tr("<b>Database error:</b><br/><ul><li>driverText(): %1</li><li>databaseText(): %2</li></ul>")).arg(driverText).arg(databaseText);
+ emit databaseError(errormsg);
+}
+
ArchiveCollector::ArchiveCollector(int numFields, QObject *parent) : QThread(parent), mNumFields(numFields) {
mDb = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), "archivedb");
mDb.open();