view src/track/media.cc @ 266:1a6a5d3a94cd

dep/animone: make bsd.cc and x11.cc actually work apparently I broke these, and even now the x11 code *still* doesn't want to work correctly (at least on FreeBSD). half of the PID response codes are just 0 or the PID for the X server itself... wtf? maybe dwm just doesn't support the XRes extension, or I'm just stupid. i don't know.
author Paper <paper@paper.us.eu.org>
date Thu, 11 Apr 2024 22:05:41 -0400
parents ff0b2052b234
children 657fda1b9cac
line wrap: on
line source

#include "track/media.h"
#include "core/filesystem.h"
#include "core/session.h"
#include "core/strings.h"

#include <QFile>
#include <QTextStream>

#include <filesystem>
#include <string>
#include <unordered_map>
#include <vector>

#include <iostream>

#include "animone.h"

namespace Track {
namespace Media {

static bool GetCurrentlyPlayingResults(std::vector<animone::Result>& results) {
	std::vector<animone::Player> players;

	players.reserve(session.config.recognition.players.size());
	for (const auto& [enabled, player] : session.config.recognition.players)
		if (enabled && player.type == animone::PlayerType::Default)
			players.push_back(player);

	return animone::GetResults(players, results);
}

/* meh */
bool GetCurrentlyPlaying(std::vector<std::string>& vec) {
	std::vector<animone::Result> results;

	if (!GetCurrentlyPlayingResults(results)) {
		std::cout << "whoooops!" << std::endl;
		return false;
	}

	bool success = false;

	for (const auto& result : results) {
		for (const auto& media : result.media) {
			for (const auto& info : media.information) {
				std::cout << info.value << std::endl;

				switch (info.type) {
					case animone::MediaInfoType::File:
						vec.push_back(std::filesystem::path(info.value).filename().u8string());
						success |= true;
						break;
					case animone::MediaInfoType::Title:
						vec.push_back(info.value);
						success |= true;
						break;
					default: break;
				}
			}
		}
	}

	return success;
}

} // namespace Media
} // namespace Track