]> Some of my projects - localmylist.git/commitdiff
Add clearPendingRequestDataErrors
authorAPTX <redacted>
Sun, 26 May 2013 00:20:00 +0000 (02:20 +0200)
committerAPTX <redacted>
Sun, 26 May 2013 00:20:00 +0000 (02:20 +0200)
localmylist-management/mainwindow.cpp
localmylist/database.cpp
localmylist/database.h

index 4aaaaed..294e0a5 100644 (file)
@@ -269,6 +269,7 @@ void MainWindow::on_actionClearAnimeTitleData_triggered()
 void MainWindow::on_actionClearFailedRequests_triggered()
 {
        LocalMyList::instance()->database()->clearPendingRequestConnectionErrors();
+       LocalMyList::instance()->database()->clearPendingRequestDataErrors();
        LocalMyList::instance()->database()->clearFailedPendingMyListUpdateRequests();
 }
 
index 6e9f434..f353c02 100644 (file)
@@ -1390,6 +1390,38 @@ bool Database::clearPendingRequestConnectionErrors(int minutes)
        return exec(q);
 }
 
+bool Database::clearPendingRequestDataErrors()
+{
+       // TODO make this configurable?
+       const int steps[] = {1, 2, 4, 8, 24, 48, 48, 48, 48};
+
+       QSqlQuery &q = prepare(
+       "UPDATE pending_request "
+       "       SET start = NULL, failed = NULL, "
+       "               connection_error_count = 0, "
+       "               data_error_count = data_error_count + 1 "
+       "       WHERE failed IS NOT NULL "
+       "               AND data_error_count = :dataErrorCount "
+       "               AND age(current_timestamp, failed) > :interval");
+
+       RaiiTransaction t(this);
+
+       int i = 1;
+       for (const auto &step : steps)
+       {
+               q.bindValue(":dataErrorCount", i);
+               q.bindValue(":interval", QString::number(step) + " hours");
+
+               if (!exec(q))
+                       return false;
+
+               ++i;
+       }
+       t.commit();
+
+       return true;
+}
+
 bool Database::clearFailedPendingMyListUpdateRequests(int minutes)
 {
        QSqlQuery &q = prepare(
index 4d3585f..5a7d251 100644 (file)
@@ -117,7 +117,10 @@ public slots:
        bool clearFileRenames();
        bool clearFailedFileRenames();
 
+       // TODO these are named wrong
        bool clearPendingRequestConnectionErrors(int minutes = 10);
+       bool clearPendingRequestDataErrors();
+
        bool clearFailedPendingMyListUpdateRequests(int minutes = 10);
 
        bool truncateTitleData();