view dep/animia/src/animia.cc @ 147:6fdf0632c003

track: use a bit of a more sane way to manage recognition it also works with the new animia API
author Paper <mrpapersonic@gmail.com>
date Tue, 14 Nov 2023 13:19:40 -0500
parents d8a61e7e2a36
children aa4df5a84338
line wrap: on
line source

#include <string>
#include <vector>
#include <set>

#include "animia.h"
#include "animia/strategies.h"
#include "animia/types.h"
#include "animia/fd.h"

namespace animia {

static bool ProcessInPlayers(const std::vector<Player>& players, const std::string& name, Player& player_) {
	for (const auto& player : players) {
		for (const auto& exe : player.executables) {
			if (exe == name.substr(0, name.rfind(".exe"))) {
				player_ = player;
				return true;
			}
		}
	}
	return false;
}

bool GetResults(const std::vector<Player>& players, std::vector<Result>& results) {
	std::set<internal::pid_t> pids;

	if (!internal::fd.GetAllPids(pids))
		return false;

	for (const auto& pid : pids) {
		std::string name;
		internal::fd.GetProcessName(pid, name);

		Player player;
		if (!ProcessInPlayers(players, name, player))
			continue;

		Result result;
		result.process.pid = pid;
		result.process.name = name;
		result.player = player;
		results.push_back(result);
	}

	return internal::ApplyStrategies(results);
}

}