diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/downloadfromdcthread.cpp | 51 | ||||
-rw-r--r-- | core/downloadfromdcthread.h | 31 |
2 files changed, 82 insertions, 0 deletions
diff --git a/core/downloadfromdcthread.cpp b/core/downloadfromdcthread.cpp index dc13a23d7..f3dcb7224 100644 --- a/core/downloadfromdcthread.cpp +++ b/core/downloadfromdcthread.cpp @@ -1,6 +1,10 @@ #include "downloadfromdcthread.h" #include "core/libdivecomputer.h" +QStringList vendorList; +QHash<QString, QStringList> productList; +QMap<QString, dc_descriptor_t *> descriptorLookup; + static QString str_error(const char *fmt, ...) { va_list args; @@ -34,3 +38,50 @@ void DownloadThread::run() if (errorText) error = str_error(errorText, data->devname, data->vendor, data->product); } + +void fill_computer_list() +{ + dc_iterator_t *iterator = NULL; + dc_descriptor_t *descriptor = NULL; + struct mydescriptor *mydescriptor; + + QStringList computer; + dc_descriptor_iterator(&iterator); + while (dc_iterator_next(iterator, &descriptor) == DC_STATUS_SUCCESS) { + const char *vendor = dc_descriptor_get_vendor(descriptor); + const char *product = dc_descriptor_get_product(descriptor); + + if (!vendorList.contains(vendor)) + vendorList.append(vendor); + + if (!productList[vendor].contains(product)) + productList[vendor].push_back(product); + + descriptorLookup[QString(vendor) + QString(product)] = descriptor; + } + dc_iterator_free(iterator); + Q_FOREACH (QString vendor, vendorList) + qSort(productList[vendor]); + + /* and add the Uemis Zurich which we are handling internally + THIS IS A HACK as we magically have a data structure here that + happens to match a data structure that is internal to libdivecomputer; + this WILL BREAK if libdivecomputer changes the dc_descriptor struct... + eventually the UEMIS code needs to move into libdivecomputer, I guess */ + + mydescriptor = (struct mydescriptor *)malloc(sizeof(struct mydescriptor)); + mydescriptor->vendor = "Uemis"; + mydescriptor->product = "Zurich"; + mydescriptor->type = DC_FAMILY_NULL; + mydescriptor->model = 0; + + if (!vendorList.contains("Uemis")) + vendorList.append("Uemis"); + + if (!productList["Uemis"].contains("Zurich")) + productList["Uemis"].push_back("Zurich"); + + descriptorLookup["UemisZurich"] = (dc_descriptor_t *)mydescriptor; + + qSort(vendorList); +} diff --git a/core/downloadfromdcthread.h b/core/downloadfromdcthread.h index ab21db0aa..23522b4d4 100644 --- a/core/downloadfromdcthread.h +++ b/core/downloadfromdcthread.h @@ -2,6 +2,9 @@ #define DOWNLOADFROMDCTHREAD_H #include <QThread> +#include <QMap> +#include <QHash> + #include "dive.h" #include "libdivecomputer.h" @@ -18,4 +21,32 @@ private: device_data_t *data; }; +struct product { + const char *product; + dc_descriptor_t *descriptor; + struct product *next; +}; + +struct vendor { + const char *vendor; + struct product *productlist; + struct vendor *next; +}; + +struct mydescriptor { + const char *vendor; + const char *product; + dc_family_t type; + unsigned int model; +}; + +/* This fills the vendor list QStringList and related members. +* this code needs to be reworked to be less ugly, but it will +* stay like this for now. +*/ +void fill_computer_list(); +extern QStringList vendorList; +extern QHash<QString, QStringList> productList; +extern QMap<QString, dc_descriptor_t *> descriptorLookup; + #endif |