diff options
author | saturneric <[email protected]> | 2025-04-19 01:39:02 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2025-04-19 02:17:36 +0000 |
commit | be1f218314242fdf7c0fac76d32e2b9f16b5b6fe (patch) | |
tree | 2a56f13ca42170fab7837d03921155f621ad764b | |
parent | fix: find pinentry under /app/bin in flatpak container (diff) | |
download | GpgFrontend-be1f218314242fdf7c0fac76d32e2b9f16b5b6fe.tar.gz GpgFrontend-be1f218314242fdf7c0fac76d32e2b9f16b5b6fe.zip |
fix: find out adsk problem of flatpak
-rw-r--r-- | src/core/function/gpg/GpgKeyGetter.cpp | 6 | ||||
-rw-r--r-- | src/core/model/GpgKeyTableModel.h | 2 | ||||
-rw-r--r-- | src/core/model/GpgKeyTreeModel.cpp | 10 | ||||
-rw-r--r-- | src/core/model/GpgKeyTreeModel.h | 2 | ||||
-rw-r--r-- | src/ui/dialog/keypair_details/KeyPairDetailTab.cpp | 1 |
5 files changed, 18 insertions, 3 deletions
diff --git a/src/core/function/gpg/GpgKeyGetter.cpp b/src/core/function/gpg/GpgKeyGetter.cpp index 3419c18d..9fb0f6db 100644 --- a/src/core/function/gpg/GpgKeyGetter.cpp +++ b/src/core/function/gpg/GpgKeyGetter.cpp @@ -46,6 +46,8 @@ class GpgKeyGetter::Impl : public SingletonFunctionObject<GpgKeyGetter::Impl> { // find in cache first if (cache) { auto key = get_key_in_cache(key_id); + assert(key->KeyType() == GpgAbstractKeyType::kGPG_KEY); + if (key != nullptr) return qSharedPointerDynamicCast<GpgKey>(key); LOG_W() << "get gpg key" << key_id @@ -164,6 +166,10 @@ class GpgKeyGetter::Impl : public SingletonFunctionObject<GpgKeyGetter::Impl> { for (const auto& s_key : g_key->SubKeys()) { if (s_key.ID() == g_key->ID()) continue; auto p_s_key = QSharedPointer<GpgSubKey>::create(s_key); + + // don't add adsk key or it will cause bugs + if (p_s_key->IsADSK()) continue; + keys_search_cache_.insert(s_key.ID(), p_s_key); keys_search_cache_.insert(s_key.Fingerprint(), p_s_key); } diff --git a/src/core/model/GpgKeyTableModel.h b/src/core/model/GpgKeyTableModel.h index d5cecf14..60410a79 100644 --- a/src/core/model/GpgKeyTableModel.h +++ b/src/core/model/GpgKeyTableModel.h @@ -151,7 +151,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyTableItem { private: GpgAbstractKeyPtr key_; - bool checked_; + bool checked_ = false; }; class GPGFRONTEND_CORE_EXPORT GpgKeyTableModel : public QAbstractTableModel { diff --git a/src/core/model/GpgKeyTreeModel.cpp b/src/core/model/GpgKeyTreeModel.cpp index f521e8c9..0f5fbd25 100644 --- a/src/core/model/GpgKeyTreeModel.cpp +++ b/src/core/model/GpgKeyTreeModel.cpp @@ -222,9 +222,13 @@ auto GpgKeyTreeModel::create_gpg_key_tree_items(const GpgAbstractKeyPtr &key) auto i_key = QSharedPointer<GpgKeyTreeItem>::create(key, columns); i_key->SetEnable(true); i_key->SetCheckable(checkable_detector_(i_key->Key())); + i_key->SetChecked(false); cached_items_.push_back(i_key); for (const auto &s_key : g_key->SubKeys()) { + // avoid bugs due to duplicate key ids + if (g_key->ID() == s_key.ID() || s_key.IsADSK()) continue; + QVariantList columns; columns << "/"; columns << (s_key.IsHasCertCap() ? "primary" : "sub"); @@ -239,6 +243,7 @@ auto GpgKeyTreeModel::create_gpg_key_tree_items(const GpgAbstractKeyPtr &key) QSharedPointer<GpgSubKey>::create(s_key), columns); i_s_key->SetEnable(true); i_s_key->SetCheckable(checkable_detector_(i_s_key->Key())); + i_s_key->SetChecked(false); i_key->AppendChild(i_s_key); cached_items_.push_back(i_s_key); } @@ -254,6 +259,10 @@ auto GpgKeyTreeModel::GetAllCheckedSubKey() -> QContainer<GpgSubKey> { continue; } + LOG_D() << "subkey checked: " << i->Key()->ID() + << "uid: " << i->Key()->UID() << "checkable: " << i->Checkable() + << "checked: " << i->Checked(); + auto *s_key = dynamic_cast<GpgSubKey *>(i->Key()); if (s_key == nullptr) continue; @@ -267,6 +276,7 @@ auto GpgKeyTreeModel::GetKeyByIndex(QModelIndex index) -> GpgAbstractKey * { const auto *item = static_cast<const GpgKeyTreeItem *>(index.internalPointer()); + assert(item != nullptr); return item->Key(); } diff --git a/src/core/model/GpgKeyTreeModel.h b/src/core/model/GpgKeyTreeModel.h index bc27d2bd..a23ae921 100644 --- a/src/core/model/GpgKeyTreeModel.h +++ b/src/core/model/GpgKeyTreeModel.h @@ -231,7 +231,7 @@ class GPGFRONTEND_CORE_EXPORT GpgKeyTreeItem { private: QContainer<QSharedPointer<GpgKeyTreeItem>> children_; QVariantList data_; - bool checked_; + bool checked_ = false; bool checkable_; bool enable_; QSharedPointer<GpgAbstractKey> key_; diff --git a/src/ui/dialog/keypair_details/KeyPairDetailTab.cpp b/src/ui/dialog/keypair_details/KeyPairDetailTab.cpp index 72a9a7c8..1ac087d2 100644 --- a/src/ui/dialog/keypair_details/KeyPairDetailTab.cpp +++ b/src/ui/dialog/keypair_details/KeyPairDetailTab.cpp @@ -274,7 +274,6 @@ void KeyPairDetailTab::slot_refresh_key() { assert(refreshed_key != nullptr); std::swap(this->key_, refreshed_key); - this->slot_refresh_key_info(); } |