aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2025-04-19 01:39:02 +0000
committersaturneric <[email protected]>2025-04-19 02:17:36 +0000
commitbe1f218314242fdf7c0fac76d32e2b9f16b5b6fe (patch)
tree2a56f13ca42170fab7837d03921155f621ad764b
parentfix: find pinentry under /app/bin in flatpak container (diff)
downloadGpgFrontend-be1f218314242fdf7c0fac76d32e2b9f16b5b6fe.tar.gz
GpgFrontend-be1f218314242fdf7c0fac76d32e2b9f16b5b6fe.zip
fix: find out adsk problem of flatpak
-rw-r--r--src/core/function/gpg/GpgKeyGetter.cpp6
-rw-r--r--src/core/model/GpgKeyTableModel.h2
-rw-r--r--src/core/model/GpgKeyTreeModel.cpp10
-rw-r--r--src/core/model/GpgKeyTreeModel.h2
-rw-r--r--src/ui/dialog/keypair_details/KeyPairDetailTab.cpp1
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();
}