1
0
mirror of synced 2024-11-14 10:37:40 +01:00

store the executable dir as a path

This commit is contained in:
Stepland 2023-08-05 15:08:07 +02:00
parent bc6b6fcf07
commit 3aa59be684
5 changed files with 37 additions and 34 deletions

View File

@ -66,12 +66,12 @@ namespace Data {
} }
// RAII style class which loads preferences from the dedicated file when constructed and saves them when destructed // RAII style class which loads preferences from the dedicated file when constructed and saves them when destructed
Preferences::Preferences(const std::filesystem::path& t_jujube_path) : Preferences::Preferences(const std::filesystem::path& jujube_path_) :
screen(), screen(),
layout(), layout(),
options(), options(),
key_mapping(), key_mapping(),
jujube_path(t_jujube_path) jujube_path(jujube_path_)
{ {
auto path = jujube_path / "data" / "preferences.json"; auto path = jujube_path / "data" / "preferences.json";
if (std::filesystem::exists(path)) { if (std::filesystem::exists(path)) {

View File

@ -76,7 +76,7 @@ namespace Data {
Input::KeyMapping key_mapping; Input::KeyMapping key_mapping;
std::filesystem::path jujube_path; std::filesystem::path jujube_path;
Preferences(const std::filesystem::path& t_jujube_path); Preferences(const std::filesystem::path& jujube_path);
~Preferences(); ~Preferences();
}; };

View File

@ -30,7 +30,7 @@ namespace Data {
} }
} }
std::optional<fs::path> Song::full_cover_path() const { std::optional<std::filesystem::path> Song::full_cover_path() const {
if (cover) { if (cover) {
return folder/cover.value(); return folder/cover.value();
} else { } else {
@ -38,7 +38,7 @@ namespace Data {
} }
} }
std::optional<fs::path> Song::full_audio_path() const { std::optional<std::filesystem::path> Song::full_audio_path() const {
if (audio) { if (audio) {
return folder/audio.value(); return folder/audio.value();
} else { } else {
@ -46,13 +46,13 @@ namespace Data {
} }
} }
SongList::SongList(const fs::path& jujube_path) : SongList::SongList(const std::filesystem::path& jujube_path) :
songs() songs()
{ {
fs::path song_folder = jujube_path/"songs"; std::filesystem::path song_folder = jujube_path/"songs";
if (fs::exists(song_folder) and fs::is_directory(song_folder)) { if (std::filesystem::exists(song_folder) and std::filesystem::is_directory(song_folder)) {
for (const auto& dir_item : fs::directory_iterator(song_folder)) { for (const auto& dir_item : std::filesystem::directory_iterator(song_folder)) {
if (dir_item.is_directory()) { if (dir_item.is_directory()) {
songs.splice(songs.end(), recursiveSongSearch(dir_item.path())); songs.splice(songs.end(), recursiveSongSearch(dir_item.path()));
} }
@ -61,16 +61,16 @@ namespace Data {
std::cout << "Loaded Data::SongList, found " << songs.size() << " songs" << '\n'; std::cout << "Loaded Data::SongList, found " << songs.size() << " songs" << '\n';
} }
std::list<std::shared_ptr<Song>> recursiveSongSearch(fs::path song_or_pack) { std::list<std::shared_ptr<Song>> recursiveSongSearch(std::filesystem::path song_or_pack) {
std::list<std::shared_ptr<Song>> res; std::list<std::shared_ptr<Song>> res;
// First try : any .memo file in the folder ? // First try : any .memo file in the folder ?
fs::directory_iterator folder_memo{song_or_pack}; std::filesystem::directory_iterator folder_memo{song_or_pack};
if ( if (
std::any_of( std::any_of(
fs::begin(folder_memo), std::filesystem::begin(folder_memo),
fs::end(folder_memo), std::filesystem::end(folder_memo),
[](const fs::directory_entry& de) {return de.path().extension() == ".memo";} [](const std::filesystem::directory_entry& de) {return de.path().extension() == ".memo";}
) )
) { ) {
throw std::invalid_argument("jujube does not support .memo files for now ..."); throw std::invalid_argument("jujube does not support .memo files for now ...");
@ -78,13 +78,13 @@ namespace Data {
// Second try : any .memon file in the folder ? // Second try : any .memon file in the folder ?
// if yes get the first one // if yes get the first one
fs::directory_iterator folder_memon{song_or_pack}; std::filesystem::directory_iterator folder_memon{song_or_pack};
auto memon_path = std::find_if( auto memon_path = std::find_if(
fs::begin(folder_memon), std::filesystem::begin(folder_memon),
fs::end(folder_memon), std::filesystem::end(folder_memon),
[](const fs::directory_entry& de) {return de.path().extension() == ".memon";} [](const std::filesystem::directory_entry& de) {return de.path().extension() == ".memon";}
); );
if (memon_path != fs::end(folder_memon)) { if (memon_path != std::filesystem::end(folder_memon)) {
auto song = std::make_shared<MemonSong>(memon_path->path()); auto song = std::make_shared<MemonSong>(memon_path->path());
if (not song->chart_levels.empty()) { if (not song->chart_levels.empty()) {
res.push_back(song); res.push_back(song);
@ -92,7 +92,7 @@ namespace Data {
return res; return res;
} }
// Nothing found : recurse in subfolders // Nothing found : recurse in subfolders
for (auto& p : fs::directory_iterator(song_or_pack)) { for (auto& p : std::filesystem::directory_iterator(song_or_pack)) {
if (p.is_directory()) { if (p.is_directory()) {
res.splice(res.end(), recursiveSongSearch(p)); res.splice(res.end(), recursiveSongSearch(p));
} }
@ -115,7 +115,7 @@ namespace Data {
return time_bounds; return time_bounds;
} }
MemonSong::MemonSong(const fs::path& t_memon_path) : MemonSong::MemonSong(const std::filesystem::path& t_memon_path) :
memon_path(t_memon_path) memon_path(t_memon_path)
{ {
auto song_folder = t_memon_path.parent_path(); auto song_folder = t_memon_path.parent_path();

View File

@ -16,8 +16,6 @@
#include "Chart.hpp" #include "Chart.hpp"
#include "TimeBounds.hpp" #include "TimeBounds.hpp"
namespace fs = std::filesystem;
namespace Data { namespace Data {
/* /*
@ -30,19 +28,19 @@ namespace Data {
// Basic metadata about a song // Basic metadata about a song
struct Song { struct Song {
fs::path folder; std::filesystem::path folder;
std::string title; std::string title;
std::string artist; std::string artist;
// Path to the album cover // Path to the album cover
std::optional<fs::path> cover; std::optional<std::filesystem::path> cover;
// Path the the audio file // Path the the audio file
std::optional<fs::path> audio; std::optional<std::filesystem::path> audio;
std::optional<sf::Music::TimeSpan> preview; std::optional<sf::Music::TimeSpan> preview;
// Mapping from chart difficulty (BSC, ADV, EXT ...) to the numeric level, // Mapping from chart difficulty (BSC, ADV, EXT ...) to the numeric level,
std::map<std::string, unsigned int, cmp_dif_name> chart_levels; std::map<std::string, unsigned int, cmp_dif_name> chart_levels;
virtual std::optional<fs::path> full_cover_path() const; virtual std::optional<std::filesystem::path> full_cover_path() const;
virtual std::optional<fs::path> full_audio_path() const; virtual std::optional<std::filesystem::path> full_audio_path() const;
virtual std::optional<Chart> get_chart(const std::string& difficulty) const = 0; virtual std::optional<Chart> get_chart(const std::string& difficulty) const = 0;
@ -74,10 +72,10 @@ namespace Data {
}; };
struct MemonSong : public Song { struct MemonSong : public Song {
explicit MemonSong(const fs::path& memon_path); explicit MemonSong(const std::filesystem::path& memon_path);
std::optional<Chart> get_chart(const std::string& difficulty) const; std::optional<Chart> get_chart(const std::string& difficulty) const;
private: private:
fs::path memon_path; std::filesystem::path memon_path;
}; };
/* /*
@ -91,11 +89,11 @@ namespace Data {
// Class holding all the necessary song data to run the Music Select screen // Class holding all the necessary song data to run the Music Select screen
class SongList { class SongList {
public: public:
SongList(const fs::path& jujube_path); SongList(const std::filesystem::path& jujube_path);
std::list<std::shared_ptr<Song>> songs; std::list<std::shared_ptr<Song>> songs;
}; };
// Returns the folders conscidered to contain a valid song // Returns the folders conscidered to contain a valid song
// classic memo files should have the .memo extension // classic memo files should have the .memo extension
std::list<std::shared_ptr<Song>> recursiveSongSearch(fs::path song_or_pack); std::list<std::shared_ptr<Song>> recursiveSongSearch(std::filesystem::path song_or_pack);
} }

View File

@ -1,5 +1,7 @@
#include <iostream> #include <iostream>
#include <filesystem>
#include <imgui-sfml/imgui-SFML.h> #include <imgui-sfml/imgui-SFML.h>
#include <SFML/Graphics.hpp> #include <SFML/Graphics.hpp>
#include <whereami/whereami++.hpp> #include <whereami/whereami++.hpp>
@ -17,6 +19,9 @@
#include "Screens/Gameplay/Resources.hpp" #include "Screens/Gameplay/Resources.hpp"
#include "Screens/Gameplay/Gameplay.hpp" #include "Screens/Gameplay/Gameplay.hpp"
#include "Screens/Results/Results.hpp" #include "Screens/Results/Results.hpp"
#include "Toolkit/UTF8Strings.hpp"
#if defined(__unix__) && defined(__linux__) #if defined(__unix__) && defined(__linux__)
#include <X11/Xlib.h> #include <X11/Xlib.h>
#endif #endif
@ -28,7 +33,7 @@ int main() {
#endif #endif
// Load prefs, music, markers // Load prefs, music, markers
const std::string jujube_path = whereami::executable_dir(); const std::filesystem::path jujube_path = utf8_encoded_string_to_path(whereami::executable_dir());
Data::Preferences preferences{jujube_path}; Data::Preferences preferences{jujube_path};
Data::SongList song_list{jujube_path}; Data::SongList song_list{jujube_path};
Resources::SharedResources shared_resources{preferences}; Resources::SharedResources shared_resources{preferences};