// SPDX-License-Identifier: GPL-2.0 #include "desktop-widgets/diveshareexportdialog.h" #include "ui_diveshareexportdialog.h" #include "desktop-widgets/mainwindow.h" #include "core/save-html.h" #include "desktop-widgets/subsurfacewebservices.h" #include "core/helpers.h" #include "core/cloudstorage.h" #include #include DiveShareExportDialog::DiveShareExportDialog(QWidget *parent) : QDialog(parent), ui(new Ui::DiveShareExportDialog), exportSelected(false), reply(NULL) { ui->setupUi(this); } DiveShareExportDialog::~DiveShareExportDialog() { delete ui; } void DiveShareExportDialog::UIDFromBrowser() { QDesktopServices::openUrl(QUrl(DIVESHARE_BASE_URI "/secret")); } DiveShareExportDialog *DiveShareExportDialog::instance() { static DiveShareExportDialog *self = new DiveShareExportDialog(MainWindow::instance()); self->setAttribute(Qt::WA_QuitOnClose, false); self->ui->txtResult->setHtml(""); self->ui->buttonBox->setStandardButtons(QDialogButtonBox::Cancel); return self; } void DiveShareExportDialog::prepareDivesForUpload(bool selected) { exportSelected = selected; ui->frameConfigure->setVisible(true); ui->frameResults->setVisible(false); QSettings settings; if (settings.contains("diveshareExport/uid")) ui->txtUID->setText(settings.value("diveshareExport/uid").toString()); if (settings.contains("diveshareExport/private")) ui->chkPrivate->setChecked(settings.value("diveshareExport/private").toBool()); show(); } static QByteArray generate_html_list(const QByteArray &data) { QList dives = data.split('\n'); QByteArray html; html.append(""); for (int i = 0; i < dives.length(); i++ ) { html.append(""); QList dive_details = dives[i].split(','); if (dive_details.length() < 3) continue; QByteArray dive_id = dive_details[0]; QByteArray dive_delete = dive_details[1]; html.append(""); html.append("" ); html.append(""); } html.append("
"); html.append(""); //Title gets separated too, this puts it back together const char *sep = ""; for (int t = 2; t < dive_details.length(); t++) { html.append(sep); html.append(dive_details[t]); sep = ","; } html.append(""); html.append(""); html.append("Delete dive"); html.append("
"); return html; } void DiveShareExportDialog::finishedSlot() { ui->progressBar->setVisible(false); if (reply->error() != 0) { ui->buttonBox->setStandardButtons(QDialogButtonBox::Cancel); ui->txtResult->setText(reply->errorString()); } else { ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok); ui->txtResult->setHtml(generate_html_list(reply->readAll())); } reply->deleteLater(); } void DiveShareExportDialog::doUpload() { //Store current settings QSettings settings; settings.setValue("diveshareExport/uid", ui->txtUID->text()); settings.setValue("diveshareExport/private", ui->chkPrivate->isChecked()); //Change UI into results mode ui->frameConfigure->setVisible(false); ui->frameResults->setVisible(true); ui->progressBar->setVisible(true); ui->progressBar->setRange(0, 0); //generate json struct membuffer buf = {}; export_list(&buf, NULL, exportSelected, false); QByteArray json_data(buf.buffer, buf.len); free_buffer(&buf); //Request to server QNetworkRequest request; if (ui->chkPrivate->isChecked()) request.setUrl(QUrl(DIVESHARE_BASE_URI "/upload?private=true")); else request.setUrl(QUrl(DIVESHARE_BASE_URI "/upload")); request.setRawHeader("User-Agent", getUserAgent().toUtf8()); if (ui->txtUID->text().length() != 0) request.setRawHeader("X-UID", ui->txtUID->text().toUtf8()); reply = manager()->put(request, json_data); QObject::connect(reply, SIGNAL(finished()), this, SLOT(finishedSlot())); }