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 productList; +QMap 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 +#include +#include + #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 productList; +extern QMap descriptorLookup; + #endif diff --git a/desktop-widgets/downloadfromdivecomputer.cpp b/desktop-widgets/downloadfromdivecomputer.cpp index c38ffe980..f27a3cb73 100644 --- a/desktop-widgets/downloadfromdivecomputer.cpp +++ b/desktop-widgets/downloadfromdivecomputer.cpp @@ -14,25 +14,6 @@ #include #include -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; -}; - namespace DownloadFromDcGlobal { const char *err_string; }; @@ -51,8 +32,6 @@ DownloadFromDCWidget::DownloadFromDCWidget(QWidget *parent, Qt::WindowFlags f) : ostcFirmwareCheck(0), currentState(INITIAL) { - fill_computer_list(); - diveImportedModel = new DiveImportedModel(this); diveImportedModel->setDiveTable(&downloadTable); vendorModel = new QStringListModel(vendorList); @@ -253,53 +232,6 @@ void DownloadFromDCWidget::on_product_currentIndexChanged(const QString &product } } -void DownloadFromDCWidget::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); -} - void DownloadFromDCWidget::on_search_clicked() { if (ui.vendor->currentText() == "Uemis") { diff --git a/desktop-widgets/downloadfromdivecomputer.h b/desktop-widgets/downloadfromdivecomputer.h index 906cc6eb7..f137bcd5e 100644 --- a/desktop-widgets/downloadfromdivecomputer.h +++ b/desktop-widgets/downloadfromdivecomputer.h @@ -63,15 +63,11 @@ private: DownloadThread *thread; bool downloading; - QStringList vendorList; - QHash productList; - QMap descriptorLookup; device_data_t data; int previousLast; QStringListModel *vendorModel; QStringListModel *productModel; - void fill_computer_list(); void fill_device_list(int dc_type); QString logFile; QString dumpFile; diff --git a/subsurface-desktop-main.cpp b/subsurface-desktop-main.cpp index bc2a4fc9d..42cb54834 100644 --- a/subsurface-desktop-main.cpp +++ b/subsurface-desktop-main.cpp @@ -16,6 +16,7 @@ #include "desktop-widgets/diveplanner.h" #include "core/color.h" #include "core/qthelper.h" +#include "core/downloadfromdcthread.h" // for fill_computer_list #include #include @@ -81,10 +82,10 @@ int main(int argc, char **argv) * the constant numbers we used to get before. */ qsrand(time(NULL)); - setup_system_prefs(); copy_prefs(&default_prefs, &prefs); fill_profile_color(); + fill_computer_list(); parse_xml_init(); taglist_init_global(); init_ui(); diff --git a/subsurface-mobile-main.cpp b/subsurface-mobile-main.cpp index c7f627fee..96a0d4f54 100644 --- a/subsurface-mobile-main.cpp +++ b/subsurface-mobile-main.cpp @@ -12,6 +12,7 @@ #include "core/color.h" #include "core/qthelper.h" #include "core/helpers.h" +#include "core/downloadfromdcthread.h" #include #include @@ -44,6 +45,8 @@ int main(int argc, char **argv) default_prefs.units = IMPERIAL_units; prefs = default_prefs; fill_profile_color(); + fill_computer_list(); + parse_xml_init(); taglist_init_global(); init_ui();