commit 126e71e3c84f075ec973c3fcef7f8e49bc64d4b5
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Sat Aug 8 00:13:12 2015 +0200

    backup rotate

diff --git a/samples/example/main.cpp b/samples/example/main.cpp
index f1d7409..031b77d 100644
--- a/samples/example/main.cpp
+++ b/samples/example/main.cpp
@@ -25,7 +25,7 @@ int main(int argc, char *argv[]) {
 //    CuteEntityManager::EntityManager("QSQLITE",
 //                                     QDir::currentPath() + "/db.sqlite", "", "", "", 0, true);
     CuteEntityManager::EntityManager("QSQLITE",
-                                     ":memory:","","","","",true);
+                                     ":memory:", "", "", "", "", true);
     SqliteBackupProcessor *sqliteproc = new SqliteBackupProcessor(e->getDb(),
             QDir::currentPath());
     qWarning() << "DB Loaded:" << sqliteproc->sqliteDBMemFile(false, "db.sqlite");
diff --git a/src/sqlitebackupprocessor.cpp b/src/sqlitebackupprocessor.cpp
index e0f7f33..d6047fb 100644
--- a/src/sqlitebackupprocessor.cpp
+++ b/src/sqlitebackupprocessor.cpp
@@ -15,7 +15,7 @@
  */
 #include "sqlitebackupprocessor.h"
 #include <sqlite3.h>
-
+#include <QFileInfoList>
 using namespace CuteEntityManager;
 SqliteBackupProcessor::SqliteBackupProcessor(QSharedPointer<Database> database,
         QString destination) : QObject() {
@@ -46,6 +46,7 @@ QSharedPointer<Database> SqliteBackupProcessor::getDatabase() const {
 void SqliteBackupProcessor::setDatabase(const QSharedPointer<Database> &value) {
     database = value;
 }
+
 QString SqliteBackupProcessor::getDestination() const {
     return destination;
 }
@@ -134,13 +135,47 @@ bool SqliteBackupProcessor::sqliteDBMemFile(bool save, QString fileName) {
 
 void SqliteBackupProcessor::backup() {
     QString fileName = this->destination + "/" + this->getBackupFilename();
-    if (incrementalBackups) {
-        fileName += QString::number(counter);
-        ++counter;
+    if (this->incrementalBackups) {
+        this->rotateBackup();
+        if (this->counter > 0) {
+            fileName += "." + QString::number(this->counter);
+        }
+        if (this->counter < this->backupCount) {
+            ++this->counter;
+        }
     }
     this->sqliteDBMemFile(true, fileName);
 }
 
+void SqliteBackupProcessor::rotateBackup() {
+    if (this->counter == this->backupCount) {
+        QStringList nameFilter = QStringList(this->getBackupFilename());
+        QDir directory = QDir(this->destination);
+        QFileInfoList files = directory.entryInfoList(nameFilter);
+        for (int var = 0; var < files.size(); ++var) {
+            QFileInfo file = files.at(var);
+            if (file.isFile()) {
+                int lastIndex = file.filePath().lastIndexOf(".");
+                if (lastIndex > -1) {
+                    QString sub = file.filePath().mid(lastIndex);
+                    bool ok = false;
+                    int num = sub.toInt(&ok);
+                    QDir dir = QDir();
+                    if (ok) {
+                        if (num == 1) {
+                            dir.rename(file.filePath(), file.path().mid(0, lastIndex));
+                        } else {
+                            dir.rename(file.filePath(), file.path().mid(0, lastIndex) + QString(num - 1));
+                        }
+                    } else {
+                        dir.remove(file.filePath());
+                    }
+                }
+            }
+        }
+    }
+}
+
 QSharedPointer<QTimer> SqliteBackupProcessor::getTimer() const {
     return timer;
 }
@@ -149,7 +184,6 @@ void SqliteBackupProcessor::setTimer(const QSharedPointer<QTimer> &value) {
     timer = value;
 }
 
-
 bool SqliteBackupProcessor::getIncrementalBackups() const {
     return incrementalBackups;
 }
diff --git a/src/sqlitebackupprocessor.h b/src/sqlitebackupprocessor.h
index f24e366..f84bd41 100644
--- a/src/sqlitebackupprocessor.h
+++ b/src/sqlitebackupprocessor.h
@@ -21,12 +21,23 @@
 #include <QString>
 #include <QVariant>
 #include <QTimer>
+#include <QDir>
 #include "database.h"
 namespace CuteEntityManager {
 class SqliteBackupProcessor : public QObject {
   public:
     explicit SqliteBackupProcessor(QSharedPointer<Database> database,
                                    QString destination);
+    /**
+     * @brief SqliteBackupProcessor
+     * @param database
+     * @param destination
+     * @param backupFilename
+     * @param timer
+     * @param incrementalBackups
+     * @param backupCount
+     * You must start the timer.
+     */
     explicit SqliteBackupProcessor(QSharedPointer<Database> database,
                                    QString destination, QString backupFilename, QSharedPointer<QTimer> timer,
                                    bool incrementalBackups = false, int backupCount = 1);
@@ -49,9 +60,12 @@ class SqliteBackupProcessor : public QObject {
     QSharedPointer<QTimer> getTimer() const;
     void setTimer(const QSharedPointer<QTimer> &value);
 
-public slots:
+  public slots:
     bool sqliteDBMemFile(bool save, QString fileName = "db.sqlite.bak");
     void backup();
+  protected slots:
+    void rotateBackup();
+
   private:
     QSharedPointer<Database> database;
     QString destination;
