view src/track/media.cc @ 101:c537996cf67b

*: multitude of config changes 1. theme is now configurable from the settings menu (but you have to restart for it to apply) 2. config is now stored in an INI file, with no method of conversion from json (this repo is private-ish anyway)
author Paper <mrpapersonic@gmail.com>
date Fri, 03 Nov 2023 14:06:02 -0400
parents 8b65c417c225
children 2004b41d4a59
line wrap: on
line source

#include "track/media.h"
#include "track/constants.h"
#include "animia.h"
#include "anitomy/anitomy.h"
#include "core/filesystem.h"
#include "core/strings.h"
#include <QDebug>
#include <string>
#include <unordered_map>
#include <vector>

namespace Track {
namespace Media {

Filesystem::Path GetCurrentPlaying() {
	/* getting all open files */
	std::vector<int> pids = Animia::get_all_pids();
	for (int i : pids) {
		for (const std::string& player : media_players) {
			if (Animia::get_process_name(i) == player) {
				std::vector<std::string> files = Animia::filter_system_files(Animia::get_open_files(i));
				for (const std::string& f : files) {
					Filesystem::Path p(f);
					for (const std::string& ext : media_extensions) {
						if (p.Extension() == ext)
							return p;
					}
				}
			}
		}
	}
	return Filesystem::Path();
}

std::unordered_map<std::string, std::string> GetMapFromElements(const anitomy::Elements& elements) {
	/* there are way more than this in anitomy, but we only need basic information
	   I also just prefer using maps than using the ".get()" stuff which is why I'm doing this */
	std::unordered_map<std::string, std::string> ret;

	ret["title"] = Strings::ToUtf8String(elements.get(anitomy::kElementAnimeTitle));
	ret["filename"] = Strings::ToUtf8String(elements.get(anitomy::kElementFileName));
	ret["language"] = Strings::ToUtf8String(elements.get(anitomy::kElementLanguage));
	ret["group"] = Strings::ToUtf8String(elements.get(anitomy::kElementReleaseGroup));
	ret["episode"] = Strings::ToUtf8String(elements.get(anitomy::kElementEpisodeNumber));

	return ret;
}

std::unordered_map<std::string, std::string> GetFileElements(Filesystem::Path path) {
	anitomy::Anitomy anitomy;
	anitomy.Parse(Strings::ToWstring(path.Basename()));

	return GetMapFromElements(anitomy.elements());
}

} // namespace Media
} // namespace Track