summaryrefslogtreecommitdiffstats
path: root/qt-ui/diveshareexportdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui/diveshareexportdialog.cpp')
-rw-r--r--qt-ui/diveshareexportdialog.cpp142
1 files changed, 142 insertions, 0 deletions
diff --git a/qt-ui/diveshareexportdialog.cpp b/qt-ui/diveshareexportdialog.cpp
new file mode 100644
index 000000000..8f817ae63
--- /dev/null
+++ b/qt-ui/diveshareexportdialog.cpp
@@ -0,0 +1,142 @@
+#include "diveshareexportdialog.h"
+#include "ui_diveshareexportdialog.h"
+#include "mainwindow.h"
+#include "save-html.h"
+#include "qt-ui/usersurvey.h"
+#include "qt-ui/subsurfacewebservices.h"
+
+#include <QDesktopServices>
+#include <QUrl>
+#include <QSettings>
+
+DiveShareExportDialog::DiveShareExportDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::DiveShareExportDialog),
+ reply(NULL)
+{
+ ui->setupUi(this);
+}
+
+DiveShareExportDialog::~DiveShareExportDialog()
+{
+ delete ui;
+ delete reply;
+}
+
+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<QByteArray> dives = data.split('\n');
+ QByteArray html;
+ html.append("<html><body><table>");
+ for (int i = 0; i < dives.length(); i++ ) {
+ html.append("<tr>");
+ QList<QByteArray> 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("<td>");
+ html.append("<a href=\"" DIVESHARE_BASE_URI "/dive/" + dive_id + "\">");
+
+ //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("</a>");
+ html.append("</td>");
+ html.append("<td>");
+ html.append("<a href=\"" DIVESHARE_BASE_URI "/delete/dive/" + dive_delete + "\">Delete dive</a>");
+ html.append("</td>" );
+
+ html.append("</tr>");
+ }
+
+ html.append("</table></body></html>");
+ 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 = { 0 };
+ 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", UserSurvey::getUserAgent().toUtf8());
+ if (ui->txtUID->text().length() != 0)
+ request.setRawHeader("X-UID", ui->txtUID->text().toUtf8());
+
+ reply = WebServices::manager()->put(request, json_data);
+
+ QObject::connect(reply, SIGNAL(finished()), this, SLOT(finishedSlot()));
+}