Mercurial > minori
view dep/animone/src/animone.cc @ 258:862d0d8619f6
*: HUUUGE changes
animia has been renamed to animone, so instead of thinking of a
health condition, you think of a beautiful flower :)
I've also edited some of the code for animone, but I have no idea
if it even works or not because I don't have a mac or windows
machine lying around. whoops!
... anyway, all of the changes divergent from Anisthesia are now
licensed under BSD. it's possible that I could even rewrite most
of the code to where I don't even have to keep the MIT license,
but that's thinking too far into the future
I've been slacking off on implementing the anime seasons page,
mostly out of laziness. I think I'd have to create another db file
specifically for the seasons
anyway, this code is being pushed *primarily* because the hard drive
it's on is failing! yay :)
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Mon, 01 Apr 2024 02:43:44 -0400 |
parents | |
children | 1a6a5d3a94cd |
line wrap: on
line source
#include "animone.h" #include "animone/fd.h" #include "animone/strategies.h" #include "animone/types.h" #include "animone/util.h" #include "animone/win.h" #include <set> #include <string> #include <vector> namespace animone { namespace internal { static bool IsExecutableInList(const Player& player, const std::string& name) { std::string stem; #ifdef WIN32 if (!util::Stem(name, stem)) #endif stem = name; for (const auto& pattern : player.executables) if (util::CheckPattern(pattern, stem)) return true; return false; } static bool IsWindowInList(const Player& player, const Window& window) { for (const auto& pattern : player.windows) if (util::CheckPattern(pattern, window.class_name)) return true; return false; } static bool PlayerHasStrategy(const Player& player, const Strategy& strategy) { for (const auto& pstrategy : player.strategies) if (pstrategy == strategy) return true; return false; } } // namespace internal bool GetResults(const std::vector<Player>& players, std::vector<Result>& results) { auto window_proc = [&](const Process& process, const Window& window) -> bool { for (const auto& player : players) { if (internal::IsWindowInList(player, window)) results.push_back({player, process, window, {}}); } return true; }; if (internal::EnumerateWindows(window_proc)) return internal::ApplyStrategies(results); /* fallback, enumerate over open processes instead */ auto process_proc = [&](const Process& process) -> bool { for (const auto& player : players) if (internal::IsExecutableInList(player, process.name)) results.push_back({player, process, {}, {}}); return true; }; if (internal::EnumerateOpenProcesses(process_proc)) return internal::ApplyStrategies(results); return false; } } // namespace animone