Zren added a comment.
> You forgot to add StreamRestoreTab.qml to review. Oh woops. Sorry, did a `git diff` rather than staging stuff. >> I duplicated BaseMap in map.h to use a QString key focused on the info.name property. Code duplication sucks. :/ > > Can't you just qHash() the name and use it as integer index for normal MapBase? God, I've been using Python/JS so long I forgot about hashing map keys at the lower level. Hmmm, that means I could break updateEntry into 3 functions (abstract code/ update by index / update by name). diff --git a/src/maps.h b/src/maps.h index 0051153..7a440e5 100644 --- a/src/maps.h +++ b/src/maps.h @@ -120,31 +120,44 @@ public: // Context is passed in as parent because context needs to include the maps // so we'd cause a circular dep if we were to try to use the instance here. // Plus that's weird separation anyway. - void updateEntry(const PAInfo *info, QObject *parent) + void updateEntry(const PAInfo *info, QObject *parent, quint32 key) { Q_ASSERT(info); - if (m_pendingRemovals.remove(info->index)) { + if (m_pendingRemovals.remove(key)) { // Was already removed again. return; } - const bool isNew = !m_data.contains(info->index); + const bool isNew = !m_data.contains(key); - auto *obj = m_data.value(info->index, nullptr); + auto *obj = m_data.value(key, nullptr); if (!obj) { obj = new Type(parent); } obj->update(info); - m_data.insert(info->index, obj); + m_data.insert(key, obj); if (isNew) { - const int modelIndex = m_data.keys().indexOf(info->index); + const int modelIndex = m_data.keys().indexOf(key); Q_ASSERT(modelIndex >= 0); emit added(modelIndex); } } + void updateEntryByIndex(const PAInfo *info, QObject *parent) + { + Q_ASSERT(info); + updateEntry(info, parent, info->index); + } + void updateEntryByName(const PAInfo *info, QObject *parent) + { + Q_ASSERT(info); + QString infoName = QString::fromUtf8(info->name); + quint32 nameHash = qHash(...); + updateEntry(info, parent, nameHash); + } + void removeEntry(quint32 index) { if (!m_data.contains(index)) { There's one other reference to `object->index()` in `insert(Type *object)`, but I think that was only used by StreamRestore to populate the notification stream in `Context::streamRestoreCallback`. If that's the only use, we could remove that function. >> Every stream uses the system notifications icon. Would need to play around with that. > > I don't think you can get icon name for this from pa. Yeah I think so too. I meant more like hiding the icon under the "Stream Restore" tab or using a different icon for everything other than the "notification" stream. REPOSITORY R115 Plasma Audio Volume Applet REVISION DETAIL https://phabricator.kde.org/D11082 To: Zren, #plasma Cc: drosca, plasma-devel, ZrenBot, lesliezhai, ali-mohamed, jensreuterberg, abetts, sebas, apol, mart