From a83c6e28a16f998d89b956688f07ce5352a2864f Mon Sep 17 00:00:00 2001 From: saturneric Date: Wed, 27 Nov 2024 21:23:51 +0100 Subject: feat: improve ui logic and support more email operations --- src/sdk/private/GFSDKPrivat.cpp | 134 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 src/sdk/private/GFSDKPrivat.cpp (limited to 'src/sdk/private/GFSDKPrivat.cpp') diff --git a/src/sdk/private/GFSDKPrivat.cpp b/src/sdk/private/GFSDKPrivat.cpp new file mode 100644 index 00000000..71136535 --- /dev/null +++ b/src/sdk/private/GFSDKPrivat.cpp @@ -0,0 +1,134 @@ +/** + * Copyright (C) 2021-2024 Saturneric + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see . + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "GFSDKPrivat.h" + +#include + +#include + +#include "GFSDKModule.h" + +Q_LOGGING_CATEGORY(sdk, "sdk") + +auto GFStrDup(const QString& str) -> char* { + auto utf8_str = str.toUtf8(); + auto* c_str = static_cast( + GpgFrontend::SecureMalloc((utf8_str.size() + 1) * sizeof(char))); + + memcpy(c_str, utf8_str.constData(), utf8_str.size()); + c_str[utf8_str.size()] = '\0'; + return c_str; +} + +auto GFUnStrDup(char* str) -> QString { + auto qt_str = QString::fromUtf8(str); + GpgFrontend::SecureFree(static_cast(const_cast(str))); + return qt_str; +} + +auto GFUnStrDup(const char* str) -> QString { + return GFUnStrDup(const_cast(str)); +} + +auto CharArrayToQMap(char** char_array, int size) -> QMap { + QMap map; + for (int i = 0; i < size; i += 2) { + QString const key = GFUnStrDup(char_array[i]); + QString const value = GFUnStrDup(char_array[i + 1]); + map.insert(key, value); + } + + return map; +} + +auto QMapToCharArray(const QMap& map, int& size) -> char** { + size = map.size() * 2; + char** char_array = new char*[size]; + + int index = 0; + for (auto it = map.begin(); it != map.end(); ++it) { + QByteArray const key = it.key().toUtf8(); + QByteArray const value = it.value().toUtf8(); + + char_array[index] = new char[key.size() + 1]; + std::strcpy(char_array[index], key.constData()); + index++; + + char_array[index] = new char[value.size() + 1]; + std::strcpy(char_array[index], value.constData()); + index++; + } + + return char_array; +} + +auto ConvertEventParamsToMap(GFModuleEventParam* params) + -> QMap { + QMap param_map; + GFModuleEventParam* current = params; + GFModuleEventParam* last; + + while (current != nullptr) { + param_map[current->name] = GFUnStrDup(current->value); + + last = current; + current = current->next; + GpgFrontend::SecureFree(last); + } + + return param_map; +} + +auto CharArrayToQList(char** char_array, int size) -> QStringList { + QStringList list; + for (int i = 0; i < size; ++i) { + if (char_array[i] != nullptr) { + QString value = GFUnStrDup(char_array[i]); + list.append(value); + } + } + GpgFrontend::SecureFree(char_array); + return list; +} + +auto QListToCharArray(const QStringList& list) -> char** { + char** char_array = static_cast( + GpgFrontend::SecureMalloc(list.size() * sizeof(char*))); + + int index = 0; + for (const QString& item : list) { + QByteArray value = item.toUtf8(); + char_array[index] = + static_cast(GpgFrontend::SecureMalloc(value.size() + 1)); + std::strcpy(char_array[index], value.constData()); + index++; + } + + return char_array; +} -- cgit v1.2.3