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

index 4aaaaed337c350e51f34a9af7c3fa7e03f165986..294e0a5662416ae1fd15b844f2e40aba51262921 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 6e9f4340aee6db8a8b7de2a2a0fc283869f3cc10..f353c021be63d259b1dcbb88b42e46b31e6646a4 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 4d3585f44d1f032dd78f64b221deae4272d5a827..5a7d2519505f8abd0909832e7f3028f0d9b9b47e 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();