aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/CMakeLists.txt2
-rw-r--r--core/dive.h2
-rw-r--r--core/divelist.c3
-rw-r--r--core/downloadfromdcthread.cpp36
-rw-r--r--core/downloadfromdcthread.h21
-rw-r--r--core/uemis-downloader.c2
6 files changed, 66 insertions, 0 deletions
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index fc6d20ba8..b2effd519 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -84,11 +84,13 @@ set(SUBSURFACE_CORE_LIB_SRCS
isocialnetworkintegration.cpp
gpslocation.cpp
cloudstorage.cpp
+ downloadfromdcthread.cpp
#Subsurface Qt have the Subsurface structs QObjectified for easy access via QML.
subsurface-qt/DiveObjectHelper.cpp
subsurface-qt/CylinderObjectHelper.cpp
subsurface-qt/SettingsObjectWrapper.cpp
+
${SERIAL_FTDI}
${PLATFORM_SRC}
${BT_CORE_SRC_FILES}
diff --git a/core/dive.h b/core/dive.h
index c2ae1e36d..c65d3ffc5 100644
--- a/core/dive.h
+++ b/core/dive.h
@@ -971,6 +971,8 @@ extern volume_t string_to_volume(const char *str, pressure_t workp);
extern fraction_t string_to_fraction(const char *str);
extern void average_max_depth(struct diveplan *dive, int *avg_depth, int *max_depth);
+extern struct dive_table downloadTable;
+
#include "pref.h"
#endif // DIVE_H
diff --git a/core/divelist.c b/core/divelist.c
index fd7fc6790..4f253039b 100644
--- a/core/divelist.c
+++ b/core/divelist.c
@@ -55,6 +55,9 @@ dive_trip_t *dive_trip_list;
unsigned int amount_selected;
+// We need to stop using globals, really.
+struct dive_table downloadTable;
+
#if DEBUG_SELECTION_TRACKING
void dump_selection(void)
{
diff --git a/core/downloadfromdcthread.cpp b/core/downloadfromdcthread.cpp
new file mode 100644
index 000000000..dc13a23d7
--- /dev/null
+++ b/core/downloadfromdcthread.cpp
@@ -0,0 +1,36 @@
+#include "downloadfromdcthread.h"
+#include "core/libdivecomputer.h"
+
+static QString str_error(const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ const QString str = QString().vsprintf(fmt, args);
+ va_end(args);
+
+ return str;
+}
+
+DownloadThread::DownloadThread(QObject *parent, device_data_t *data) : QThread(parent),
+ data(data)
+{
+ data->download_table = nullptr;
+}
+
+void DownloadThread::setDiveTable(struct dive_table* table)
+{
+ data->download_table = table;
+}
+
+void DownloadThread::run()
+{
+ Q_ASSERT(data->download_table != nullptr);
+ const char *errorText;
+ import_thread_cancelled = false;
+ if (!strcmp(data->vendor, "Uemis"))
+ errorText = do_uemis_import(data);
+ else
+ errorText = do_libdivecomputer_import(data);
+ if (errorText)
+ error = str_error(errorText, data->devname, data->vendor, data->product);
+}
diff --git a/core/downloadfromdcthread.h b/core/downloadfromdcthread.h
new file mode 100644
index 000000000..ab21db0aa
--- /dev/null
+++ b/core/downloadfromdcthread.h
@@ -0,0 +1,21 @@
+#ifndef DOWNLOADFROMDCTHREAD_H
+#define DOWNLOADFROMDCTHREAD_H
+
+#include <QThread>
+#include "dive.h"
+#include "libdivecomputer.h"
+
+class DownloadThread : public QThread {
+ Q_OBJECT
+public:
+ DownloadThread(QObject *parent, device_data_t *data);
+ void setDiveTable(struct dive_table *table);
+ void run() override;
+
+ QString error;
+
+private:
+ device_data_t *data;
+};
+
+#endif
diff --git a/core/uemis-downloader.c b/core/uemis-downloader.c
index 79c88d28b..e65c1fd46 100644
--- a/core/uemis-downloader.c
+++ b/core/uemis-downloader.c
@@ -76,6 +76,8 @@ static int dive_to_read = 0;
static int max_deleted_seen = -1;
+extern struct dive_table downloadTable;
+
/* helper function to parse the Uemis data structures */
static void uemis_ts(char *buffer, void *_when)
{