diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/CMakeLists.txt | 2 | ||||
-rw-r--r-- | core/dive.h | 2 | ||||
-rw-r--r-- | core/divelist.c | 3 | ||||
-rw-r--r-- | core/downloadfromdcthread.cpp | 36 | ||||
-rw-r--r-- | core/downloadfromdcthread.h | 21 | ||||
-rw-r--r-- | core/uemis-downloader.c | 2 |
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) { |