diff options
author | saturneric <[email protected]> | 2024-11-02 15:36:57 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2024-11-02 15:36:57 +0000 |
commit | 170b29aca537fc79837939cca67f8913964445c1 (patch) | |
tree | d7858dcd485a6a9d273c76ffe7179f6a2ef2d197 /src/ui/UserInterfaceUtils.cpp | |
parent | fix: should select channel before any gpg operation (diff) | |
download | GpgFrontend-170b29aca537fc79837939cca67f8913964445c1.tar.gz GpgFrontend-170b29aca537fc79837939cca67f8913964445c1.zip |
feat: support favorite key pairs for multi key databases
Diffstat (limited to 'src/ui/UserInterfaceUtils.cpp')
-rw-r--r-- | src/ui/UserInterfaceUtils.cpp | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/src/ui/UserInterfaceUtils.cpp b/src/ui/UserInterfaceUtils.cpp index 13298d2c..040a57a7 100644 --- a/src/ui/UserInterfaceUtils.cpp +++ b/src/ui/UserInterfaceUtils.cpp @@ -38,6 +38,7 @@ #include "core/model/GpgImportInformation.h" #include "core/model/SettingsObject.h" #include "core/module/ModuleManager.h" +#include "core/struct/cache_object/AllFavoriteKeyPairsCO.h" #include "core/thread/Task.h" #include "core/thread/TaskRunnerGetter.h" #include "core/typedef/GpgTypedef.h" @@ -523,43 +524,53 @@ auto CommonUtils::isApplicationNeedRestart() -> bool { return application_need_to_restart_at_once_; } -auto CommonUtils::KeyExistsinFavouriteList(const GpgKey &key) -> bool { +auto CommonUtils::KeyExistsInFavoriteList(const QString &key_db_name, + const GpgKey &key) -> bool { // load cache - auto json_data = CacheObject("favourite_key_pair"); - if (!json_data.isArray()) json_data.setArray(QJsonArray()); + auto json_data = CacheObject("all_favorite_key_pairs"); + auto cache_obj = AllFavoriteKeyPairsCO(json_data.object()); - auto key_fpr_array = json_data.array(); - return std::find(key_fpr_array.begin(), key_fpr_array.end(), - key.GetFingerprint()) != key_fpr_array.end(); + if (!cache_obj.key_dbs.contains(key_db_name)) return false; + + auto &key_ids = cache_obj.key_dbs[key_db_name].key_ids; + + return key_ids.contains(key.GetId()); } -void CommonUtils::AddKey2Favourtie(const GpgKey &key) { +void CommonUtils::AddKey2Favorite(const QString &key_db_name, + const GpgKey &key) { { - auto json_data = CacheObject("favourite_key_pair"); - QJsonArray key_array; - if (json_data.isArray()) key_array = json_data.array(); + auto json_data = CacheObject("all_favorite_key_pairs"); + auto cache_obj = AllFavoriteKeyPairsCO(json_data.object()); + + if (!cache_obj.key_dbs.contains(key_db_name)) { + cache_obj.key_dbs[key_db_name] = FavoriteKeyPairsByKeyDatabaseCO(); + } - key_array.push_back(key.GetFingerprint()); - json_data.setArray(key_array); + auto &key_ids = cache_obj.key_dbs[key_db_name].key_ids; + if (!key_ids.contains(key.GetId())) key_ids.append(key.GetId()); + + json_data.setObject(cache_obj.ToJson()); + LOG_D() << "current favorite key pairs: " << json_data; } emit SignalFavoritesChanged(); } -void CommonUtils::RemoveKeyFromFavourite(const GpgKey &key) { +void CommonUtils::RemoveKeyFromFavorite(const QString &key_db_name, + const GpgKey &key) { { - auto json_data = CacheObject("favourite_key_pair"); - QJsonArray key_array; - if (json_data.isArray()) key_array = json_data.array(); - - auto fingerprint = key.GetFingerprint(); - QJsonArray new_key_array; - for (auto &&item : key_array) { - if (item.isString() && item.toString() != fingerprint) { - new_key_array.append(item); - } + auto json_data = CacheObject("all_favorite_key_pairs"); + auto cache_obj = AllFavoriteKeyPairsCO(json_data.object()); + + if (!cache_obj.key_dbs.contains(key_db_name)) return; + + QMutableListIterator<QString> i(cache_obj.key_dbs[key_db_name].key_ids); + while (i.hasNext()) { + if (i.next() == key.GetId()) i.remove(); } - json_data.setArray(new_key_array); + json_data.setObject(cache_obj.ToJson()); + LOG_D() << "current favorite key pairs: " << json_data; } emit SignalFavoritesChanged(); |