From 227c40feac64a172ce967ff8f020c17bdf462102 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 4 Jan 2020 13:01:20 +0100 Subject: Make it possible to add files to existing series parts It's not as easy as it sounds, since a transaction is kaputt after a failed query. To overcome that that, introduce 2 savepoints. One before adding the seriespart, and one before the metadata. Works like a charm! --- newmoviewizard.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'newmoviewizard.cpp') diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp index 8cd9936..c4370f6 100644 --- a/newmoviewizard.cpp +++ b/newmoviewizard.cpp @@ -83,6 +83,7 @@ void NewMovieWizard::accept(){ return; } } + QSqlQuery savePoint("SAVEPOINT before_parts", db); QSqlQuery insertPartQ(db); insertPartQ.prepare("INSERT INTO seriesparts (iseries_id, iseriespart, tsubtitle) VALUES(:sid, :pid, :tsub)"); insertPartQ.bindValue(":sid", seriesId); @@ -90,9 +91,13 @@ void NewMovieWizard::accept(){ insertPartQ.bindValue(":tsub", subtitle); int seriesPartId = 0; if(!insertPartQ.exec()){ - QMessageBox::critical(this, tr("Error"), tr("Hmm, seems we already have that part of the series... Bailing out!")); - db.rollback(); - return; + int res = QMessageBox::question(this, tr("Question"), tr("We already have that part of the series. Continue anyway?")); + if(res == QMessageBox::No){ + db.rollback(); + return; + }else{ + QSqlQuery rollbackSave("ROLLBACK TO SAVEPOINT before_parts", db); + } } QSqlQuery partNoQ(db); partNoQ.prepare("SELECT iseriesparts_id FROM seriesparts WHERE iseries_id = :sid AND iseriespart = :pid AND tsubtitle = :tsub"); @@ -259,6 +264,7 @@ void NewMovieWizard::accept(){ } //genres done! //now handle metadata + QSqlQuery savePoint2("SAVEPOINT before_metadata", db); QSqlQuery insertMetadataQ(db); insertMetadataQ.prepare("INSERT INTO metadata (iseriespart_id, sireleaseyear, tsourcemedium, tsubject, treleasegroup, tencoderopts, tcomment, sipasses) VALUES(:pid, :rely, :source, :sub, :group, :encopts, :comment, :passes)"); MovieMetadataPage *metadataPage = qobject_cast(page(3)); @@ -272,9 +278,13 @@ void NewMovieWizard::accept(){ insertMetadataQ.bindValue(":comment", metadata.at(ArchiveModel::Comment)); insertMetadataQ.bindValue(":passes", metadata.at(ArchiveModel::Passes)); if(!insertMetadataQ.exec()){ - QMessageBox::critical(this, tr("Error"), tr("Failed to insert metadata.")); - db.rollback(); - return; + int res = QMessageBox::question(this, tr("Question"), tr("Failed to insert metadata. Continue anyway?")); + if(res == QMessageBox::No){ + db.rollback(); + return; + }else{ + QSqlQuery rollbackSave("ROLLBACK TO SAVEPOINT before_metadata", db); + } } //we're still here, good //now actually move the files -- cgit v1.2.3-70-g09d2