diff options
-rw-r--r-- | divecomputer.cpp | 38 | ||||
-rw-r--r-- | divecomputer.h | 3 |
2 files changed, 29 insertions, 12 deletions
diff --git a/divecomputer.cpp b/divecomputer.cpp index b45b74a44..af54e13f5 100644 --- a/divecomputer.cpp +++ b/divecomputer.cpp @@ -58,25 +58,41 @@ const DiveComputerNode *DiveComputerList::get(const QString &m) return NULL; } -void DiveComputerList::addDC(const QString &m, uint32_t d, const QString &n, const QString &s, const QString &f) +void DiveComputerNode::showchanges(const QString &n, const QString &s, const QString &f) const +{ + if (nickName != n) + qDebug("new nickname %s for DC model %s deviceId 0x%x", n.toUtf8().data(), model.toUtf8().data(), deviceId); + if (serialNumber != s) + qDebug("new serial number %s for DC model %s deviceId 0x%x", s.toUtf8().data(), model.toUtf8().data(), deviceId); + if (firmware != f) + qDebug("new firmware version %s for DC model %s deviceId 0x%x", f.toUtf8().data(), model.toUtf8().data(), deviceId); +} + +void DiveComputerList::addDC(QString m, uint32_t d, QString n, QString s, QString f) { if (m.isEmpty() || d == 0) return; const DiveComputerNode *existNode = this->getExact(m, d); - DiveComputerNode newNode(m, d, s, f, n); + if (existNode) { - if (newNode.changesValues(*existNode)) { - if (n.size() && existNode->nickName != n) - qDebug("new nickname %s for DC model %s deviceId 0x%x", n.toUtf8().data(), m.toUtf8().data(), d); - if (f.size() && existNode->firmware != f) - qDebug("new firmware version %s for DC model %s deviceId 0x%x", f.toUtf8().data(), m.toUtf8().data(), d); - if (s.size() && existNode->serialNumber != s) - qDebug("new serial number %s for DC model %s deviceId 0x%x", s.toUtf8().data(), m.toUtf8().data(), d); - } else { + // Update any non-existent fields from the old entry + if (n.isEmpty()) + n = existNode->nickName; + if (s.isEmpty()) + s = existNode->serialNumber; + if (f.isEmpty()) + f = existNode->firmware; + + // Do all the old values match? + if (n == existNode->nickName && s == existNode->serialNumber && f == existNode->firmware) return; - } + + // debugging: show changes + existNode->showchanges(n, s, f); dcMap.remove(m, *existNode); } + + DiveComputerNode newNode(m, d, s, f, n); dcMap.insert(m, newNode); } diff --git a/divecomputer.h b/divecomputer.h index 81399c47d..98d12ab8b 100644 --- a/divecomputer.h +++ b/divecomputer.h @@ -12,6 +12,7 @@ public: bool operator==(const DiveComputerNode &a) const; bool operator!=(const DiveComputerNode &a) const; bool changesValues(const DiveComputerNode &b) const; + void showchanges(const QString &n, const QString &s, const QString &f) const; QString model; uint32_t deviceId; QString serialNumber; @@ -25,7 +26,7 @@ public: ~DiveComputerList(); const DiveComputerNode *getExact(const QString &m, uint32_t d); const DiveComputerNode *get(const QString &m); - void addDC(const QString &m, uint32_t d, const QString &n = QString(), const QString &s = QString(), const QString &f = QString()); + void addDC(QString m, uint32_t d, QString n = QString(), QString s = QString(), QString f = QString()); DiveComputerNode matchDC(const QString &m, uint32_t d); DiveComputerNode matchModel(const QString &m); QMultiMap<QString, DiveComputerNode> dcMap; |