Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 126e71e3

Von Christian Ehringfeld vor mehr als 8 Jahren hinzugefügt

  • ID 126e71e3c84f075ec973c3fcef7f8e49bc64d4b5
  • Vorgänger f89ad1ad
  • Nachfolger f5b682e0

backup rotate

Unterschiede anzeigen:

samples/example/main.cpp
// 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");
src/sqlitebackupprocessor.cpp
*/
#include "sqlitebackupprocessor.h"
#include <sqlite3.h>
#include <QFileInfoList>
using namespace CuteEntityManager;
SqliteBackupProcessor::SqliteBackupProcessor(QSharedPointer<Database> database,
QString destination) : QObject() {
......
void SqliteBackupProcessor::setDatabase(const QSharedPointer<Database> &value) {
database = value;
}
QString SqliteBackupProcessor::getDestination() const {
return destination;
}
......
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;
}
......
timer = value;
}
bool SqliteBackupProcessor::getIncrementalBackups() const {
return incrementalBackups;
}
src/sqlitebackupprocessor.h
#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);
......
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;

Auch abrufbar als: Unified diff