aboutsummaryrefslogtreecommitdiff
path: root/source/lib/system/src
diff options
context:
space:
mode:
Diffstat (limited to 'source/lib/system/src')
-rw-r--r--source/lib/system/src/environment.cpp71
-rw-r--r--source/lib/system/src/filesystem.cpp31
-rw-r--r--source/lib/system/src/logging.cpp21
-rw-r--r--source/lib/system/src/setting.cpp102
-rw-r--r--source/lib/system/src/wallpaper.cpp91
-rw-r--r--source/lib/system/src/xdg.cpp46
6 files changed, 0 insertions, 362 deletions
diff --git a/source/lib/system/src/environment.cpp b/source/lib/system/src/environment.cpp
deleted file mode 100644
index 8f79531..0000000
--- a/source/lib/system/src/environment.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-#include "wanda/system/environment.hpp"
-
-#include <string>
-
-namespace wanda::system
-{
- environment::environment(char const * const * env)
- {
- if (!env)
- {
- return;
- }
-
- std::string buffer{};
- for (; *env != nullptr; ++env)
- {
- buffer = *env;
- int split_point = buffer.find('=');
- if (split_point != std::string::npos)
- {
- m_cache[buffer.substr(0, split_point)] = buffer.substr(split_point + 1);
- }
- }
- }
-
- std::string & environment::operator[](std::string const & variable)
- {
- return m_cache[variable];
- }
-
- std::string const & environment::operator[](std::string const & variable) const
- {
- static std::string const empty{};
- if (auto needle = m_cache.find(variable); needle != cend())
- {
- return needle->second;
- }
- return empty;
- }
-
- environment::iterator environment::begin()
- {
- return m_cache.begin();
- }
-
- environment::const_iterator environment::begin() const
- {
- return m_cache.begin();
- }
-
- environment::const_iterator environment::cbegin() const
- {
- return m_cache.cbegin();
- }
-
- environment::iterator environment::end()
- {
- return m_cache.end();
- }
-
- environment::const_iterator environment::end() const
- {
- return m_cache.end();
- }
-
- environment::const_iterator environment::cend() const
- {
- return m_cache.cend();
- }
-
-} // namespace wanda::system \ No newline at end of file
diff --git a/source/lib/system/src/filesystem.cpp b/source/lib/system/src/filesystem.cpp
deleted file mode 100644
index 04dfff3..0000000
--- a/source/lib/system/src/filesystem.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "wanda/system/filesystem.hpp"
-
-#include <random>
-#include <ranges>
-
-namespace wanda::system
-{
- std::optional<path_list> scan(std::filesystem::path source, bool(filter)(std::filesystem::path const &))
- {
- if (!std::filesystem::is_directory(source))
- {
- return std::nullopt;
- }
- auto entries = std::filesystem::recursive_directory_iterator{source};
- auto result = path_list{};
- for (auto & entry : entries | std::views::filter(filter))
- {
- result.push_back(entry.path());
- }
- return result;
- }
-
- std::filesystem::path random_pick(path_list const & paths)
- {
- static auto generator = std::mt19937{std::random_device{}()};
- auto distribution = std::uniform_int_distribution<std::size_t>{0, paths.size() - 1};
-
- return paths[distribution(generator)];
- }
-
-} // namespace wanda::system \ No newline at end of file
diff --git a/source/lib/system/src/logging.cpp b/source/lib/system/src/logging.cpp
deleted file mode 100644
index 83dc9f6..0000000
--- a/source/lib/system/src/logging.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "wanda/system/logging.hpp"
-
-namespace wanda::system
-{
- std::function<void(spdlog::sink_ptr)> initializer = [](spdlog::sink_ptr sink) {
- spdlog::register_logger(std::make_shared<spdlog::logger>("wanda", sink));
- initializer = [](auto) {};
- };
-
- void initialize_logger(spdlog::sink_ptr sink)
- {
- initializer(sink);
- }
-
- logger_ptr get_logger()
- {
- initialize_logger();
- return spdlog::get("wanda");
- }
-
-} // namespace wanda::system \ No newline at end of file
diff --git a/source/lib/system/src/setting.cpp b/source/lib/system/src/setting.cpp
deleted file mode 100644
index 1553eae..0000000
--- a/source/lib/system/src/setting.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-#include "wanda/system/setting.hpp"
-
-#include <algorithm>
-#include <type_traits>
-
-namespace wanda::system
-{
- // UDL implementations
-
- key literals::operator""_key(char const * str, std::size_t len)
- {
- return key{{str, len}};
- }
-
- std::optional<setting> literals::operator""_setting(char const * str, std::size_t len)
- {
- auto source = g_settings_schema_source_get_default();
- if (!source)
- {
- return std::nullopt;
- }
-
- auto schema = g_settings_schema_source_lookup(source, str, true);
- if (!schema)
- {
- return std::nullopt;
- }
-
- return setting{schema};
- }
-
- // 'setting' implementation
-
- setting::setting(GSettingsSchema * schema)
- : m_schema{schema, &g_settings_schema_unref}
- {
- }
-
- std::optional<setting::entry> setting::operator[](key key) const
- {
- if (!g_settings_schema_has_key(m_schema.get(), key.get().c_str()))
- {
- return std::nullopt;
- }
-
- return setting::entry{*this, std::move(key)};
- }
-
- // 'setting::entry' implementation
-
- setting::entry::entry(setting const & setting, key key)
- : m_settings{g_settings_new(g_settings_schema_get_id(setting.m_schema.get())), &g_object_unref}
- , m_key{key.get()}
- {
- }
-
- setting::entry::value_type setting::entry::operator*() const
- {
- auto value = std::unique_ptr<GVariant, decltype(&g_variant_unref)>{g_settings_get_value(m_settings.get(), m_key.get().c_str()), &g_variant_unref};
- auto raw = value.get();
-
- if (g_variant_is_of_type(raw, G_VARIANT_TYPE_BOOLEAN))
- {
- return static_cast<bool>(g_variant_get_boolean(raw));
- }
- else if (g_variant_is_of_type(raw, G_VARIANT_TYPE_INT32))
- {
- return static_cast<std::int32_t>(g_variant_get_int32(raw));
- }
- else if (g_variant_is_of_type(raw, G_VARIANT_TYPE_INT64))
- {
- return static_cast<std::int64_t>(g_variant_get_int64(raw));
- }
- else if (g_variant_is_of_type(raw, G_VARIANT_TYPE_UINT32))
- {
- return static_cast<std::uint32_t>(g_variant_get_uint32(raw));
- }
- else if (g_variant_is_of_type(raw, G_VARIANT_TYPE_UINT64))
- {
- return static_cast<std::uint64_t>(g_variant_get_uint64(raw));
- }
- else if (g_variant_is_of_type(raw, G_VARIANT_TYPE_DOUBLE))
- {
- return static_cast<double>(g_variant_get_double(raw));
- }
- else if (g_variant_is_of_type(raw, G_VARIANT_TYPE_STRING))
- {
- auto size = gsize{};
- auto string = g_variant_get_string(raw, &size);
- return std::string{string, size};
- }
- else if (g_variant_is_of_type(raw, G_VARIANT_TYPE_STRING_ARRAY))
- {
- auto length = gsize{};
- auto data = g_variant_get_strv(raw, &length);
- return std::vector<std::string>{data, data + length};
- }
-
- return {};
- }
-
-} // namespace wanda::system \ No newline at end of file
diff --git a/source/lib/system/src/wallpaper.cpp b/source/lib/system/src/wallpaper.cpp
deleted file mode 100644
index 11a6402..0000000
--- a/source/lib/system/src/wallpaper.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-#include "wanda/system/wallpaper.hpp"
-
-#include "wanda/std_ext/optional.hpp"
-#include "wanda/system/logging.hpp"
-#include "wanda/system/magic.hpp"
-#include "wanda/system/setting.hpp"
-
-#include <boost/gil.hpp>
-#include <boost/gil/extension/io/jpeg.hpp>
-#include <boost/gil/extension/io/png.hpp>
-#include <boost/gil/extension/numeric/resample.hpp>
-#include <boost/gil/extension/numeric/sampler.hpp>
-#include <spdlog/fmt/fmt.h>
-
-#include <algorithm>
-#include <cmath>
-#include <memory>
-
-namespace wanda::system
-{
- namespace
- {
- auto magic_instance = magic{};
-
- auto load_image(std::filesystem::path wallpaper)
- {
- auto image = boost::gil::rgb8_image_t{};
-
- switch (magic_instance.type(wallpaper))
- {
- case magic::mime_type::image_jpeg:
- boost::gil::read_and_convert_image(wallpaper.native(), image, boost::gil::jpeg_tag{});
- break;
- case magic::mime_type::image_png:
- boost::gil::read_and_convert_image(wallpaper.native(), image, boost::gil::png_tag{});
- break;
- }
-
- return image;
- }
-
- auto average_colors(boost::gil::rgb8_image_t image)
- {
- auto accumulator = boost::gil::rgb64f_pixel_t{};
- auto view = const_view(image);
-
- std::ranges::for_each(view, [&](auto const & source_pixel) {
- at_c<0>(accumulator) += std::pow(boost::gil::at_c<0>(source_pixel), 2);
- at_c<1>(accumulator) += std::pow(boost::gil::at_c<1>(source_pixel), 2);
- at_c<2>(accumulator) += std::pow(boost::gil::at_c<2>(source_pixel), 2);
- });
-
- at_c<0>(accumulator) = std::sqrt(at_c<0>(accumulator) / view.size());
- at_c<1>(accumulator) = std::sqrt(at_c<1>(accumulator) / view.size());
- at_c<2>(accumulator) = std::sqrt(at_c<2>(accumulator) / view.size());
-
- return accumulator;
- }
-
- } // namespace
-
- void set_wallpaper(std::filesystem::path wallpaper)
- {
- using namespace wanda::system::literals;
- using namespace wanda::std_ext;
- using namespace std::string_literals;
-
- auto image = load_image(wallpaper);
- auto color = average_colors(std::move(image));
- auto hexstring = spdlog::fmt_lib::format("#{:02X}{:02X}{:02X}",
- static_cast<std::uint8_t>(at_c<0>(color)),
- static_cast<std::uint8_t>(at_c<1>(color)),
- static_cast<std::uint8_t>(at_c<2>(color)));
-
- with("org.gnome.desktop.background"_setting, [&](auto & setting) {
- with(setting["primary-color"_key], [&](auto & value) {
- value = hexstring;
- });
- with(setting["picture-uri"_key], [&](auto & value) {
- value = "file://" + wallpaper.native();
- }) ||
- [&] { get_logger()->error("invalid settings key"); };
- with(setting["picture-uri-dark"_key], [&](auto & value) {
- value = "file://" + wallpaper.native();
- }) ||
- [&] { get_logger()->error("invalid settings key"); };
- }) ||
- [&] { get_logger()->error("invalid setting"); };
- }
-
-} // namespace wanda::system
diff --git a/source/lib/system/src/xdg.cpp b/source/lib/system/src/xdg.cpp
deleted file mode 100644
index 109beb1..0000000
--- a/source/lib/system/src/xdg.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "wanda/system/xdg.hpp"
-
-#include <unistd.h>
-
-namespace wanda::system
-{
- std::string xdg_variable(xdg_directory directory)
- {
- switch (directory)
- {
- case xdg_directory::data_home:
- return "XDG_DATA_HOME";
- case xdg_directory::config_home:
- return "XDG_CONFIG_HOME";
- case xdg_directory::cache_home:
- return "XDG_CACHE_HOME";
- case xdg_directory::runtime_dir:
- return "XDG_RUNTIME_DIR";
- }
- return "XDG_INVALID_PATH";
- }
-
- std::filesystem::path xdg_path_for(xdg_directory directory, environment const & environment)
- {
- if (auto path = environment[xdg_variable(directory)]; !path.empty())
- {
- return path;
- }
-
- auto home = std::filesystem::path{environment["HOME"]};
- switch (directory)
- {
- case xdg_directory::data_home:
- return home / ".local/share";
- case xdg_directory::config_home:
- return home / ".config";
- case xdg_directory::cache_home:
- return home / ".cache";
- case xdg_directory::runtime_dir:
- return std::filesystem::path{"/run/user"} / std::to_string(::getuid());
- }
-
- return "";
- }
-
-} // namespace wanda::system \ No newline at end of file