Mercurial > hg > syntilista
diff src/main.cpp @ 150:2a8c97753381
Make the backup stuff compile-time optional.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 28 Aug 2017 11:24:42 +0300 |
parents | 665421937ec8 |
children | 753ae3569cb7 |
line wrap: on
line diff
--- a/src/main.cpp Mon Aug 28 11:11:16 2017 +0300 +++ b/src/main.cpp Mon Aug 28 11:24:42 2017 +0300 @@ -28,6 +28,9 @@ double uiScale; // Global UI scale factor QString dataPath; // Application data path/directory + + // Backup related settings + int dbBackupMode; QString dbBackupURL; QString dbBackupSecret; } settings; @@ -246,14 +249,16 @@ settings.uiPos = tmpst.value("pos", QPoint(100, 100)).toPoint(); settings.uiSize = tmpst.value("size", QSize(1000, 600)).toSize(); settings.uiScale = tmpst.value("scale", 1.0f).toDouble(); + settings.dbBackupMode = BACKUP_NONE; settings.dbBackupURL = tmpst.value("dbBackupURL", QString()).toString(); settings.dbBackupSecret = tmpst.value("dbBackupSecret", QString()).toString(); // Check commandline arguments for configuring backup settings - if (argc >= 4 && strcmp(argv[1], "config") == 0) + if (argc >= 5 && strcmp(argv[1], "config") == 0) { - settings.dbBackupURL = QString(argv[2]); - settings.dbBackupSecret = QString(argv[3]); + settings.dbBackupMode = QString(argv[2]).toInt(); + settings.dbBackupURL = QString(argv[3]); + settings.dbBackupSecret = QString(argv[4]); } // Also possibility of resetting the UI settings @@ -447,7 +452,8 @@ QSqlDatabase::database().close(); // Back up the database - backupDatabase(); + if (settings.dbBackupMode != BACKUP_NONE) + backupDatabase(); } @@ -455,7 +461,6 @@ { QString dbFilename = settings.dataPath + QDir::separator() + APP_SQLITE_FILE; QString backupFilename = APP_SQLITE_FILE; - backupReply = NULL; backupDialog = NULL; if (settings.dbBackupURL == QString() || settings.dbBackupURL == "") @@ -470,73 +475,92 @@ return; } - // Check for network access - QNetworkAccessManager *manager = new QNetworkAccessManager(); - if (manager->networkAccessible() != QNetworkAccessManager::Accessible) - { - slLog("ERROR", QStringLiteral("Network not available, cannot backup the database.")); - return; - } - - // Attempt to open the database file - QFile *file = new QFile(dbFilename); - if (!file->open(QIODevice::ReadOnly)) + if (settings.dbBackupMode == BACKUP_HTTP) { - slLog("ERROR", QStringLiteral("Failed to open database file '%1' for backup.").arg(dbFilename)); - return; - } +#ifdef USE_QTHTTP + // Check for network access + httpBackupReply = NULL; - // Okay, we seem to be "go" .. - slLog("INFO", - QStringLiteral("Attempting database backup from '%1' to '%2'."). - arg(dbFilename).arg(settings.dbBackupURL)); + QNetworkAccessManager *manager = new QNetworkAccessManager(); + if (manager->networkAccessible() != QNetworkAccessManager::Accessible) + { + slLog("ERROR", QStringLiteral("Network not available, cannot backup the database.")); + return; + } + + // Attempt to open the database file + QFile *file = new QFile(dbFilename); + if (!file->open(QIODevice::ReadOnly)) + { + slLog("ERROR", QStringLiteral("Failed to open database file '%1' for backup.").arg(dbFilename)); + return; + } - // Create the HTTP POST request - QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); + // Okay, we seem to be "go" .. + slLog("INFO", + QStringLiteral("Attempting database backup from '%1' to '%2'."). + arg(dbFilename).arg(settings.dbBackupURL)); + + // Create the HTTP POST request + QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); - // The "secret" key as POST parameter - QHttpPart postPart; - postPart.setHeader(QNetworkRequest::ContentDispositionHeader, - QVariant("form-data; name=\"secret\";")); - postPart.setBody(QByteArray(settings.dbBackupSecret.toUtf8())); + // The "secret" key as POST parameter + QHttpPart postPart; + postPart.setHeader(QNetworkRequest::ContentDispositionHeader, + QVariant("form-data; name=\"secret\";")); + postPart.setBody(QByteArray(settings.dbBackupSecret.toUtf8())); + + // Actual data as binary octet-stream + QHttpPart dataPart; + dataPart.setHeader(QNetworkRequest::ContentTypeHeader, + QVariant("binary/octet-stream")); + + dataPart.setHeader(QNetworkRequest::ContentDispositionHeader, + QVariant("form-data; name=\"file\"; filename=\""+ backupFilename +"\"")); - // Actual data as binary octet-stream - QHttpPart dataPart; - dataPart.setHeader(QNetworkRequest::ContentTypeHeader, - QVariant("binary/octet-stream")); + dataPart.setBodyDevice(file); + file->setParent(multiPart); // we cannot delete the QFile object now, so delete it with the multiPart + + multiPart->append(postPart); + multiPart->append(dataPart); - dataPart.setHeader(QNetworkRequest::ContentDispositionHeader, - QVariant("form-data; name=\"file\"; filename=\""+ backupFilename +"\"")); + // Attempt to POST the whole thing + QUrl url(settings.dbBackupURL); + QNetworkRequest request(url); + httpBackupReply = manager->post(request, multiPart); + multiPart->setParent(httpBackupReply); - dataPart.setBodyDevice(file); - file->setParent(multiPart); // we cannot delete the QFile object now, so delete it with the multiPart - - multiPart->append(postPart); - multiPart->append(dataPart); + connect( + httpBackupReply, + SIGNAL(finished()), + this, + SLOT(httpBackupFinished())); - // Attempt to POST the whole thing - QUrl url(settings.dbBackupURL); - QNetworkRequest request(url); - backupReply = manager->post(request, multiPart); - multiPart->setParent(backupReply); - - connect( - backupReply, - SIGNAL(finished()), - this, - SLOT(backupFinished())); + connect( + httpBackupReply, + SIGNAL(uploadProgress(qint64, qint64)), + this, + SLOT(httpBackupProgress(qint64, qint64))); - connect( - backupReply, - SIGNAL(uploadProgress(qint64, qint64)), - this, - SLOT(backupProgress(qint64, qint64))); - - connect( - backupReply, - SIGNAL(error(QNetworkReply::NetworkError)), - this, - SLOT(backupError(QNetworkReply::NetworkError))); + connect( + httpBackupReply, + SIGNAL(error(QNetworkReply::NetworkError)), + this, + SLOT(httpBackupError(QNetworkReply::NetworkError))); +#else + slLog("ERROR", QStringLiteral("Backup method is HTTP/HTTPS, but support is not compiled in!")); + return; +#endif + } + else + if (settings.dbBackupMode == BACKUP_CURL_SFTP) + { +#ifdef USE_LIBCURL +#else + slLog("ERROR", QStringLiteral("Backup method is SFTP via libcurl, but support is not compiled in!")); + return; +#endif + } // Create progress dialog backupDialog = new QProgressDialog( @@ -553,7 +577,8 @@ } -void SyntilistaMainWindow::backupProgress(qint64 bytesSent, qint64 bytesTotal) +#ifdef USE_QTHTTP +void SyntilistaMainWindow::httpBackupProgress(qint64 bytesSent, qint64 bytesTotal) { if (bytesTotal > 0) { @@ -567,7 +592,7 @@ } -void SyntilistaMainWindow::backupError(QNetworkReply::NetworkError code) +void SyntilistaMainWindow::httpBackupError(QNetworkReply::NetworkError code) { slLog("ERROR", QStringLiteral("Backup failed with network error %1."). @@ -576,11 +601,11 @@ } -void SyntilistaMainWindow::backupFinished() +void SyntilistaMainWindow::httpBackupFinished() { - if (backupReply) + if (httpBackupReply) { - QVariant status = backupReply->attribute(QNetworkRequest::HttpStatusCodeAttribute); + QVariant status = httpBackupReply->attribute(QNetworkRequest::HttpStatusCodeAttribute); if (status.isValid()) { int code = status.toInt(); @@ -597,7 +622,7 @@ default: slLog("ERROR", QStringLiteral("Backup server responded with error:\n")+ - QString::fromUtf8(backupReply->readAll())); + QString::fromUtf8(httpBackupReply->readAll())); break; } } @@ -609,6 +634,7 @@ backupDialog->close(); } +#endif //