diff --git a/src/apps/deskflow-gui/deskflow-gui.cpp b/src/apps/deskflow-gui/deskflow-gui.cpp index 517fa9a79..f20d377c1 100644 --- a/src/apps/deskflow-gui/deskflow-gui.cpp +++ b/src/apps/deskflow-gui/deskflow-gui.cpp @@ -12,7 +12,6 @@ #include "common/I18N.h" #include "common/UrlConstants.h" #include "gui/Diagnostic.h" -#include "gui/DotEnv.h" #include "gui/Logger.h" #include "gui/MainWindow.h" #include "gui/Messages.h" @@ -132,8 +131,6 @@ int main(int argc, char *argv[]) qInstallMessageHandler(deskflow::gui::messages::messageHandler); qInfo("%s v%s", kAppName, kDisplayVersion); - dotenv(); - #if defined(Q_OS_MAC) if (app.applicationDirPath().startsWith("/Volumes/")) { diff --git a/src/lib/gui/CMakeLists.txt b/src/lib/gui/CMakeLists.txt index 2d3ef6a6d..10d1a88be 100644 --- a/src/lib/gui/CMakeLists.txt +++ b/src/lib/gui/CMakeLists.txt @@ -19,8 +19,6 @@ add_library(${target} STATIC Action.h Diagnostic.cpp Diagnostic.h - DotEnv.cpp - DotEnv.h FileTail.cpp FileTail.h Hotkey.cpp diff --git a/src/lib/gui/DotEnv.cpp b/src/lib/gui/DotEnv.cpp deleted file mode 100644 index 05d4bba50..000000000 --- a/src/lib/gui/DotEnv.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2024 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include "DotEnv.h" - -#include "common/Settings.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace deskflow::gui { - -QPair getPair(const QString &line); - -bool open(QFile &file, const QString &filePath) -{ - file.setFileName(filePath); - return file.open(QIODevice::ReadOnly | QIODevice::Text); -} - -/** - * @brief A _very_ basic Qt .env file parser. - * - * This function re-invents the wheel to save adding a library dependency. - * It does not support many things that a proper .env parser would, such as - * trailing comments, escaping characters, multiline values, etc. - * - * If this function is not sufficient, replace it with a library such as: - * https://github.com/adeharo9/cpp-dotenv - */ -void dotenv(const QString &filename) -{ - QString filePath = filename; - QFile file; - if (!open(file, filePath)) { - QFileInfo fileInfo(filePath); - qInfo("no %s file in dir: %s", qPrintable(filename), qPrintable(fileInfo.absolutePath())); - - // if nothing in current dir, then try the config dir. - // this makes it a bit easier for engineers in the field to have an easily - // predictable location for the .env file. - const auto orgDir = QDir(Settings::settingsPath()); - - filePath = orgDir.filePath(filename); - if (!open(file, filePath)) { - qInfo("no %s file in app config dir: %s", qPrintable(filename), qPrintable(orgDir.absolutePath())); - return; - } - } - - qInfo("loading env vars from: %s", qPrintable(filePath)); - - QTextStream in(&file); - while (!in.atEnd()) { - QString line = in.readLine().trimmed(); - if (line.startsWith('#')) - continue; - - auto [key, value] = getPair(line); - if (key.isEmpty() || value.isEmpty()) - continue; - - const auto keyBytes = key.toUtf8(); - const auto valueBytes = value.toUtf8(); - - const auto &key_c = keyBytes.constData(); - const auto &value_c = valueBytes.constData(); - - qDebug("%s=%s", key_c, value_c); - qputenv(keyBytes, valueBytes); - } -} - -QString stripQuotes(const QString &value) -{ - QString result = value; - if (result.startsWith('"') && result.endsWith('"')) { - result = result.mid(1, result.length() - 2); - } - return result; -} - -QPair getPair(const QString &line) -{ - auto pos = line.indexOf('='); - if (pos == -1) { - return QPair("", ""); - } - - QString key = line.left(pos); - QString value = line.mid(pos + 1); - - return QPair(key.trimmed(), stripQuotes(value.trimmed())); -} - -} // namespace deskflow::gui diff --git a/src/lib/gui/DotEnv.h b/src/lib/gui/DotEnv.h deleted file mode 100644 index 45560a0f4..000000000 --- a/src/lib/gui/DotEnv.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2024 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#pragma once - -#include - -namespace deskflow::gui { - -const QString kDefaultEnvFilename = ".env"; - -/** - * @brief Loads environment variables from a .env file. - * - * First checks current dir for .env, then looks in the app dir. - */ -void dotenv(const QString &filename = kDefaultEnvFilename); - -} // namespace deskflow::gui diff --git a/src/unittests/gui/CMakeLists.txt b/src/unittests/gui/CMakeLists.txt index cdfa7143a..3559cd1c0 100644 --- a/src/unittests/gui/CMakeLists.txt +++ b/src/unittests/gui/CMakeLists.txt @@ -4,13 +4,6 @@ add_subdirectory(config) add_subdirectory(core) -create_test( - NAME DotEnvTests - DEPENDS gui - SOURCE DotEnvTests.cpp - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/lib/gui" -) - create_test( NAME LoggerTests DEPENDS gui diff --git a/src/unittests/gui/DotEnvTests.cpp b/src/unittests/gui/DotEnvTests.cpp deleted file mode 100644 index dd0219117..000000000 --- a/src/unittests/gui/DotEnvTests.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello - * SPDX-FileCopyrightText: (C) 2024 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include "DotEnvTests.h" - -#include "gui/DotEnv.h" - -void DotEnvTests::initTestCase() -{ - QDir dir; - QVERIFY(dir.mkpath("tmp/test")); -} - -void DotEnvTests::invalidFile() -{ - deskflow::gui::dotenv(m_envFile); - - const QString actualValue = qEnvironmentVariable("TEST_ENV_VAR"); - - QVERIFY(actualValue.isEmpty()); - QCOMPARE(actualValue, ""); -} - -void DotEnvTests::validFile() -{ - QFile file(m_envFile); - QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); - - const QString key = "TEST_ENV_VAR"; - const QString value = R"("test value")"; - const QString entry = key + " = " + value; - - QTextStream out(&file); - out << " # Comment" << Qt::endl; - out << "FOOBAR" << Qt::endl; - out << entry << Qt::endl; - file.close(); - - deskflow::gui::dotenv(m_envFile); - - const QString actualValue = qEnvironmentVariable(qPrintable(key)); - - QCOMPARE(actualValue.toStdString(), "test value"); - - QVERIFY(QFile::remove(m_envFile)); -} - -QTEST_MAIN(DotEnvTests) diff --git a/src/unittests/gui/DotEnvTests.h b/src/unittests/gui/DotEnvTests.h deleted file mode 100644 index 83ed7da1c..000000000 --- a/src/unittests/gui/DotEnvTests.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include - -class DotEnvTests : public QObject -{ - Q_OBJECT -private Q_SLOTS: - // Test are run in order top to bottom - void initTestCase(); - void invalidFile(); - void validFile(); - -private: - inline static const QString m_envFile = QStringLiteral("tmp/test/.env"); -};