comparison src/track/media.cc @ 138:28842a8d0c6b

dep/animia: huge refactor (again...) but this time, it actually compiles! and it WORKS! (on win32... not sure about other platforms...) configuring players is still not supported: at some point I'll prune something up...
author Paper <mrpapersonic@gmail.com>
date Sun, 12 Nov 2023 04:53:19 -0500
parents 0a458cb26ff4
children 478f3b366199
comparison
equal deleted inserted replaced
137:69db40272acd 138:28842a8d0c6b
7 #include "core/session.h" 7 #include "core/session.h"
8 #include <string> 8 #include <string>
9 #include <unordered_map> 9 #include <unordered_map>
10 #include <vector> 10 #include <vector>
11 #include <iostream> 11 #include <iostream>
12 #include <QFile>
12 13
13 namespace Track { 14 namespace Track {
14 namespace Media { 15 namespace Media {
15 16
16 std::vector<std::filesystem::path> GetCurrentlyPlayingFiles() { 17 static bool GetCurrentlyPlayingResults(std::vector<animia::Result>& results) {
17 /* getting all open files */ 18 std::vector<animia::Player> players;
18 std::vector<std::filesystem::path> ret;
19 19
20 std::vector<int> pids = Animia::get_all_pids(); 20 {
21 for (int pid : pids) { 21 QFile f(":/players.anisthesia");
22 for (const Types::MediaPlayer& player : session.recognition.players) { 22 if (!f.exists())
23 if (!player.GetEnabled() || Animia::get_process_name(pid) != player.GetExecutable()) 23 return false;
24 continue;
25 24
26 for (const std::string& file : Animia::filter_system_files(Animia::get_open_files(pid))) { 25 f.open(QFile::ReadOnly | QFile::Text);
27 const std::filesystem::path path(file); 26 QTextStream ts(&f);
28 27
29 for (const Types::MediaExtension& ext : session.recognition.extensions) 28 if (!animia::ParsePlayersData(Strings::ToUtf8String(ts.readAll()), players))
30 if (path.extension() == ext.GetExtension()) 29 return false;
31 ret.push_back(path); 30 }
31
32 if (!animia::GetResults(players, results))
33 return false;
34
35 return true;
36 }
37
38 /* meh */
39 bool GetCurrentlyPlaying(std::vector<std::string>& vec) {
40 std::vector<animia::Result> results;
41
42 if (!GetCurrentlyPlayingResults(results))
43 return false;
44
45 bool success = false;
46
47 for (const auto& result : results) {
48 for (const auto& media : result.media) {
49 for (const auto& info : media.information) {
50 vec.push_back(info.value);
51 success |= true;
32 } 52 }
33 } 53 }
34 } 54 }
35 55
36 return ret; 56 return success;
37 }
38
39 std::filesystem::path GetCurrentPlaying() {
40 /* getting all open files */
41 std::vector<std::filesystem::path> paths = GetCurrentlyPlayingFiles();
42 if (paths.size())
43 return paths.at(0);
44 return std::filesystem::path();
45 } 57 }
46 58
47 std::unordered_map<std::string, std::string> GetMapFromElements(const anitomy::Elements& elements) { 59 std::unordered_map<std::string, std::string> GetMapFromElements(const anitomy::Elements& elements) {
48 /* there are way more than this in anitomy, but we only need basic information 60 /* there are way more than this in anitomy, but we only need basic information
49 I also just prefer using maps than using the ".get()" stuff which is why I'm doing this */ 61 I also just prefer using maps than using the ".get()" stuff which is why I'm doing this */