From abaa4038ca443bc3bd6c59d98bebca57fa6dab0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miskolczi=20Rich=C3=A1rd?= Date: Tue, 10 Jun 2025 16:45:58 +0200 Subject: [PATCH] Outsourced file related operations --- include/FileService.h | 13 +++++++++++++ include/HyprlandService.h | 2 +- src/FileService.cpp | 22 ++++++++++++++++++++++ src/HyprlandService.cpp | 8 ++++++-- 4 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 include/FileService.h create mode 100644 src/FileService.cpp diff --git a/include/FileService.h b/include/FileService.h new file mode 100644 index 0000000..b59aa6b --- /dev/null +++ b/include/FileService.h @@ -0,0 +1,13 @@ +#ifndef FILE_SERVICES_H +#define FILE_SERVICES_H + +#include + +class FileServices { + public: + static bool doesNonEmptyFileExist(std::string); + static void emptyFile(std::string); + static void createOrOverwriteFile(std::string, std::string); +}; + +#endif \ No newline at end of file diff --git a/include/HyprlandService.h b/include/HyprlandService.h index 7ed9115..24e94ea 100644 --- a/include/HyprlandService.h +++ b/include/HyprlandService.h @@ -16,6 +16,6 @@ class HyprlandService { static void setClientFloating(Client&); static void setClientTiled(Client&); static void toggleClientFloating(Client&); - static std::string exec(const std::string& command); + static bool isFloatingRulePresent(); }; #endif diff --git a/src/FileService.cpp b/src/FileService.cpp new file mode 100644 index 0000000..fb89e04 --- /dev/null +++ b/src/FileService.cpp @@ -0,0 +1,22 @@ +#include +#include +#include "../include/FileService.h" +#include "../include/Macros.h" +#include "../include/ShellService.h" + +bool FileServices::doesNonEmptyFileExist(std::string path) { + std::ifstream file(path); + return file.good() && file.peek() != std::ifstream::traits_type::eof(); +}; + +void FileServices::emptyFile(std::string path) { + std::stringstream cmd; + cmd << CAT_PATH << " " << NULL_PATH << " > " << path; + ShellService::exec(cmd.str().c_str()); +}; + +void FileServices::createOrOverwriteFile(std::string path, std::string content) { + std::stringstream cmd; + cmd << ECHO_PATH << " " << content << " > " << path; + ShellService::exec(cmd.str().c_str()); +}; \ No newline at end of file diff --git a/src/HyprlandService.cpp b/src/HyprlandService.cpp index ada5d1a..1c72cc6 100644 --- a/src/HyprlandService.cpp +++ b/src/HyprlandService.cpp @@ -62,9 +62,13 @@ void HyprlandService::toggleClientFloating(Client& c) { void HyprlandService::setFloatingRule(bool b) { if (b) { - exec(SET_FLOATING_RULE); + FileServices::createOrOverwriteFile(FLOATING_RULE_CONF_FILE, FLOATING_RULE); } else { - exec(REMOVE_FLOATING_RULE); + FileServices::emptyFile(FLOATING_RULE_CONF_FILE); } +}; + +bool HyprlandService::isFloatingRulePresent() { + return FileServices::doesNonEmptyFileExist(FLOATING_RULE_CONF_FILE); }; \ No newline at end of file