From 05a09a820240b52d7199e285af5c16a00901380d Mon Sep 17 00:00:00 2001
From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
Date: Tue, 16 May 2023 14:02:14 -0400
Subject: [PATCH] misc: fix clazy warnings

Fix some warnings, and possible some bugs related to bad QObject::connects.

Gitlab: #938
Change-Id: Id4ca9a48b929e7c59df8cf20c6df3504c7971b4c
---
 src/app/audiodevicemodel.cpp                  |  2 +-
 src/app/avadapter.cpp                         | 22 ++---
 src/app/bannedlistmodel.cpp                   | 83 +++++++++----------
 src/app/bannedlistmodel.h                     | 23 +++--
 src/app/calladapter.cpp                       | 30 +++----
 src/app/callparticipantsmodel.h               | 14 ++--
 src/app/contactadapter.cpp                    | 38 +++++----
 src/app/contactadapter.h                      |  7 +-
 src/app/conversationsadapter.cpp              | 15 ++--
 src/app/currentaccount.cpp                    | 35 +++++---
 src/app/currentaccount.h                      |  2 +
 src/app/dbuserrorhandler.cpp                  |  2 +-
 src/app/jamiavatartheme.h                     | 34 ++++----
 src/app/lrcinstance.cpp                       |  2 +-
 src/app/mainapplication.cpp                   | 39 +++++----
 src/app/mainapplication.h                     |  7 +-
 .../components/PluginHandlerPicker.qml        |  8 +-
 src/app/mediacodeclistmodel.cpp               | 29 ++-----
 src/app/mediacodeclistmodel.h                 | 20 ++---
 src/app/messagesadapter.cpp                   | 17 ++--
 src/app/pluginlistmodel.cpp                   | 22 ++---
 src/app/pluginlistmodel.h                     |  2 +-
 src/app/pluginlistpreferencemodel.cpp         | 12 +--
 src/app/pluginlistpreferencemodel.h           | 46 +++++-----
 src/app/positionmanager.cpp                   | 49 ++++++-----
 src/app/preferenceitemlistmodel.cpp           | 52 +++++-------
 src/app/preferenceitemlistmodel.h             | 27 +++---
 .../components/PluginItemDelegate.qml         |  2 +
 .../components/PluginPreferencesListView.qml  | 24 +++---
 .../components/PluginPreferencesView.qml      |  4 +
 src/app/systemtray.cpp                        |  5 +-
 src/app/systemtray.h                          | 10 +--
 src/app/utils.cpp                             |  4 +-
 src/app/utilsadapter.cpp                      | 50 ++++-------
 src/app/utilsadapter.h                        |  1 -
 35 files changed, 367 insertions(+), 372 deletions(-)

diff --git a/src/app/audiodevicemodel.cpp b/src/app/audiodevicemodel.cpp
index ea5be6ae7..886954084 100644
--- a/src/app/audiodevicemodel.cpp
+++ b/src/app/audiodevicemodel.cpp
@@ -53,7 +53,7 @@ AudioDeviceModel::data(const QModelIndex& index, int role) const
     case Qt::DisplayRole:
     case Role::DeviceName: {
         auto deviceName = devices_.at(index.row());
-        QRegularExpression re("{{(.*?)}}");
+        const static QRegularExpression re("{{(.*?)}}");
         QRegularExpressionMatch match = re.match(deviceName);
         if (match.hasMatch() && re.captureCount() > 0) {
             deviceName.replace(match.captured(0), QObject::tr(match.captured(1).toUtf8()));
diff --git a/src/app/avadapter.cpp b/src/app/avadapter.cpp
index 11f91cf00..c2c6a9021 100644
--- a/src/app/avadapter.cpp
+++ b/src/app/avadapter.cpp
@@ -177,7 +177,7 @@ AvAdapter::captureAllScreens()
         QPainter painter(&final);
         final.fill(Qt::black);
 
-        for (auto scr : scrs) {
+        for (const auto& scr : scrs) {
             painter.drawPixmap(currentPoint, 0, scr.width(), scr.height(), scr);
             currentPoint += scr.width();
         }
@@ -208,7 +208,7 @@ AvAdapter::shareScreenArea(unsigned x, unsigned y, unsigned width, unsigned heig
     // xrectsel will freeze all displays too fast so that the call
     // context menu will not be closed even closed signal is emitted
     // use timer to wait until popup is closed
-    QTimer::singleShot(100, [=]() mutable {
+    QTimer::singleShot(100, this, [=]() mutable {
         x = y = width = height = 0;
         xrectsel(&x, &y, &width, &height);
         auto resource = lrcInstance_->getCurrentCallModel()->getDisplay(getScreenNumber(),
@@ -296,16 +296,18 @@ AvAdapter::stopSharing(const QString& source)
     if (!source.isEmpty() && !callId.isEmpty()) {
         if (source.startsWith(libjami::Media::VideoProtocolPrefix::DISPLAY)) {
             qDebug() << "Stopping display: " << source;
-            lrcInstance_->getCurrentCallModel()->removeMedia(callId,
-                                                            libjami::Media::Details::MEDIA_TYPE_VIDEO,
-                                                            libjami::Media::VideoProtocolPrefix::DISPLAY,
-                                                            muteCamera_);
+            lrcInstance_->getCurrentCallModel()
+                ->removeMedia(callId,
+                              libjami::Media::Details::MEDIA_TYPE_VIDEO,
+                              libjami::Media::VideoProtocolPrefix::DISPLAY,
+                              muteCamera_);
         } else {
             qDebug() << "Stopping file: " << source;
-            lrcInstance_->getCurrentCallModel()->removeMedia(callId,
-                                                            libjami::Media::Details::MEDIA_TYPE_VIDEO,
-                                                            libjami::Media::VideoProtocolPrefix::FILE,
-                                                            muteCamera_);
+            lrcInstance_->getCurrentCallModel()
+                ->removeMedia(callId,
+                              libjami::Media::Details::MEDIA_TYPE_VIDEO,
+                              libjami::Media::VideoProtocolPrefix::FILE,
+                              muteCamera_);
         }
     }
 }
diff --git a/src/app/bannedlistmodel.cpp b/src/app/bannedlistmodel.cpp
index a097f1730..6f75c0f07 100644
--- a/src/app/bannedlistmodel.cpp
+++ b/src/app/bannedlistmodel.cpp
@@ -26,33 +26,12 @@ BannedListModel::BannedListModel(QObject* parent)
 
 {
     connect(this, &BannedListModel::lrcInstanceChanged, [this]() {
-        if (lrcInstance_ && lrcInstance_->getCurrentContactModel()) {
-            connect(
-                lrcInstance_->getCurrentContactModel(),
-                &ContactModel::bannedStatusChanged,
+        // Listen for account change and reconnect to the new account contact model.
+        connect(lrcInstance_,
+                &LRCInstance::currentAccountIdChanged,
                 this,
-                [&](const QString& uri, bool banned) {
-                    if (banned) {
-                        beginInsertRows(QModelIndex(), rowCount(), rowCount());
-                        bannedlist_.append(uri);
-                        endInsertRows();
-                        set_count(rowCount());
-                    } else {
-                        auto it = std::find_if(bannedlist_.begin(),
-                                               bannedlist_.end(),
-                                               [&uri](const auto& c) { return uri == c; });
-                        if (it != bannedlist_.end()) {
-                            auto elementIndex = std::distance(bannedlist_.begin(), it);
-                            beginRemoveRows(QModelIndex(), elementIndex, elementIndex);
-                            bannedlist_.remove(elementIndex);
-                            endRemoveRows();
-                            set_count(rowCount());
-                        }
-                    }
-                },
-                Qt::UniqueConnection);
-        }
-        reset();
+                &BannedListModel::setupForAccount);
+        setupForAccount();
     });
 }
 
@@ -66,16 +45,6 @@ BannedListModel::rowCount(const QModelIndex& parent) const
     return 0;
 }
 
-int
-BannedListModel::columnCount(const QModelIndex& parent) const
-{
-    Q_UNUSED(parent);
-    /*
-     * Only need one column.
-     */
-    return 1;
-}
-
 QVariant
 BannedListModel::data(const QModelIndex& index, int role) const
 {
@@ -123,13 +92,6 @@ BannedListModel::index(int row, int column, const QModelIndex& parent) const
     return QModelIndex();
 }
 
-QModelIndex
-BannedListModel::parent(const QModelIndex& child) const
-{
-    Q_UNUSED(child);
-    return QModelIndex();
-}
-
 Qt::ItemFlags
 BannedListModel::flags(const QModelIndex& index) const
 {
@@ -148,3 +110,38 @@ BannedListModel::reset()
     endResetModel();
     set_count(rowCount());
 }
+
+void
+BannedListModel::setupForAccount()
+{
+    if (lrcInstance_ && lrcInstance_->getCurrentContactModel()) {
+        connect(lrcInstance_->getCurrentContactModel(),
+                &ContactModel::bannedStatusChanged,
+                this,
+                &BannedListModel::onBannedStatusChanged,
+                Qt::UniqueConnection);
+    }
+    reset();
+}
+
+void
+BannedListModel::onBannedStatusChanged(const QString& uri, bool banned)
+{
+    if (banned) {
+        beginInsertRows(QModelIndex(), rowCount(), rowCount());
+        bannedlist_.append(uri);
+        endInsertRows();
+        set_count(rowCount());
+    } else {
+        auto it = std::find_if(bannedlist_.begin(), bannedlist_.end(), [&uri](const auto& c) {
+            return uri == c;
+        });
+        if (it != bannedlist_.end()) {
+            auto elementIndex = std::distance(bannedlist_.begin(), it);
+            beginRemoveRows(QModelIndex(), elementIndex, elementIndex);
+            bannedlist_.remove(elementIndex);
+            endRemoveRows();
+            set_count(rowCount());
+        }
+    }
+}
diff --git a/src/app/bannedlistmodel.h b/src/app/bannedlistmodel.h
index efd9e3179..7318d208c 100644
--- a/src/app/bannedlistmodel.h
+++ b/src/app/bannedlistmodel.h
@@ -32,25 +32,22 @@ public:
     explicit BannedListModel(QObject* parent = nullptr);
     ~BannedListModel();
 
-    /*
-     * QAbstractListModel override.
-     */
+    // QAbstractListModel override.
     int rowCount(const QModelIndex& parent = QModelIndex()) const override;
-    int columnCount(const QModelIndex& parent) const override;
     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
-    /*
-     * Override role name as access point in qml.
-     */
     QHash<int, QByteArray> roleNames() const override;
-    QModelIndex index(int row, int column = 0, const QModelIndex& parent = QModelIndex()) const;
-    QModelIndex parent(const QModelIndex& child) const;
-    Qt::ItemFlags flags(const QModelIndex& index) const;
+    QModelIndex index(int row,
+                      int column = 0,
+                      const QModelIndex& parent = QModelIndex()) const override;
+    Qt::ItemFlags flags(const QModelIndex& index) const override;
 
-    /*
-     * This function is to reset the model when there's new account added.
-     */
+    // This function is to reset the model when there's new account added.
     void reset();
 
+private Q_SLOTS:
+    void setupForAccount();
+    void onBannedStatusChanged(const QString& uri, bool banned);
+
 private:
     QList<QString> bannedlist_;
 };
diff --git a/src/app/calladapter.cpp b/src/app/calladapter.cpp
index 9ef676e39..c4acf3c7c 100644
--- a/src/app/calladapter.cpp
+++ b/src/app/calladapter.cpp
@@ -72,6 +72,7 @@ CallAdapter::CallAdapter(SystemTray* systemTray, LRCInstance* instance, QObject*
     // notification responses (gnu/linux currently)
     connect(systemTray_,
             &SystemTray::answerCallActivated,
+            this,
             [this](const QString& accountId, const QString& convUid) {
                 acceptACall(accountId, convUid);
                 Q_EMIT lrcInstance_->notificationClicked();
@@ -81,6 +82,7 @@ CallAdapter::CallAdapter(SystemTray* systemTray, LRCInstance* instance, QObject*
             });
     connect(systemTray_,
             &SystemTray::declineCallActivated,
+            this,
             [this](const QString& accountId, const QString& convUid) {
                 hangUpACall(accountId, convUid);
             });
@@ -134,10 +136,10 @@ CallAdapter::onCallStatusChanged(const QString& accountId, const QString& callId
     // handle notifications
     if (call.status == lrc::api::call::Status::IN_PROGRESS) {
         // Call answered and in progress; close the notification
-        systemTray_->hideNotification(QString("%1;%2").arg(accountId).arg(convInfo.uid));
+        systemTray_->hideNotification(QString("%1;%2").arg(accountId, convInfo.uid));
     } else if (call.status == lrc::api::call::Status::ENDED) {
         // Call ended; close the notification
-        if (systemTray_->hideNotification(QString("%1;%2").arg(accountId).arg(convInfo.uid))
+        if (systemTray_->hideNotification(QString("%1;%2").arg(accountId, convInfo.uid))
             && call.startTime.time_since_epoch().count() == 0) {
             // This was a missed call; show a missed call notification
             auto convAvatar = Utils::conversationAvatar(lrcInstance_,
@@ -146,11 +148,11 @@ CallAdapter::onCallStatusChanged(const QString& accountId, const QString& callId
                                                         accountId);
             auto& accInfo = lrcInstance_->getAccountInfo(accountId);
             auto from = accInfo.conversationModel->title(convInfo.uid);
-            auto notifId = QString("%1;%2").arg(accountId).arg(convInfo.uid);
+            auto notifId = QString("%1;%2").arg(accountId, convInfo.uid);
             systemTray_->showNotification(notifId,
                                           tr("Missed call"),
                                           tr("Missed call with %1").arg(from),
-                                          NotificationType::CHAT,
+                                          SystemTray::NotificationType::CHAT,
                                           Utils::QImageToByteArray(convAvatar));
         }
     }
@@ -449,11 +451,11 @@ CallAdapter::showNotification(const QString& accountId, const QString& convUid)
 
 #ifdef Q_OS_LINUX
     auto convAvatar = Utils::conversationAvatar(lrcInstance_, convUid, QSize(50, 50), accountId);
-    auto notifId = QString("%1;%2").arg(accountId).arg(convUid);
+    auto notifId = QString("%1;%2").arg(accountId, convUid);
     systemTray_->showNotification(notifId,
                                   tr("Incoming call"),
                                   tr("%1 is calling you").arg(title),
-                                  NotificationType::CALL,
+                                  SystemTray::NotificationType::CALL,
                                   Utils::QImageToByteArray(convAvatar));
 #else
     auto onClicked = [this, accountId, convUid]() {
@@ -544,7 +546,7 @@ CallAdapter::setActiveStream(const QString& uri, const QString& deviceId, const
         auto participants = participantsModel.getParticipants();
         decltype(participants) activeParticipants = {};
         bool removeActive = false;
-        for (auto part : participants) {
+        for (const auto& part : participants) {
             auto isParticipant = part.uri == uri && part.device == deviceId
                                  && part.sinkId == streamId;
             if (part.active && !isParticipant)
@@ -957,21 +959,21 @@ CallAdapter::updateAdvancedInformation()
 bool
 CallAdapter::takeScreenshot(const QImage& image, const QString& path)
 {
-    QString name = QString("%1 %2")
-                       .arg(tr("Screenshot"))
+    QString name = QString("%1 %2").arg(tr("Screenshot"),
 #ifdef WIN32
-                       .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HHmmss"));
+                                        QDateTime::currentDateTime().toString("yyyy-MM-dd HHmmss")
 #else
-                       .arg(QDateTime::currentDateTime().toString(Qt::ISODate));
+                                        QDateTime::currentDateTime().toString(Qt::ISODate)
 #endif
+    );
 
     bool fileAlreadyExists = true;
     int nb = 0;
-    QString filePath = QString("%1%2.png").arg(path).arg(name);
+    QString filePath = QString("%1%2.png").arg(path, name);
     while (fileAlreadyExists) {
-        filePath = QString("%1%2.png").arg(path).arg(name);
+        filePath = QString("%1%2.png").arg(path, name);
         if (nb)
-            filePath = QString("%1(%2).png").arg(filePath).arg(QString::number(nb));
+            filePath = QString("%1(%2).png").arg(filePath, QString::number(nb));
         QFileInfo check_file(filePath);
         fileAlreadyExists = check_file.exists() && check_file.isFile();
         nb++;
diff --git a/src/app/callparticipantsmodel.h b/src/app/callparticipantsmodel.h
index 71583f487..77b71819d 100644
--- a/src/app/callparticipantsmodel.h
+++ b/src/app/callparticipantsmodel.h
@@ -76,7 +76,7 @@ class CallParticipantsModel : public QAbstractListModel
 {
     Q_OBJECT
 
-    Q_PROPERTY(LayoutType conferenceLayout READ conferenceLayout NOTIFY layoutChanged)
+    Q_PROPERTY(LayoutType conferenceLayout READ conferenceLayout NOTIFY conferenceLayoutChanged)
     QML_RO_PROPERTY(int, count)
 
 public:
@@ -98,18 +98,18 @@ public:
     void setConferenceLayout(int layout, const QString& callId)
     {
         auto newLayout = static_cast<LayoutType>(layout);
-        if (callId == callId_ && newLayout != layout_) {
-            layout_ = newLayout;
-            Q_EMIT layoutChanged();
+        if (callId == callId_ && newLayout != conferenceLayout_) {
+            conferenceLayout_ = newLayout;
+            Q_EMIT conferenceLayoutChanged();
         }
     }
     LayoutType conferenceLayout()
     {
-        return layout_;
+        return conferenceLayout_;
     }
 
 Q_SIGNALS:
-    void layoutChanged();
+    void conferenceLayoutChanged();
 
 private:
     LRCInstance* lrcInstance_ {nullptr};
@@ -117,5 +117,5 @@ private:
     std::mutex participantsMtx_;
     QList<CallParticipant::Item> participants_ {};
     QString callId_;
-    LayoutType layout_;
+    LayoutType conferenceLayout_;
 };
diff --git a/src/app/contactadapter.cpp b/src/app/contactadapter.cpp
index b52c6f278..fb49f41da 100644
--- a/src/app/contactadapter.cpp
+++ b/src/app/contactadapter.cpp
@@ -28,7 +28,10 @@ ContactAdapter::ContactAdapter(LRCInstance* instance, QObject* parent)
     selectableProxyModel_.reset(new SelectableProxyModel(this));
     if (lrcInstance_) {
         connectSignals();
-        connect(lrcInstance_, &LRCInstance::currentAccountIdChanged, [this] { connectSignals(); });
+        connect(lrcInstance_,
+                &LRCInstance::currentAccountIdChanged,
+                this,
+                &ContactAdapter::connectSignals);
     }
 }
 
@@ -246,20 +249,27 @@ ContactAdapter::removeContact(const QString& peerUri, bool banContact)
 void
 ContactAdapter::connectSignals()
 {
-    if (lrcInstance_->getCurrentContactModel()) {
-        connect(lrcInstance_->getCurrentContactModel(),
-                &ContactModel::bannedStatusChanged,
-                this,
-                &ContactAdapter::bannedStatusChanged,
-                Qt::UniqueConnection);
-        connect(
-            lrcInstance_->getCurrentContactModel(),
+    if (!lrcInstance_->getCurrentContactModel()) {
+        qWarning() << Q_FUNC_INFO << "No contact model";
+        return;
+    }
+
+    connect(lrcInstance_->getCurrentContactModel(),
+            &ContactModel::bannedStatusChanged,
+            this,
+            &ContactAdapter::bannedStatusChanged,
+            Qt::UniqueConnection);
+    connect(lrcInstance_->getCurrentContactModel(),
             &ContactModel::modelUpdated,
             this,
-            [&](const auto& uri) {
-                // Refresh contacts shown
-                selectableProxyModel_->invalidate();
-            },
+            &ContactAdapter::onModelUpdated,
             Qt::UniqueConnection);
-    }
+}
+
+void
+ContactAdapter::onModelUpdated(const QString& uri)
+{
+    Q_UNUSED(uri)
+    // Refresh contacts shown
+    selectableProxyModel_->invalidate();
 }
diff --git a/src/app/contactadapter.h b/src/app/contactadapter.h
index ebe49a3e4..c3666eec3 100644
--- a/src/app/contactadapter.h
+++ b/src/app/contactadapter.h
@@ -95,6 +95,10 @@ public:
 
 Q_SIGNALS:
     void bannedStatusChanged(const QString& uri, bool banned);
+    void defaultModeratorsUpdated();
+
+private Q_SLOTS:
+    void onModelUpdated(const QString& uri);
 
 private:
     SmartListModel::Type listModeltype_;
@@ -105,7 +109,4 @@ private:
 
     bool hasDifferentMembers(const VectorString& currentMembers,
                              const VectorString& convMembers) const;
-
-Q_SIGNALS:
-    void defaultModeratorsUpdated();
 };
diff --git a/src/app/conversationsadapter.cpp b/src/app/conversationsadapter.cpp
index aa0697690..0c20cafc7 100644
--- a/src/app/conversationsadapter.cpp
+++ b/src/app/conversationsadapter.cpp
@@ -85,18 +85,21 @@ ConversationsAdapter::ConversationsAdapter(SystemTray* systemTray,
     // notification responses
     connect(systemTray_,
             &SystemTray::openConversationActivated,
+            this,
             [this](const QString& accountId, const QString& convUid) {
                 Q_EMIT lrcInstance_->notificationClicked();
                 lrcInstance_->selectConversation(convUid, accountId);
             });
     connect(systemTray_,
             &SystemTray::acceptPendingActivated,
+            this,
             [this](const QString& accountId, const QString& convUid) {
                 auto& accInfo = lrcInstance_->getAccountInfo(accountId);
                 accInfo.conversationModel->acceptConversationRequest(convUid);
             });
     connect(systemTray_,
             &SystemTray::refusePendingActivated,
+            this,
             [this](const QString& accountId, const QString& convUid) {
                 auto& accInfo = lrcInstance_->getAccountInfo(accountId);
                 accInfo.conversationModel->removeConversation(convUid);
@@ -178,11 +181,11 @@ ConversationsAdapter::onNewUnreadInteraction(const QString& accountId,
                                                 interaction.authorUri,
                                                 QSize(50, 50),
                                                 accountId);
-        auto notifId = QString("%1;%2;%3").arg(accountId).arg(convUid).arg(interactionId);
+        auto notifId = QString("%1;%2;%3").arg(accountId, convUid, interactionId);
         systemTray_->showNotification(notifId,
                                       tr("%1 received a new message").arg(to),
                                       from + ": " + body_,
-                                      NotificationType::CHAT,
+                                      SystemTray::NotificationType::CHAT,
                                       Utils::QImageToByteArray(contactPhoto));
 
 #else
@@ -207,7 +210,7 @@ ConversationsAdapter::onNewReadInteraction(const QString& accountId,
 {
 #ifdef Q_OS_LINUX
     // hide notification
-    auto notifId = QString("%1;%2;%3").arg(accountId).arg(convUid).arg(interactionId);
+    auto notifId = QString("%1;%2;%3").arg(accountId, convUid, interactionId);
     systemTray_->hideNotification(notifId);
 #else
     Q_UNUSED(accountId)
@@ -238,11 +241,11 @@ ConversationsAdapter::onNewTrustRequest(const QString& accountId,
         if (preferences["ignoreNotifications"] == "true")
             return;
         auto contactPhoto = Utils::contactPhoto(lrcInstance_, peerUri, QSize(50, 50), accountId);
-        auto notifId = QString("%1;%2").arg(accountId).arg(conv);
+        auto notifId = QString("%1;%2").arg(accountId, conv);
         systemTray_->showNotification(notifId,
                                       tr("%1 received a new trust request").arg(to),
                                       "New request from " + from,
-                                      NotificationType::REQUEST,
+                                      SystemTray::NotificationType::REQUEST,
                                       Utils::QImageToByteArray(contactPhoto));
     }
 #else
@@ -257,7 +260,7 @@ ConversationsAdapter::onTrustRequestTreated(const QString& accountId, const QStr
 {
 #ifdef Q_OS_LINUX
     // hide notification
-    auto notifId = QString("%1;%2").arg(accountId).arg(peerUri);
+    auto notifId = QString("%1;%2").arg(accountId, peerUri);
     systemTray_->hideNotification(notifId);
 #else
     Q_UNUSED(accountId)
diff --git a/src/app/currentaccount.cpp b/src/app/currentaccount.cpp
index 12dda4ba3..00090325d 100644
--- a/src/app/currentaccount.cpp
+++ b/src/app/currentaccount.cpp
@@ -37,19 +37,12 @@ CurrentAccount::CurrentAccount(LRCInstance* lrcInstance,
             this,
             &CurrentAccount::onAccountUpdated);
 
-
-    connect(lrcInstance_->getCurrentContactModel(),
-            &ContactModel::bannedStatusChanged,
+    connect(lrcInstance_,
+            &LRCInstance::currentAccountIdChanged,
             this,
-            [&](const auto&, auto) {
-                set_hasBannedContacts(
-                    lrcInstance_->getCurrentAccountInfo().contactModel->getBannedContacts().size());
-            },
-            Qt::UniqueConnection);
-
-    connect(lrcInstance_, &LRCInstance::currentAccountIdChanged, [this] { updateData(); });
+            &CurrentAccount::setupForAccount);
 
-    updateData();
+    setupForAccount();
 }
 
 void
@@ -94,6 +87,17 @@ CurrentAccount::get_isLocalModeratorsEnabled()
     return isLocalModeratorsEnabled_;
 }
 
+void
+CurrentAccount::setupForAccount()
+{
+    connect(lrcInstance_->getCurrentContactModel(),
+            &ContactModel::bannedStatusChanged,
+            this,
+            &CurrentAccount::onBannedStatusChanged,
+            Qt::UniqueConnection);
+    updateData();
+}
+
 void
 CurrentAccount::onAccountUpdated(const QString& id)
 {
@@ -103,6 +107,15 @@ CurrentAccount::onAccountUpdated(const QString& id)
     updateData();
 }
 
+void
+CurrentAccount::onBannedStatusChanged(const QString& contactUri, bool banned)
+{
+    Q_UNUSED(contactUri)
+    Q_UNUSED(banned)
+    set_hasBannedContacts(
+        lrcInstance_->getCurrentAccountInfo().contactModel->getBannedContacts().size());
+}
+
 void
 CurrentAccount::updateData()
 {
diff --git a/src/app/currentaccount.h b/src/app/currentaccount.h
index c4d824697..a20d959c2 100644
--- a/src/app/currentaccount.h
+++ b/src/app/currentaccount.h
@@ -211,7 +211,9 @@ Q_SIGNALS:
 
 private Q_SLOTS:
     void updateData();
+    void setupForAccount();
     void onAccountUpdated(const QString& id);
+    void onBannedStatusChanged(const QString& contactUri, bool banned);
 
 private:
     bool isAllModeratorsEnabled_;
diff --git a/src/app/dbuserrorhandler.cpp b/src/app/dbuserrorhandler.cpp
index 9add6fb48..e33eb5609 100644
--- a/src/app/dbuserrorhandler.cpp
+++ b/src/app/dbuserrorhandler.cpp
@@ -33,7 +33,7 @@ DBusErrorHandler::errorCallback()
 
     Q_EMIT showDaemonReconnectPopup(true);
 
-    QTimer::singleShot(2500, [this]() {
+    QTimer::singleShot(2500, this, [this]() {
         if ((!lrc::api::Lrc::isConnected()) || (!lrc::api::Lrc::dbusIsValid())) {
             qDebug() << "Could not reconnect to the daemon";
             Q_EMIT daemonReconnectFailed();
diff --git a/src/app/jamiavatartheme.h b/src/app/jamiavatartheme.h
index b96f0dd1d..d9142070b 100644
--- a/src/app/jamiavatartheme.h
+++ b/src/app/jamiavatartheme.h
@@ -21,23 +21,23 @@
 #pragma once
 
 namespace JamiAvatarTheme {
-static const QColor defaultAvatarColor_ = {"#ff9e9e9e"}; // Grey
+static const QColor defaultAvatarColor_ = {0x9e, 0x9e, 0x9e}; // Grey
 static const QColor avatarColors_[] {
-    {"#fff44336"}, // Red
-    {"#ffe91e63"}, // Pink
-    {"#ff9c27b0"}, // Purple
-    {"#ff673ab7"}, // Deep Purple
-    {"#ff3f51b5"}, // Indigo
-    {"#ff2196f3"}, // Blue
-    {"#ff00bcd4"}, // Cyan
-    {"#ff009688"}, // Teal
-    {"#ff4caf50"}, // Green
-    {"#ff8bc34a"}, // Light Green
-    {"#ff9e9e9e"}, // Grey
-    {"#ffcddc39"}, // Lime
-    {"#ffffc107"}, // Amber
-    {"#ffff5722"}, // Deep Orange
-    {"#ff795548"}, // Brown
-    {"#ff607d8b"}  // Blue Grey
+    {0xf4, 0x43, 0x24}, // Red
+    {0xe9, 0x1e, 0x63}, // Pink
+    {0x9c, 0x27, 0xb0}, // Purple
+    {0x67, 0x3a, 0xb7}, // Deep Purple
+    {0x3f, 0x51, 0xb5}, // Indigo
+    {0x21, 0x96, 0xf3}, // Blue
+    {0x00, 0xbc, 0xd4}, // Cyan
+    {0x00, 0x96, 0x88}, // Teal
+    {0x4c, 0xaf, 0x50}, // Green
+    {0x8b, 0xc3, 0x4a}, // Light Green
+    {0x9e, 0x9e, 0x9e}, // Grey
+    {0xcd, 0xdc, 0x39}, // Lime
+    {0xff, 0xc1, 0x07}, // Amber
+    {0xff, 0x57, 0x22}, // Deep Orange
+    {0x79, 0x55, 0x48}, // Brown
+    {0x60, 0x7d, 0x8b}  // Blue Grey
 };
 } // namespace JamiAvatarTheme
diff --git a/src/app/lrcinstance.cpp b/src/app/lrcinstance.cpp
index f9d136929..cbb2cb653 100644
--- a/src/app/lrcinstance.cpp
+++ b/src/app/lrcinstance.cpp
@@ -58,7 +58,7 @@ LRCInstance::LRCInstance(migrateCallback willMigrateCb,
         set_currentAccountAvatarSet(!profileInfo.avatar.isEmpty());
     });
 
-    connect(&accountModel(), &AccountModel::profileUpdated, [this](const QString& id) {
+    connect(&accountModel(), &AccountModel::profileUpdated, this, [this](const QString& id) {
         if (id != currentAccountId_)
             return;
 
diff --git a/src/app/mainapplication.cpp b/src/app/mainapplication.cpp
index 9ed5eff04..526bd2692 100644
--- a/src/app/mainapplication.cpp
+++ b/src/app/mainapplication.cpp
@@ -78,22 +78,33 @@ ScreenInfo::setCurrentFocusWindow(QWindow* window)
         currentFocusWindow_ = window;
         set_devicePixelRatio(currentFocusWindow_->screen()->devicePixelRatio());
 
-        disconnect(devicePixelRatioConnection_);
-        disconnect(currentFocusWindowScreenConnection_);
-
-        currentFocusWindowScreenConnection_
-            = connect(currentFocusWindow_, &QWindow::screenChanged, [this] {
-                  currentFocusWindowScreen_ = currentFocusWindow_->screen();
-                  set_devicePixelRatio(currentFocusWindowScreen_->devicePixelRatio());
-
-                  devicePixelRatioConnection_ = connect(
-                      currentFocusWindowScreen_, &QScreen::physicalDotsPerInchChanged, [this] {
-                          set_devicePixelRatio(currentFocusWindowScreen_->devicePixelRatio());
-                      });
-              });
+        QObject::connect(currentFocusWindow_,
+                         &QWindow::screenChanged,
+                         this,
+                         &ScreenInfo::onScreenChanged,
+                         Qt::UniqueConnection);
     }
 }
 
+void
+ScreenInfo::onScreenChanged()
+{
+    currentFocusWindowScreen_ = currentFocusWindow_->screen();
+    set_devicePixelRatio(currentFocusWindowScreen_->devicePixelRatio());
+
+    QObject::connect(currentFocusWindowScreen_,
+                     &QScreen::physicalDotsPerInchChanged,
+                     this,
+                     &ScreenInfo::onPhysicalDotsPerInchChanged,
+                     Qt::UniqueConnection);
+}
+
+void
+ScreenInfo::onPhysicalDotsPerInchChanged()
+{
+    set_devicePixelRatio(currentFocusWindowScreen_->devicePixelRatio());
+}
+
 MainApplication::MainApplication(int& argc, char** argv)
     : QApplication(argc, argv)
 {
@@ -170,7 +181,7 @@ MainApplication::init()
         lrcInstance_.get(),
         &LRCInstance::quitEngineRequested,
         this,
-        [this] { engine_->quit(); },
+        [this] { Q_EMIT engine_->quit(); },
         Qt::DirectConnection);
 
     auto downloadPath = settingsManager_->getValue(Settings::Key::DownloadPath);
diff --git a/src/app/mainapplication.h b/src/app/mainapplication.h
index 3812f8146..f8e24da21 100644
--- a/src/app/mainapplication.h
+++ b/src/app/mainapplication.h
@@ -46,10 +46,11 @@ class ScreenInfo : public QObject
 public:
     void setCurrentFocusWindow(QWindow* window);
 
-private:
-    QMetaObject::Connection currentFocusWindowScreenConnection_;
-    QMetaObject::Connection devicePixelRatioConnection_;
+private Q_SLOTS:
+    void onScreenChanged();
+    void onPhysicalDotsPerInchChanged();
 
+private:
     QWindow* currentFocusWindow_ {nullptr};
     QScreen* currentFocusWindowScreen_ {nullptr};
 };
diff --git a/src/app/mainview/components/PluginHandlerPicker.qml b/src/app/mainview/components/PluginHandlerPicker.qml
index fc45c8b2c..064017925 100644
--- a/src/app/mainview/components/PluginHandlerPicker.qml
+++ b/src/app/mainview/components/PluginHandlerPicker.qml
@@ -223,9 +223,9 @@ Popup {
                     model: PreferenceItemListModel {
                         id: handlerPickerPrefsModel
                         lrcInstance: LRCInstance
-                        accountId_: LRCInstance.currentAccountId
-                        mediaHandlerName_: handlerName
-                        pluginId_: pluginId
+                        accountId: LRCInstance.currentAccountId
+                        mediaHandlerName: handlerName
+                        pluginId: root.pluginId
                     }
 
                     delegate: PreferenceItemDelegate {
@@ -248,7 +248,7 @@ Popup {
 
                             lrcInstance: LRCInstance
                             preferenceKey: PreferenceKey
-                            accountId_: LRCInstance.currentAccountId
+                            accountId: LRCInstance.currentAccountId
                             pluginId: PluginId
                         }
 
diff --git a/src/app/mediacodeclistmodel.cpp b/src/app/mediacodeclistmodel.cpp
index 9a0afa8f8..66d4727a8 100644
--- a/src/app/mediacodeclistmodel.cpp
+++ b/src/app/mediacodeclistmodel.cpp
@@ -21,10 +21,7 @@
 #include "lrcinstance.h"
 
 #include "api/account.h"
-#include "api/contact.h"
-#include "api/conversation.h"
 #include "api/codecmodel.h"
-#include "api/devicemodel.h"
 
 MediaCodecListModel::MediaCodecListModel(QObject* parent)
     : AbstractListModelBase(parent)
@@ -50,7 +47,7 @@ MediaCodecListModel::rowCount(const QModelIndex& parent) const
             auto videoCodecListOld = lrcInstance_->getCurrentAccountInfo()
                                          .codecModel->getVideoCodecs();
 
-            for (auto codec : videoCodecListOld) {
+            for (const auto& codec : videoCodecListOld) {
                 if (codec.name.length()) {
                     realCodecList.append(codec);
                 }
@@ -62,16 +59,6 @@ MediaCodecListModel::rowCount(const QModelIndex& parent) const
     return 0;
 }
 
-int
-MediaCodecListModel::columnCount(const QModelIndex& parent) const
-{
-    Q_UNUSED(parent);
-    /*
-     * Only need one column.
-     */
-    return 1;
-}
-
 QVariant
 MediaCodecListModel::data(const QModelIndex& index, int role) const
 {
@@ -82,7 +69,7 @@ MediaCodecListModel::data(const QModelIndex& index, int role) const
         QList<lrc::api::Codec> videoCodecList = lrcInstance_->getCurrentAccountInfo()
                                                     .codecModel->getVideoCodecs();
 
-        for (auto codec : videoCodecList) {
+        for (const auto& codec : videoCodecList) {
             if (codec.name.length()) {
                 mediaCodecList.append(codec);
             }
@@ -130,13 +117,6 @@ MediaCodecListModel::index(int row, int column, const QModelIndex& parent) const
     return QModelIndex();
 }
 
-QModelIndex
-MediaCodecListModel::parent(const QModelIndex& child) const
-{
-    Q_UNUSED(child);
-    return QModelIndex();
-}
-
 Qt::ItemFlags
 MediaCodecListModel::flags(const QModelIndex& index) const
 {
@@ -164,5 +144,8 @@ MediaCodecListModel::mediaType()
 void
 MediaCodecListModel::setMediaType(int mediaType)
 {
-    mediaType_ = mediaType;
+    if (mediaType_ != mediaType) {
+        mediaType_ = mediaType;
+        Q_EMIT mediaTypeChanged();
+    }
 }
diff --git a/src/app/mediacodeclistmodel.h b/src/app/mediacodeclistmodel.h
index 6272f9d94..359f34bf1 100644
--- a/src/app/mediacodeclistmodel.h
+++ b/src/app/mediacodeclistmodel.h
@@ -23,7 +23,7 @@
 class MediaCodecListModel : public AbstractListModelBase
 {
     Q_OBJECT
-    Q_PROPERTY(int mediaType READ mediaType WRITE setMediaType)
+    Q_PROPERTY(int mediaType READ mediaType WRITE setMediaType NOTIFY mediaTypeChanged)
 public:
     enum MediaType { VIDEO, AUDIO };
     enum Role { MediaCodecName = Qt::UserRole + 1, IsEnabled, MediaCodecID, Samplerate };
@@ -32,25 +32,23 @@ public:
     explicit MediaCodecListModel(QObject* parent = nullptr);
     ~MediaCodecListModel();
 
-    /*
-     * QAbstractListModel override.
-     */
+    // QAbstractListModel override.
     int rowCount(const QModelIndex& parent = QModelIndex()) const override;
-    int columnCount(const QModelIndex& parent) const override;
     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
-    /*
-     * Override role name as access point in qml.
-     */
     QHash<int, QByteArray> roleNames() const override;
-    QModelIndex index(int row, int column = 0, const QModelIndex& parent = QModelIndex()) const;
-    QModelIndex parent(const QModelIndex& child) const;
-    Qt::ItemFlags flags(const QModelIndex& index) const;
+    QModelIndex index(int row,
+                      int column = 0,
+                      const QModelIndex& parent = QModelIndex()) const override;
+    Qt::ItemFlags flags(const QModelIndex& index) const override;
 
     Q_INVOKABLE void reset();
 
     int mediaType();
     void setMediaType(int mediaType);
 
+Q_SIGNALS:
+    void mediaTypeChanged();
+
 private:
     int mediaType_;
 };
diff --git a/src/app/messagesadapter.cpp b/src/app/messagesadapter.cpp
index 0f18e2f7e..2eb7b3470 100644
--- a/src/app/messagesadapter.cpp
+++ b/src/app/messagesadapter.cpp
@@ -341,8 +341,8 @@ MessagesAdapter::onPaste()
         // Extract the local paths of the files.
         for (int i = 0; i < urlList.size(); ++i) {
             // Trim file:// or file:/// from url.
-            QString filePath = urlList.at(i).toString().remove(
-                QRegularExpression("^file:\\/{2,3}"));
+            const static QRegularExpression fileSchemeRe("^file:\\/{2,3}");
+            QString filePath = urlList.at(i).toString().remove(fileSchemeRe);
             Q_EMIT newFilePasted(filePath);
         }
     } else {
@@ -658,7 +658,8 @@ MessagesAdapter::getMediaInfo(const QString& msg)
     }
     static const QRegExp vPattern("(video/)(avi|mov|webm|webp|rmvb)$", Qt::CaseInsensitive);
     vPattern.indexIn(mime.name());
-    QString type = vPattern.capturedTexts().size() == 3 ? vPattern.capturedTexts()[1] : "";
+    auto captured = vPattern.capturedTexts();
+    QString type = captured.size() == 3 ? captured[1] : "";
     if (!type.isEmpty()) {
         return {
             {"isVideo", true},
@@ -668,7 +669,8 @@ MessagesAdapter::getMediaInfo(const QString& msg)
     } else {
         static const QRegExp aPattern("(audio/)(ogg|flac|wav|mpeg|mp3)$", Qt::CaseInsensitive);
         aPattern.indexIn(mime.name());
-        type = aPattern.capturedTexts().size() == 3 ? aPattern.capturedTexts()[1] : "";
+        captured = aPattern.capturedTexts();
+        type = captured.size() == 3 ? captured[1] : "";
         if (!type.isEmpty()) {
             return {
                 {"isVideo", false},
@@ -684,9 +686,10 @@ bool
 MessagesAdapter::isRemoteImage(const QString& msg)
 {
     // TODO: test if all these open in the AnimatedImage component
-    QRegularExpression pattern("[^\\s]+(.*?)\\.(jpg|jpeg|png|gif|apng|webp|avif|flif)$",
-                               QRegularExpression::CaseInsensitiveOption);
-    QRegularExpressionMatch match = pattern.match(msg);
+    const static QRegularExpression
+        imageRe("[^\\s]+(.*?)\\.(jpg|jpeg|png|gif|apng|webp|avif|flif)$",
+                QRegularExpression::CaseInsensitiveOption);
+    QRegularExpressionMatch match = imageRe.match(msg);
     return match.hasMatch();
 }
 
diff --git a/src/app/pluginlistmodel.cpp b/src/app/pluginlistmodel.cpp
index 4d2752b12..6f6a16c3b 100644
--- a/src/app/pluginlistmodel.cpp
+++ b/src/app/pluginlistmodel.cpp
@@ -114,7 +114,7 @@ PluginListModel::addPlugin()
         return;
 
     int index = 0;
-    for (auto item : newList) {
+    for (const auto& item : newList) {
         if (installedPlugins_.indexOf(item) == -1)
             break;
         index++;
@@ -126,17 +126,19 @@ PluginListModel::addPlugin()
 }
 
 void
-PluginListModel::filterPlugins(VectorString& list)
+PluginListModel::filterPlugins(VectorString& list) const
 {
     if (!lrcInstance_ || !filterAccount_)
         return;
 
-    for (auto it = list.begin(); it != list.end();) {
-        auto prefs = lrcInstance_->pluginModel()
-                         .getPluginPreferences(*it, lrcInstance_->get_currentAccountId());
-        if (prefs.empty()) {
-            it = list.erase(it);
-        } else
-            it++;
-    }
+    const auto accountId = lrcInstance_->get_currentAccountId();
+    list.erase(std::remove_if(list.begin(), // clazy:exclude=strict-iterators
+                              list.end(),
+                              [&](const QString& pluginName) -> bool {
+                                  const auto prefs = lrcInstance_->pluginModel()
+                                                         .getPluginPreferences(pluginName,
+                                                                               accountId);
+                                  return prefs.empty();
+                              }),
+               list.cend());
 }
diff --git a/src/app/pluginlistmodel.h b/src/app/pluginlistmodel.h
index 288ac2c40..b0bbbd9fa 100644
--- a/src/app/pluginlistmodel.h
+++ b/src/app/pluginlistmodel.h
@@ -53,6 +53,6 @@ public:
     Q_INVOKABLE void addPlugin();
 
 private:
-    void filterPlugins(VectorString& list);
+    void filterPlugins(VectorString& list) const;
     VectorString installedPlugins_ {};
 };
diff --git a/src/app/pluginlistpreferencemodel.cpp b/src/app/pluginlistpreferencemodel.cpp
index d8283cc1a..ba34987f8 100644
--- a/src/app/pluginlistpreferencemodel.cpp
+++ b/src/app/pluginlistpreferencemodel.cpp
@@ -36,8 +36,8 @@ PluginListPreferenceModel::populateLists()
     if (pluginId_.isEmpty())
         return;
     auto preferences = lrcInstance_->pluginModel().getPluginPreferences(pluginId_, "");
-    if (!accountId__.isEmpty())
-        preferences.append(lrcInstance_->pluginModel().getPluginPreferences(pluginId_, accountId__));
+    if (!accountId_.isEmpty())
+        preferences.append(lrcInstance_->pluginModel().getPluginPreferences(pluginId_, accountId_));
     for (const auto& preference : preferences) {
         if (preference["key"] == preferenceKey_) {
             if (preference.find("entries") != preference.end()
@@ -61,14 +61,6 @@ PluginListPreferenceModel::rowCount(const QModelIndex& parent) const
     return 0;
 }
 
-int
-PluginListPreferenceModel::columnCount(const QModelIndex& parent) const
-{
-    Q_UNUSED(parent);
-    /// Only need one column.
-    return 1;
-}
-
 QVariant
 PluginListPreferenceModel::data(const QModelIndex& index, int role) const
 {
diff --git a/src/app/pluginlistpreferencemodel.h b/src/app/pluginlistpreferencemodel.h
index fc280d825..f3a25cbed 100644
--- a/src/app/pluginlistpreferencemodel.h
+++ b/src/app/pluginlistpreferencemodel.h
@@ -25,11 +25,12 @@
 class PluginListPreferenceModel : public AbstractListModelBase
 {
     Q_OBJECT
-    Q_PROPERTY(QString preferenceNewValue READ preferenceNewValue WRITE setPreferenceNewValue)
-    Q_PROPERTY(QString pluginId READ pluginId WRITE setPluginId)
+    Q_PROPERTY(QString preferenceNewValue READ preferenceNewValue WRITE setPreferenceNewValue NOTIFY
+                   preferenceNewValueChanged)
+    Q_PROPERTY(QString pluginId READ pluginId WRITE setPluginId NOTIFY pluginIdChanged)
     QML_PROPERTY(QString, preferenceKey)
     QML_PROPERTY(int, idx)
-    QML_PROPERTY(QString, accountId_)
+    QML_PROPERTY(QString, accountId)
 public:
     enum Role { PreferenceValue = Qt::UserRole + 1, PreferenceEntryValue };
     Q_ENUM(Role)
@@ -37,43 +38,40 @@ public:
     explicit PluginListPreferenceModel(QObject* parent = nullptr);
     ~PluginListPreferenceModel();
 
-    /*
-     * QAbstractListModel override.
-     */
+    // QAbstractListModel override.
     int rowCount(const QModelIndex& parent = QModelIndex()) const override;
-    int columnCount(const QModelIndex& parent) const override;
     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
-    /*
-     * Override role name as access point in qml.
-     */
     QHash<int, QByteArray> roleNames() const override;
 
-    /*
-     * This function is to reset the model when there's new account added.
-     */
+    // This function is to reset the model when there's new account added.
     Q_INVOKABLE void reset();
-    /*
-     * This function is to get the current preference value
-     */
+
+    // This function is to get the current preference value.
     Q_INVOKABLE int getCurrentSettingIndex();
 
     Q_INVOKABLE void populateLists();
 
     void setPreferenceNewValue(const QString preferenceNewValue)
     {
-        preferenceNewValue_ = preferenceNewValue;
+        if (preferenceNewValue_ != preferenceNewValue) {
+            preferenceNewValue_ = preferenceNewValue;
+            Q_EMIT preferenceNewValueChanged();
+        }
     }
 
     void setPluginId(const QString pluginId)
     {
-        pluginId_ = pluginId;
-        populateLists();
+        if (pluginId_ != pluginId) {
+            pluginId_ = pluginId;
+            populateLists();
+            Q_EMIT pluginIdChanged();
+        }
     }
 
     QString preferenceCurrentValue()
     {
         return lrcInstance_->pluginModel().getPluginPreferencesValues(pluginId_,
-                                                                      accountId__)[preferenceKey_];
+                                                                      accountId_)[preferenceKey_];
     }
 
     QString preferenceNewValue()
@@ -87,9 +85,13 @@ public:
         return pluginId_;
     }
 
+Q_SIGNALS:
+    void preferenceNewValueChanged();
+    void pluginIdChanged();
+
 private:
-    QString pluginId_ = "";
-    QString preferenceNewValue_ = "";
+    QString pluginId_ {};
+    QString preferenceNewValue_ {};
     QStringList preferenceValuesList_;
     QStringList preferenceList_;
 };
diff --git a/src/app/positionmanager.cpp b/src/app/positionmanager.cpp
index 5d03dd2d3..91c072669 100644
--- a/src/app/positionmanager.cpp
+++ b/src/app/positionmanager.cpp
@@ -95,21 +95,19 @@ PositionManager::isConvSharingPosition(const QString& accountId, const QString&
 void
 PositionManager::loadPreviousLocations(QString& accountId)
 {
-    QVariantMap shareInfo;
     for (auto it = objectListSharingUris_.begin(); it != objectListSharingUris_.end(); it++) {
-        if (it.key().first == accountId) {
-            QJsonObject jsonObj;
-            jsonObj.insert("type", QJsonValue("Position"));
-            jsonObj.insert("lat", it.value()->getLatitude().toString());
-            jsonObj.insert("long", it.value()->getLongitude().toString());
-            QJsonDocument doc(jsonObj);
-            QString strJson(doc.toJson(QJsonDocument::Compact));
-            // parse the position from json
-            QVariantMap positionReceived = parseJsonPosition(it.key().first,
-                                                             it.key().second,
-                                                             strJson);
-            addPositionToMap(it.key(), positionReceived);
+        if (it.key().first != accountId) {
+            continue;
         }
+        QJsonObject jsonObj;
+        jsonObj.insert("type", QJsonValue("Position"));
+        jsonObj.insert("lat", it.value()->getLatitude().toString());
+        jsonObj.insert("long", it.value()->getLongitude().toString());
+        QJsonDocument doc(jsonObj);
+        QString strJson(doc.toJson(QJsonDocument::Compact));
+        // parse the position from json
+        QVariantMap positionReceived = parseJsonPosition(it.key().first, it.key().second, strJson);
+        addPositionToMap(it.key(), positionReceived);
     }
 }
 
@@ -177,7 +175,7 @@ PositionManager::onWatchdogTimeout()
     if (it != objectListSharingUris_.cend()) {
         QString stopMsg("{\"type\":\"Stop\"}");
         onPositionReceived(it.key().first, it.key().second, stopMsg, -1, "");
-        makeVisibleSharingButton(it.key().first);
+        Q_EMIT makeVisibleSharingButton(it.key().first);
     }
 }
 
@@ -211,9 +209,10 @@ PositionManager::stopSharingPosition(QString accountId, const QString convId)
                     key = qMakePair(accountId, it->second);
                     stopPositionTimers(key);
                     sendStopMessage(accountId, it->second);
-                    it = positionShareConvIds_.erase(it);
-                } else
+                    it = positionShareConvIds_.erase(it); // clazy:exclude=strict-iterators
+                } else {
                     ++it;
+                }
             }
         } else {
             stopPositionTimers(key);
@@ -313,7 +312,6 @@ PositionManager::setMapActive(QString key)
 QString
 PositionManager::getAvatar(const QString& accountId, const QString& uri)
 {
-    QString avatarBase64;
     QByteArray ba;
     QBuffer bu(&ba);
 
@@ -373,8 +371,8 @@ PositionManager::stopPositionTimers(PositionKey key)
     if (key == PositionKey()) {
         mapTimerCountDown_.clear();
     } else {
-        auto it = mapTimerCountDown_.find(key);
-        if (it != mapTimerCountDown_.end()) {
+        auto it = mapTimerCountDown_.constFind(key);
+        if (it != mapTimerCountDown_.cend()) {
             mapTimerCountDown_.erase(it);
         }
         if (!mapTimerCountDown_.size())
@@ -409,11 +407,11 @@ PositionManager::showNotification(const QString& accountId,
     auto body = tr("%1 is sharing their location").arg(bestName);
 #ifdef Q_OS_LINUX
     auto contactPhoto = Utils::contactPhoto(lrcInstance_, from, QSize(50, 50), accountId);
-    auto notifId = QString("%1;%2;%3").arg(accountId).arg(convId).arg(from);
+    auto notifId = QString("%1;%2;%3").arg(accountId, convId, from);
     systemTray_->showNotification(notifId,
                                   tr("Location sharing"),
                                   body,
-                                  NotificationType::CHAT,
+                                  SystemTray::NotificationType::CHAT,
                                   Utils::QImageToByteArray(contactPhoto));
 
 #else
@@ -441,7 +439,7 @@ PositionManager::onNewAccount()
     for (auto it = mapStatus_.begin(); it != mapStatus_.end();) {
         if (it.value() == false) {
             Q_EMIT closeMap(it.key());
-            it = mapStatus_.erase(it);
+            it = mapStatus_.erase(it); // clazy:exclude=strict-iterators
             Q_EMIT mapStatusChanged();
         } else {
             it++;
@@ -564,8 +562,8 @@ void
 PositionManager::removePositionFromMemory(PositionKey key, QVariantMap positionReceived)
 {
     // Remove
-    auto it = objectListSharingUris_.find(key);
-    if (it != objectListSharingUris_.end()) {
+    auto it = objectListSharingUris_.constFind(key);
+    if (it != objectListSharingUris_.cend()) {
         // free memory
         it.value()->deleteLater();
         // delete value
@@ -596,7 +594,8 @@ PositionManager::onPositionReceived(const QString& accountId,
                                     const uint64_t& timestamp,
                                     const QString& daemonId)
 {
-    // handlers variables
+    Q_UNUSED(timestamp)
+    Q_UNUSED(daemonId)
 
     // parse the position from json
     QVariantMap positionReceived = parseJsonPosition(accountId, peerId, body);
diff --git a/src/app/preferenceitemlistmodel.cpp b/src/app/preferenceitemlistmodel.cpp
index 245a2810f..80527fc50 100644
--- a/src/app/preferenceitemlistmodel.cpp
+++ b/src/app/preferenceitemlistmodel.cpp
@@ -48,14 +48,6 @@ PreferenceItemListModel::rowCount(const QModelIndex& parent) const
     return 0;
 }
 
-int
-PreferenceItemListModel::columnCount(const QModelIndex& parent) const
-{
-    Q_UNUSED(parent);
-    /// Only need one column.
-    return 1;
-}
-
 QVariant
 PreferenceItemListModel::data(const QModelIndex& index, int role) const
 {
@@ -71,7 +63,7 @@ PreferenceItemListModel::data(const QModelIndex& index, int role) const
 
     auto details = preferenceList_.at(index.row());
     preferenceCurrent = lrcInstance_->pluginModel()
-                            .getPluginPreferencesValues(pluginId__, accountId__)[details["key"]];
+                            .getPluginPreferencesValues(pluginId_, accountId_)[details["key"]];
     auto it = mapType.find(details["type"]);
     if (it != mapType.end()) {
         type = mapType[details["type"]];
@@ -88,10 +80,9 @@ PreferenceItemListModel::data(const QModelIndex& index, int role) const
         }
     }
     const auto dependsOn = details["dependsOn"].split(",");
-    const auto preferences = lrcInstance_->pluginModel().getPluginPreferences(pluginId__,
-                                                                              accountId__);
-    const auto prefValues = lrcInstance_->pluginModel().getPluginPreferencesValues(pluginId__,
-                                                                                   accountId__);
+    const auto preferences = lrcInstance_->pluginModel().getPluginPreferences(pluginId_, accountId_);
+    const auto prefValues = lrcInstance_->pluginModel().getPluginPreferencesValues(pluginId_,
+                                                                                   accountId_);
     bool enabled = true;
     for (auto& preference : preferences) {
         auto key = preference["key"];
@@ -119,7 +110,7 @@ PreferenceItemListModel::data(const QModelIndex& index, int role) const
     case Role::PreferenceType:
         return QVariant(type);
     case Role::PluginId:
-        return QVariant(pluginId__);
+        return QVariant(pluginId_);
     case Role::PreferenceCurrentValue:
         return QVariant(preferenceCurrent);
     case Role::CurrentPath:
@@ -162,19 +153,23 @@ PreferenceItemListModel::reset()
 }
 
 QString
-PreferenceItemListModel::pluginId_() const
+PreferenceItemListModel::pluginId() const
 {
-    return pluginId__;
+    return pluginId_;
 }
 
 void
 PreferenceItemListModel::setPluginId(const QString& pluginId)
 {
-    beginResetModel();
-    pluginId__ = pluginId;
-    preferenceList_.clear();
-    preferencesCount();
-    endResetModel();
+    if (pluginId_ != pluginId) {
+        beginResetModel();
+        pluginId_ = pluginId;
+        preferenceList_.clear();
+        preferencesCount();
+        endResetModel();
+
+        Q_EMIT pluginIdChanged();
+    }
 }
 
 int
@@ -182,23 +177,22 @@ PreferenceItemListModel::preferencesCount()
 {
     if (!preferenceList_.isEmpty())
         return preferenceList_.size();
-    if (mediaHandlerName__.isEmpty()) {
-        auto preferences = lrcInstance_->pluginModel().getPluginPreferences(pluginId__, accountId__);
-        if (category__ != "all")
+    if (mediaHandlerName_.isEmpty()) {
+        auto preferences = lrcInstance_->pluginModel().getPluginPreferences(pluginId_, accountId_);
+        if (category_ != "all")
             for (auto& preference : preferences) {
-                if (preference["category"] == category__)
+                if (preference["category"] == category_)
                     preferenceList_.push_back(preference);
             }
         else
             preferenceList_ = preferences;
         return preferenceList_.size();
     } else {
-        auto preferences = lrcInstance_->pluginModel().getPluginPreferences(pluginId__, "");
-        preferences.append(
-            lrcInstance_->pluginModel().getPluginPreferences(pluginId__, accountId__));
+        auto preferences = lrcInstance_->pluginModel().getPluginPreferences(pluginId_, "");
+        preferences.append(lrcInstance_->pluginModel().getPluginPreferences(pluginId_, accountId_));
         for (auto& preference : preferences) {
             QStringList scopeList = preference["scope"].split(",");
-            if (scopeList.contains(mediaHandlerName__))
+            if (scopeList.contains(mediaHandlerName_))
                 preferenceList_.push_back(preference);
         }
         return preferenceList_.size();
diff --git a/src/app/preferenceitemlistmodel.h b/src/app/preferenceitemlistmodel.h
index 121f325b4..c556c2de2 100644
--- a/src/app/preferenceitemlistmodel.h
+++ b/src/app/preferenceitemlistmodel.h
@@ -26,10 +26,10 @@ class PreferenceItemListModel : public AbstractListModelBase
 {
     Q_OBJECT
 
-    Q_PROPERTY(QString pluginId_ READ pluginId_ WRITE setPluginId)
-    QML_PROPERTY(QString, category_)
-    QML_PROPERTY(QString, mediaHandlerName_)
-    QML_PROPERTY(QString, accountId_)
+    Q_PROPERTY(QString pluginId READ pluginId WRITE setPluginId NOTIFY pluginIdChanged)
+    QML_PROPERTY(QString, category)
+    QML_PROPERTY(QString, mediaHandlerName)
+    QML_PROPERTY(QString, accountId)
 public:
     enum Role {
         PreferenceKey = Qt::UserRole + 1,
@@ -58,28 +58,23 @@ public:
     explicit PreferenceItemListModel(QObject* parent = nullptr);
     ~PreferenceItemListModel();
 
-    /*
-     * QAbstractListModel override.
-     */
+    // QAbstractListModel override.
     int rowCount(const QModelIndex& parent = QModelIndex()) const override;
-    int columnCount(const QModelIndex& parent) const override;
     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
-    /*
-     * Override role name as access point in qml.
-     */
     QHash<int, QByteArray> roleNames() const override;
 
-    /*
-     * This function is to reset the model when there's new plugin added or modified.
-     */
+    // This function is to reset the model when there's new plugin added or modified.
     Q_INVOKABLE void reset();
 
-    QString pluginId_() const;
+    QString pluginId() const;
     void setPluginId(const QString& pluginId);
 
+Q_SIGNALS:
+    void pluginIdChanged();
+
 private:
     int preferencesCount();
 
-    QString pluginId__;
+    QString pluginId_;
     VectorMapStringString preferenceList_;
 };
diff --git a/src/app/settingsview/components/PluginItemDelegate.qml b/src/app/settingsview/components/PluginItemDelegate.qml
index af5ee09ee..e273d8772 100644
--- a/src/app/settingsview/components/PluginItemDelegate.qml
+++ b/src/app/settingsview/components/PluginItemDelegate.qml
@@ -117,6 +117,8 @@ ItemDelegate {
         PluginPreferencesView {
             id: pluginPreferencesView
 
+            pluginId: root.pluginId
+
             Layout.fillWidth: true
             Layout.leftMargin: JamiTheme.preferredMarginSize
             Layout.rightMargin: JamiTheme.preferredMarginSize
diff --git a/src/app/settingsview/components/PluginPreferencesListView.qml b/src/app/settingsview/components/PluginPreferencesListView.qml
index 31c85ce65..ec5aaf823 100644
--- a/src/app/settingsview/components/PluginPreferencesListView.qml
+++ b/src/app/settingsview/components/PluginPreferencesListView.qml
@@ -27,6 +27,8 @@ Rectangle {
     id: root
 
     property string accountId: ""
+    required property string pluginId
+
     property int count: pluginPreferenceView.count + pluginPreferenceViewCategory.count
 
     implicitHeight: childrenRect.height
@@ -127,7 +129,7 @@ Rectangle {
                     visible: categories.length % 2 === 1
 
                     text: categories[categories.length - 1]
-                    highlighted: category === text
+                    highlighted: root.category === text
 
                     onClicked: {
                         root.category = oddCategoryButton.text;
@@ -158,11 +160,11 @@ Rectangle {
                     model: PreferenceItemListModel {
                         id: preferencesPerCategoryModel
                         lrcInstance: LRCInstance
-                        category_: category
-                        accountId_: accountId
-                        pluginId_: pluginId
+                        category: root.category
+                        accountId: root.accountId
+                        pluginId: root.pluginId
 
-                        onCategory_Changed: {
+                        onCategoryChanged: {
                             this.reset();
                         }
                     }
@@ -189,7 +191,7 @@ Rectangle {
 
                             lrcInstance: LRCInstance
                             preferenceKey: PreferenceKey
-                            accountId_: accountId
+                            accountId: root.accountId
                             pluginId: PluginId
                         }
 
@@ -217,11 +219,11 @@ Rectangle {
             model: PreferenceItemListModel {
                 id: generalPreferencesModel
                 lrcInstance: LRCInstance
-                category_: generalCategory
-                accountId_: accountId
-                pluginId_: pluginId
+                category: generalCategory
+                accountId: root.accountId
+                pluginId: root.pluginId
 
-                onCategory_Changed: {
+                onCategoryChanged: {
                     this.reset();
                 }
             }
@@ -248,7 +250,7 @@ Rectangle {
 
                     lrcInstance: LRCInstance
                     preferenceKey: PreferenceKey
-                    accountId_: accountId
+                    accountId: root.accountId
                     pluginId: PluginId
                 }
 
diff --git a/src/app/settingsview/components/PluginPreferencesView.qml b/src/app/settingsview/components/PluginPreferencesView.qml
index 809313ae4..a1f188aa1 100644
--- a/src/app/settingsview/components/PluginPreferencesView.qml
+++ b/src/app/settingsview/components/PluginPreferencesView.qml
@@ -26,6 +26,8 @@ import "../../commoncomponents"
 Rectangle {
     id: root
 
+    required property string pluginId
+
     color: "transparent"
 
     visible: false
@@ -104,6 +106,7 @@ Rectangle {
             id: pluginGeneralSettingsView
             visible: false
             Layout.fillWidth: true
+            pluginId: root.pluginId
         }
 
         RowLayout {
@@ -147,6 +150,7 @@ Rectangle {
             visible: false
             Layout.fillWidth: true
             accountId: LRCInstance.currentAccountId
+            pluginId: root.pluginId
         }
 
         MaterialButton {
diff --git a/src/app/systemtray.cpp b/src/app/systemtray.cpp
index 32420aca7..568c66a1e 100644
--- a/src/app/systemtray.cpp
+++ b/src/app/systemtray.cpp
@@ -107,10 +107,7 @@ SystemTray::SystemTray(AppSettingsManager* settingsManager, QObject* parent)
 
     if (notify_get_server_info(&name, &vendor, &version, &spec)) {
         qDebug() << QString("notify server name: %1, vendor: %2, version: %3, spec: %4")
-                        .arg(name)
-                        .arg(vendor)
-                        .arg(version)
-                        .arg(spec);
+                        .arg(name, vendor, version, spec);
     }
 
     // check  notify server capabilities
diff --git a/src/app/systemtray.h b/src/app/systemtray.h
index 1f49f3734..219ac94fb 100644
--- a/src/app/systemtray.h
+++ b/src/app/systemtray.h
@@ -22,11 +22,6 @@
 
 #include <functional>
 
-#ifdef Q_OS_LINUX
-enum class NotificationType { INVALID, CALL, REQUEST, CHAT };
-Q_ENUMS(NotificationType)
-#endif // Q_OS_LINUX
-
 class AppSettingsManager;
 
 class SystemTray final : public QSystemTrayIcon
@@ -34,6 +29,11 @@ class SystemTray final : public QSystemTrayIcon
     Q_OBJECT
 
 public:
+#ifdef Q_OS_LINUX
+    enum NotificationType {INVALID, CALL, REQUEST, CHAT};
+    Q_ENUM(NotificationType)
+#endif // Q_OS_LINUX
+
     explicit SystemTray(AppSettingsManager* settingsManager, QObject* parent = nullptr);
     ~SystemTray();
 
diff --git a/src/app/utils.cpp b/src/app/utils.cpp
index 945e3aba2..1dfd8cf7e 100644
--- a/src/app/utils.cpp
+++ b/src/app/utils.cpp
@@ -480,7 +480,6 @@ Utils::conversationAvatar(LRCInstance* instance,
             return avatar;
         }
         // Else, combine avatars
-        auto idx = 0;
         auto peerAAvatar = getPhoto(members[0]);
         auto peerBAvatar = getPhoto(members[1]);
         peerAAvatar = Utils::halfCrop(peerAAvatar, true);
@@ -712,7 +711,8 @@ Utils::fallbackAvatar(const QString& canonicalUri, const QString& name, const QS
     // if a letter was passed, then we paint a letter in the circle,
     // otherwise we draw the default avatar icon
     QString trimmedName(name);
-    if (!trimmedName.remove(QRegularExpression("[\\n\\t\\r]")).isEmpty()) {
+    const static QRegularExpression newlineRe("[\\n\\t\\r]");
+    if (!trimmedName.remove(newlineRe).isEmpty()) {
         auto unicode = trimmedName.toUcs4().at(0);
         if (unicode >= 0x1F000 && unicode <= 0x1FFFF) {
             // emoticon
diff --git a/src/app/utilsadapter.cpp b/src/app/utilsadapter.cpp
index 2fc06a923..eefb34e4e 100644
--- a/src/app/utilsadapter.cpp
+++ b/src/app/utilsadapter.cpp
@@ -132,15 +132,13 @@ const QString
 UtilsAdapter::getStyleSheet(const QString& name, const QString& source)
 {
     auto simplifiedCSS = source.simplified().replace("'", "\"");
-    QString s = QString::fromLatin1("(function() {"
-                                    "    var node = document.createElement('style');"
-                                    "    node.id = '%1';"
-                                    "    node.innerHTML = '%2';"
-                                    "    document.head.appendChild(node);"
-                                    "})()")
-                    .arg(name)
-                    .arg(simplifiedCSS);
-    return s;
+    static auto baseScript = QString::fromLatin1("(function() {"
+                                                 "    var node = document.createElement('style');"
+                                                 "    node.id = '%1';"
+                                                 "    node.innerHTML = '%2';"
+                                                 "    document.head.appendChild(node);"
+                                                 "})()");
+    return baseScript.arg(name, simplifiedCSS);
 }
 
 const QString
@@ -315,20 +313,6 @@ UtilsAdapter::getCallStatusStr(int statusInt)
     return lrc::api::call::to_string(status);
 }
 
-// returns true if name is valid registered name
-bool
-UtilsAdapter::validateRegNameForm(const QString& regName)
-{
-    QRegularExpression regExp(" ");
-
-    if (regName.size() > 2 && !regName.contains(regExp)) {
-        return true;
-
-    } else {
-        return false;
-    }
-}
-
 QString
 UtilsAdapter::getStringUTF8(QString string)
 {
@@ -377,15 +361,14 @@ UtilsAdapter::toFileAbsolutepath(QString inputFileName)
 QString
 UtilsAdapter::getAbsPath(QString path)
 {
+    static auto fileSchemeRe = QRegularExpression("^file:\\/{2,3}");
     // Note: this function is used on urls returned from qml-FileDialogs which
     // contain 'file:///' for reasons we don't understand.
     // TODO: this logic can be refactored into the JamiFileDialog component.
 #ifdef Q_OS_WIN
-    return path.replace(QRegularExpression("^file:\\/{2,3}"), "").replace("\n", "").replace("\r", "");
+    return path.replace(fileSchemeRe, "").replace("\n", "").replace("\r", "");
 #else
-    return path.replace(QRegularExpression("^file:\\/{2,3}"), "/")
-        .replace("\n", "")
-        .replace("\r", "");
+    return path.replace(fileSchemeRe, "/").replace("\n", "").replace("\r", "");
 #endif
 }
 
@@ -508,6 +491,7 @@ UtilsAdapter::monitor(const bool& continuous)
         debugMessageReceivedConnection_
             = QObject::connect(&lrcInstance_->behaviorController(),
                                &lrc::api::BehaviorController::debugMessageReceived,
+                               this,
                                [this](const QString& data) {
                                    logList_.append(data);
                                    if (logList_.size() >= LOGSLIMIT) {
@@ -549,15 +533,15 @@ UtilsAdapter::supportedLang()
     QRegExp regex("jami_client_qt_(.*).qm");
     QSet<QString> nativeNames;
     for (const auto& f : trFiles) {
-        auto match = regex.indexIn(f);
-        if (regex.capturedTexts().size() == 2) {
-            auto l = regex.capturedTexts()[1];
-            auto nativeName = QLocale(l).nativeLanguageName();
+        regex.indexIn(f);
+        auto captured = regex.capturedTexts();
+        if (captured.size() == 2) {
+            auto nativeName = QLocale(captured[1]).nativeLanguageName();
             if (nativeName.isEmpty()) // If a locale doesn't have any nativeLanguageName, ignore it.
                 continue;
             // Avoid to show potential duplicates.
             if (!nativeNames.contains(nativeName)) {
-                result[l] = nativeName;
+                result[captured[1]] = nativeName;
                 nativeNames.insert(nativeName);
             }
         }
@@ -817,4 +801,4 @@ UtilsAdapter::isRTL()
     auto pref = getAppValue(Settings::Key::LANG).toString();
     pref == "SYSTEM" ? QLocale::system().name() : pref;
     return pref == "ar" || pref == "he" || pref == "fa" || pref == "ur";
-}
\ No newline at end of file
+}
diff --git a/src/app/utilsadapter.h b/src/app/utilsadapter.h
index d53bd9f38..446b4d9f7 100644
--- a/src/app/utilsadapter.h
+++ b/src/app/utilsadapter.h
@@ -105,7 +105,6 @@ public:
     Q_INVOKABLE int getCallStatus(const QString& callId);
     Q_INVOKABLE const QString getCallStatusStr(int statusInt);
     Q_INVOKABLE QString getStringUTF8(QString string);
-    Q_INVOKABLE bool validateRegNameForm(const QString& regName);
     Q_INVOKABLE QString getRecordQualityString(int value);
     Q_INVOKABLE QString getCurrentPath();
     Q_INVOKABLE QString stringSimplifier(QString input);
-- 
GitLab