aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/utils')
-rw-r--r--src/core/utils/AsyncUtils.cpp28
-rw-r--r--src/core/utils/AsyncUtils.h12
-rw-r--r--src/core/utils/CommonUtils.cpp5
-rw-r--r--src/core/utils/CommonUtils.h10
-rw-r--r--src/core/utils/GpgUtils.cpp32
-rw-r--r--src/core/utils/GpgUtils.h19
6 files changed, 82 insertions, 24 deletions
diff --git a/src/core/utils/AsyncUtils.cpp b/src/core/utils/AsyncUtils.cpp
index a4bc66fa..a3ab9eb8 100644
--- a/src/core/utils/AsyncUtils.cpp
+++ b/src/core/utils/AsyncUtils.cpp
@@ -28,24 +28,20 @@
#include "AsyncUtils.h"
+#include "core/model/DataObject.h"
#include "core/module/ModuleManager.h"
#include "core/thread/Task.h"
#include "core/thread/TaskRunnerGetter.h"
-#include "core/utils/CommonUtils.h"
-#include "model/DataObject.h"
+#include "core/utils/GpgUtils.h"
namespace GpgFrontend {
-auto RunGpgOperaAsync(const GpgOperaRunnable& runnable,
+auto RunGpgOperaAsync(int channel, const GpgOperaRunnable& runnable,
const GpgOperationCallback& callback,
- const QString& operation, const QString& minial_version)
+ const QString& operation, const QString& minimal_version)
-> Thread::Task::TaskHandler {
- const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>(
- "core", "gpgme.ctx.gnupg_version", minial_version);
-
- if (GFCompareSoftwareVersion(gnupg_version, minial_version) < 0) {
- LOG_W() << "operation" << operation
- << " not support for gnupg version: " << gnupg_version;
+ if (!CheckGpgVersion(channel, minimal_version)) {
+ LOG_W() << "operation: " << operation << "is not supported.";
callback(GPG_ERR_NOT_SUPPORTED, TransferParams());
return Thread::Task::TaskHandler(nullptr);
}
@@ -75,15 +71,11 @@ auto RunGpgOperaAsync(const GpgOperaRunnable& runnable,
return handler;
}
-auto RunGpgOperaSync(const GpgOperaRunnable& runnable, const QString& operation,
- const QString& minial_version)
+auto RunGpgOperaSync(int channel, const GpgOperaRunnable& runnable,
+ const QString& operation, const QString& minimal_version)
-> std::tuple<GpgError, DataObjectPtr> {
- const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>(
- "core", "gpgme.ctx.gnupg_version", minial_version);
-
- if (GFCompareSoftwareVersion(gnupg_version, minial_version) < 0) {
- LOG_W() << "operation" << operation
- << " not support for gnupg version: " << gnupg_version;
+ if (!CheckGpgVersion(channel, minimal_version)) {
+ LOG_W() << "operation: " << operation << "is not supported.";
return {GPG_ERR_NOT_SUPPORTED, TransferParams()};
}
diff --git a/src/core/utils/AsyncUtils.h b/src/core/utils/AsyncUtils.h
index eb55cf89..5be3b230 100644
--- a/src/core/utils/AsyncUtils.h
+++ b/src/core/utils/AsyncUtils.h
@@ -41,24 +41,24 @@ namespace GpgFrontend {
* @param runnable
* @param callback
* @param operation
- * @param minial_version
+ * @param minimal_version
*/
auto GPGFRONTEND_CORE_EXPORT
-RunGpgOperaAsync(const GpgOperaRunnable& runnable,
+RunGpgOperaAsync(int channel, const GpgOperaRunnable& runnable,
const GpgOperationCallback& callback, const QString& operation,
- const QString& minial_version) -> Thread::Task::TaskHandler;
+ const QString& minimal_version) -> Thread::Task::TaskHandler;
/**
* @brief
*
* @param runnable
* @param operation
- * @param minial_version
+ * @param minimal_version
* @return std::tuple<GpgError, DataObjectPtr>
*/
auto GPGFRONTEND_CORE_EXPORT RunGpgOperaSync(
- const GpgOperaRunnable& runnable, const QString& operation,
- const QString& minial_version) -> std::tuple<GpgError, DataObjectPtr>;
+ int channel, const GpgOperaRunnable& runnable, const QString& operation,
+ const QString& minimal_version) -> std::tuple<GpgError, DataObjectPtr>;
/**
* @brief
diff --git a/src/core/utils/CommonUtils.cpp b/src/core/utils/CommonUtils.cpp
index ce36c71e..eec5deef 100644
--- a/src/core/utils/CommonUtils.cpp
+++ b/src/core/utils/CommonUtils.cpp
@@ -74,6 +74,11 @@ auto GFCompareSoftwareVersion(const QString& a, const QString& b) -> int {
return 0;
}
+auto GFSoftwareVersionGreaterThan(const QString& a, const QString& b) -> bool {
+ if (a.isEmpty()) return false;
+ return GFCompareSoftwareVersion(a, b) > 0;
+}
+
auto GFStrDup(const QString& s) -> char* {
if (s.isEmpty()) return nullptr;
diff --git a/src/core/utils/CommonUtils.h b/src/core/utils/CommonUtils.h
index d62f4867..b7d18891 100644
--- a/src/core/utils/CommonUtils.h
+++ b/src/core/utils/CommonUtils.h
@@ -90,4 +90,14 @@ auto GPGFRONTEND_CORE_EXPORT ParseHexEncodedVersionTuple(const QString &s)
*/
auto GPGFRONTEND_CORE_EXPORT IsEmailAddress(const QString &) -> bool;
+/**
+ * @brief if a > b
+ *
+ * @param a
+ * @param b
+ * @return auto
+ */
+auto GPGFRONTEND_CORE_EXPORT
+GFSoftwareVersionGreaterThan(const QString &a, const QString &b) -> bool;
+
} // namespace GpgFrontend \ No newline at end of file
diff --git a/src/core/utils/GpgUtils.cpp b/src/core/utils/GpgUtils.cpp
index b8824673..13f6ef05 100644
--- a/src/core/utils/GpgUtils.cpp
+++ b/src/core/utils/GpgUtils.cpp
@@ -30,12 +30,15 @@
#include "core/function/GlobalSettingStation.h"
#include "core/function/gpg/GpgAbstractKeyGetter.h"
+#include "core/function/gpg/GpgComponentInfoGetter.h"
#include "core/model/GpgKey.h"
#include "core/model/GpgKeyGroup.h"
#include "core/model/KeyDatabaseInfo.h"
#include "core/model/SettingsObject.h"
#include "core/module/ModuleManager.h"
#include "core/struct/settings_object/KeyDatabaseListSO.h"
+#include "core/utils/CommonUtils.h"
+
namespace GpgFrontend {
inline auto Trim(QString& s) -> QString { return s.trimmed(); }
@@ -424,4 +427,33 @@ auto GPGFRONTEND_CORE_EXPORT IsKeyGroupID(const KeyId& id) -> bool {
return id.startsWith("#&");
}
+auto GPGFRONTEND_CORE_EXPORT
+GpgAgentVersionGreaterThan(int channel, const QString& v) -> bool {
+ return GFSoftwareVersionGreaterThan(
+ GpgComponentInfoGetter::GetInstance(channel).GetGpgAgentVersion(), v);
+}
+
+auto GPGFRONTEND_CORE_EXPORT CheckGpgVersion(int channel,
+ const QString& v) -> bool {
+ const auto ver =
+ GpgComponentInfoGetter::GetInstance(channel).GetGpgAgentVersion();
+
+ if (ver.isEmpty() || !GFSoftwareVersionGreaterThan(ver, v)) {
+ LOG_W() << "operation not support for gpg-agent version: " << ver
+ << "minimal version: " << v;
+ return false;
+ }
+
+ const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>(
+ "core", "gpgme.ctx.gnupg_version", QString{});
+
+ if (gnupg_version.isEmpty() ||
+ GFCompareSoftwareVersion(gnupg_version, v) < 0) {
+ LOG_W() << "operation not support for gnupg version: " << gnupg_version
+ << "minimal version: " << v;
+ return false;
+ }
+
+ return true;
+}
} // namespace GpgFrontend
diff --git a/src/core/utils/GpgUtils.h b/src/core/utils/GpgUtils.h
index 13612b4f..d0fe1701 100644
--- a/src/core/utils/GpgUtils.h
+++ b/src/core/utils/GpgUtils.h
@@ -202,4 +202,23 @@ auto GPGFRONTEND_CORE_EXPORT GetGpgKeyByGpgAbstractKey(GpgAbstractKey*)
* @return false
*/
auto GPGFRONTEND_CORE_EXPORT IsKeyGroupID(const KeyId& id) -> bool;
+
+/**
+ * @brief
+ *
+ * @return bool
+ */
+auto GPGFRONTEND_CORE_EXPORT GpgAgentVersionGreaterThan(int channel,
+ const QString&) -> bool;
+
+/**
+ * @brief
+ *
+ * @param channel
+ * @return true
+ * @return false
+ */
+auto GPGFRONTEND_CORE_EXPORT CheckGpgVersion(int channel,
+ const QString&) -> bool;
+
} // namespace GpgFrontend \ No newline at end of file