Fix "empty path points to root" bug

Unset paths are supposed to point to the current directory, not the
root.
This commit is contained in:
Ilari Liusvaara 2016-01-01 07:57:48 +02:00
parent 019fbc2646
commit 05ad5b9da1
11 changed files with 40 additions and 37 deletions

View file

@ -164,7 +164,7 @@ class project_state
{ {
public: public:
project_state(voice_commentary& _commentary, memwatch_set& _mwatch, command::group& _command, project_state(voice_commentary& _commentary, memwatch_set& _mwatch, command::group& _command,
controller_state& _controls, settingvar::cache& _setcache, button_mapping& _buttons, controller_state& _controls, settingvar::group& _setgroup, button_mapping& _buttons,
emulator_dispatch& _edispatch, input_queue& _iqueue, loaded_rom& _rom, status_updater& _supdater); emulator_dispatch& _edispatch, input_queue& _iqueue, loaded_rom& _rom, status_updater& _supdater);
~project_state(); ~project_state();
/** /**
@ -232,7 +232,7 @@ private:
memwatch_set& mwatch; memwatch_set& mwatch;
command::group& command; command::group& command;
controller_state& controls; controller_state& controls;
settingvar::cache& setcache; settingvar::group& setgroup;
button_mapping& buttons; button_mapping& buttons;
emulator_dispatch& edispatch; emulator_dispatch& edispatch;
input_queue& iqueue; input_queue& iqueue;

View file

@ -5,4 +5,10 @@
extern settingvar::set lsnes_setgrp; extern settingvar::set lsnes_setgrp;
extern settingvar::supervariable<settingvar::model_path> SET_rompath;
extern settingvar::supervariable<settingvar::model_path> SET_moviepath;
extern settingvar::supervariable<settingvar::model_path> SET_firmwarepath;
extern settingvar::supervariable<settingvar::model_path> SET_slotpath;
#endif #endif

View file

@ -108,7 +108,7 @@ emulator_instance::emulator_instance()
D.init(abindmanager, *mapper, *command); D.init(abindmanager, *mapper, *command);
D.init(nrrdata); D.init(nrrdata);
D.init(cmapper, *memory, *mlogic, *rom); D.init(cmapper, *memory, *mlogic, *rom);
D.init(project, *commentary, *mwatch, *command, *controls, *setcache, *buttons, *dispatch, *iqueue, *rom, D.init(project, *commentary, *mwatch, *command, *controls, *settings, *buttons, *dispatch, *iqueue, *rom,
*supdater); *supdater);
D.init(dbg, *dispatch, *rom, *memory, *command); D.init(dbg, *dispatch, *rom, *memory, *command);
D.init(framerate, *command); D.init(framerate, *command);

View file

@ -258,7 +258,7 @@ public:
std::string get_firmware_path() std::string get_firmware_path()
{ {
return CORE().setcache->get("firmwarepath"); return SET_firmwarepath(*CORE().settings);
} }
std::string get_base_path() std::string get_base_path()

View file

@ -175,7 +175,7 @@ std::string translate_name_mprefix(std::string original, int& binary, int save)
} }
return filename; return filename;
} else { } else {
std::string pprf = core.setcache->get("slotpath") + "/"; std::string pprf = SET_slotpath(*core.settings) + "/";
return pprf + get_mprefix() + r[1] + ".lsmv"; return pprf + get_mprefix() + r[1] + ".lsmv";
} }
} else { } else {

View file

@ -191,9 +191,9 @@ namespace
} }
project_state::project_state(voice_commentary& _commentary, memwatch_set& _mwatch, command::group& _command, project_state::project_state(voice_commentary& _commentary, memwatch_set& _mwatch, command::group& _command,
controller_state& _controls, settingvar::cache& _setcache, button_mapping& _buttons, controller_state& _controls, settingvar::group& _setgroup, button_mapping& _buttons,
emulator_dispatch& _edispatch, input_queue& _iqueue, loaded_rom& _rom, status_updater& _supdater) emulator_dispatch& _edispatch, input_queue& _iqueue, loaded_rom& _rom, status_updater& _supdater)
: commentary(_commentary), mwatch(_mwatch), command(_command), controls(_controls), setcache(_setcache), : commentary(_commentary), mwatch(_mwatch), command(_command), controls(_controls), setgroup(_setgroup),
buttons(_buttons), edispatch(_edispatch), iqueue(_iqueue), rom(_rom), supdater(_supdater), buttons(_buttons), edispatch(_edispatch), iqueue(_iqueue), rom(_rom), supdater(_supdater),
branch_ls(command, CPROJECT::bls, [this]() { this->do_branch_ls(); }), branch_ls(command, CPROJECT::bls, [this]() { this->do_branch_ls(); }),
branch_mk(command, CPROJECT::bmk, [this](const std::string& a) { this->do_branch_mk(a); }), branch_mk(command, CPROJECT::bmk, [this](const std::string& a) { this->do_branch_mk(a); }),
@ -460,7 +460,7 @@ std::string project_state::moviepath()
if(active_project) if(active_project)
return active_project->directory; return active_project->directory;
else else
return setcache.get("moviepath"); return SET_moviepath(setgroup);
} }
std::string project_state::otherpath() std::string project_state::otherpath()

View file

@ -139,8 +139,8 @@ namespace
{ {
auto& core = CORE(); auto& core = CORE();
std::string x; std::string x;
std::string romdir = core.setcache->get("rompath"); std::string romdir = SET_rompath(*core.settings);
std::string biosdir = core.setcache->get("firmwarepath"); std::string biosdir = SET_firmwarepath(*core.settings);
if((x = try_scan_hint_dir(hint, hash, xhash, romdir, extensions, headersize)) != "") return x; if((x = try_scan_hint_dir(hint, hash, xhash, romdir, extensions, headersize)) != "") return x;
if(bios && (x = try_scan_hint_dir(hint, hash, xhash, biosdir, extensions, headersize)) != "") if(bios && (x = try_scan_hint_dir(hint, hash, xhash, biosdir, extensions, headersize)) != "")
return x; return x;

View file

@ -197,7 +197,7 @@ rom_image::rom_image(const std::string& file, core_type& ctype) throw(std::bad_a
if((bios = ctype.get_biosname()) != "") { if((bios = ctype.get_biosname()) != "") {
//This thing has a BIOS. //This thing has a BIOS.
romidx = 1; romidx = 1;
std::string basename = CORE().setcache->get("firmwarepath") + "/" + bios; std::string basename = SET_firmwarepath(*CORE().settings) + "/" + bios;
romimg[0] = fileimage::image(lsnes_image_hasher, basename, "", xlate_info(ctype.get_image_info(0))); romimg[0] = fileimage::image(lsnes_image_hasher, basename, "", xlate_info(ctype.get_image_info(0)));
if(zip::file_exists(basename + ".xml")) if(zip::file_exists(basename + ".xml"))
romxml[0] = fileimage::image(lsnes_image_hasher, basename + ".xml", "", get_xml_info()); romxml[0] = fileimage::image(lsnes_image_hasher, basename + ".xml", "", get_xml_info());
@ -241,7 +241,7 @@ rom_image::rom_image(const std::string& file, const std::string& tmpprefer) thro
if((bios = coretype->get_biosname()) != "") { if((bios = coretype->get_biosname()) != "") {
//This thing has a BIOS. //This thing has a BIOS.
romidx = 1; romidx = 1;
std::string basename = CORE().setcache->get("firmwarepath") + "/" + bios; std::string basename = SET_firmwarepath(*CORE().settings) + "/" + bios;
romimg[0] = fileimage::image(lsnes_image_hasher, basename, "", romimg[0] = fileimage::image(lsnes_image_hasher, basename, "",
xlate_info(coretype->get_image_info(0))); xlate_info(coretype->get_image_info(0)));
if(zip::file_exists(basename + ".xml")) if(zip::file_exists(basename + ".xml"))
@ -395,7 +395,7 @@ rom_image::rom_image(const std::string& file, const std::string& core, const std
std::string bios = t->get_biosname(); std::string bios = t->get_biosname();
unsigned romidx = (bios != "") ? 1 : 0; unsigned romidx = (bios != "") ? 1 : 0;
if(bios != "") { if(bios != "") {
std::string basename = CORE().setcache->get("firmwarepath") + "/" + bios; std::string basename = SET_firmwarepath(*CORE().settings) + "/" + bios;
romimg[0] = fileimage::image(lsnes_image_hasher, basename, "", xlate_info(t->get_image_info(0))); romimg[0] = fileimage::image(lsnes_image_hasher, basename, "", xlate_info(t->get_image_info(0)));
if(zip::file_exists(basename + ".xml")) if(zip::file_exists(basename + ".xml"))
romxml[0] = fileimage::image(lsnes_image_hasher, basename + ".xml", "", get_xml_info()); romxml[0] = fileimage::image(lsnes_image_hasher, basename + ".xml", "", get_xml_info());

View file

@ -173,12 +173,12 @@ rom_image_handle construct_rom_multifile(core_type* ctype, const moviefile::brie
for(unsigned i = 0; i < ROM_SLOT_COUNT; i++) { for(unsigned i = 0; i < ROM_SLOT_COUNT; i++) {
std::string optregex; std::string optregex;
bool isbios = false; bool isbios = false;
std::string psetting; auto psetting = &SET_firmwarepath;
std::string romid; std::string romid;
if(bios != "" && i == 0) { if(bios != "" && i == 0) {
optregex = "--bios=(.*)"; optregex = "--bios=(.*)";
isbios = true; isbios = true;
psetting = "firmwarepath"; psetting = &SET_firmwarepath;
romid = "BIOS"; romid = "BIOS";
} else { } else {
char j[2] = {0, 0}; char j[2] = {0, 0};
@ -186,7 +186,7 @@ rom_image_handle construct_rom_multifile(core_type* ctype, const moviefile::brie
if(j[0] == 'a' + 26) if(j[0] == 'a' + 26)
j[0] = '@'; j[0] = '@';
optregex = std::string("--rom-") + j + "=(.*)"; optregex = std::string("--rom-") + j + "=(.*)";
psetting = "rompath"; psetting = &SET_rompath;
j[0] = i - ((bios != "") ? 1 : 0) + 'A'; j[0] = i - ((bios != "") ? 1 : 0) + 'A';
if(j[0] == 'A' + 26) if(j[0] == 'A' + 26)
j[0] = '@'; j[0] = '@';
@ -211,7 +211,7 @@ rom_image_handle construct_rom_multifile(core_type* ctype, const moviefile::brie
//Try to use hint. //Try to use hint.
std::set<std::string> exts = img.extensions; std::set<std::string> exts = img.extensions;
for(auto j : exts) { for(auto j : exts) {
std::string candidate = core.setcache->get(psetting) + "/" + info.hint[i] + std::string candidate = (*psetting)(*core.settings) + "/" + info.hint[i] +
"." + j; "." + j;
if(zip::file_exists(candidate)) { if(zip::file_exists(candidate)) {
roms[i] = candidate; roms[i] = candidate;
@ -221,7 +221,7 @@ rom_image_handle construct_rom_multifile(core_type* ctype, const moviefile::brie
} }
if(isbios && roms[i] == "" && i == 0) { if(isbios && roms[i] == "" && i == 0) {
//Fallback default. //Fallback default.
roms[0] = core.setcache->get("firmwarepath") + "/" + bios; roms[0] = SET_firmwarepath(*core.settings) + "/" + bios;
} }
if(roms[i] == "" && info.hash[i] != "") if(roms[i] == "" && info.hash[i] != "")
roms[i] = try_to_guess_rom(info.hint[i], info.hash[i], info.hashxml[i], *ctype, i); roms[i] = try_to_guess_rom(info.hint[i], info.hash[i], info.hashxml[i], *ctype, i);

View file

@ -2,13 +2,10 @@
settingvar::set lsnes_setgrp; settingvar::set lsnes_setgrp;
namespace settingvar::supervariable<settingvar::model_path> SET_rompath(lsnes_setgrp, "rompath", "Paths‣ROMs", "");
{ settingvar::supervariable<settingvar::model_path> SET_moviepath(lsnes_setgrp, "moviepath", "Paths‣Movies",
settingvar::supervariable<settingvar::model_path> SET_rompath(lsnes_setgrp, "rompath", "Paths‣ROMs", ""); "");
settingvar::supervariable<settingvar::model_path> SET_moviepath(lsnes_setgrp, "moviepath", "Paths‣Movies", settingvar::supervariable<settingvar::model_path> SET_firmwarepath(lsnes_setgrp, "firmwarepath",
""); "Paths‣Firmware", "");
settingvar::supervariable<settingvar::model_path> SET_firmwarepath(lsnes_setgrp, "firmwarepath", settingvar::supervariable<settingvar::model_path> SET_slotpath(lsnes_setgrp, "slotpath", "Paths‣Save slots",
"Paths‣Firmware", ""); "");
settingvar::supervariable<settingvar::model_path> SET_slotpath(lsnes_setgrp, "slotpath", "Paths‣Save slots",
"");
}

View file

@ -119,7 +119,7 @@ namespace
coreid[++corecount] = i.second; coreid[++corecount] = i.second;
} }
filter += "|All files|*"; filter += "|All files|*";
std::string directory = inst.setcache->get("rompath"); std::string directory = SET_rompath(*inst.settings);
wxFileDialog* d = new wxFileDialog(parent, towxstring("Choose ROM to load"), towxstring(directory), wxFileDialog* d = new wxFileDialog(parent, towxstring("Choose ROM to load"), towxstring(directory),
wxT(""), towxstring(filter), wxFD_OPEN); wxT(""), towxstring(filter), wxFD_OPEN);
if(d->ShowModal() == wxID_CANCEL) { if(d->ShowModal() == wxID_CANCEL) {
@ -302,12 +302,12 @@ namespace
for(auto j : t.get_image_info(i).extensions) for(auto j : t.get_image_info(i).extensions)
exts.insert(j); exts.insert(j);
filter = "Known file types|" + implode_set(exts) + "|All files|*"; filter = "Known file types|" + implode_set(exts) + "|All files|*";
std::string directory; auto _directory = &SET_firmwarepath;
if(t.get_biosname() != "" && i == 0) if(t.get_biosname() != "" && i == 0)
directory = "firmwarepath"; _directory = &SET_firmwarepath;
else else
directory = "rompath"; _directory = &SET_rompath;
directory = inst.setcache->get(directory); std::string directory = (*_directory)(*inst.settings);
core_romimage_info iinfo = t.get_image_info(i); core_romimage_info iinfo = t.get_image_info(i);
wxFileDialog* d = new wxFileDialog(this, towxstring("Load " + iinfo.hname), wxFileDialog* d = new wxFileDialog(this, towxstring("Load " + iinfo.hname),
towxstring(directory), wxT(""), towxstring(filter), wxFD_OPEN); towxstring(directory), wxT(""), towxstring(filter), wxFD_OPEN);
@ -439,12 +439,12 @@ void wxwin_mainwindow::request_rom(rom_request& req)
continue; //Shouldn't happen. continue; //Shouldn't happen.
} }
core_romimage_info iinfo = type.get_image_info(i); core_romimage_info iinfo = type.get_image_info(i);
std::string directory; auto _directory = &SET_rompath;
if(i == 0 && has_bios) if(i == 0 && has_bios)
directory = "firmwarepath"; _directory = &SET_firmwarepath;
else else
directory = "rompath"; _directory = &SET_rompath;
directory = inst.setcache->get(directory); std::string directory = (*_directory)(*inst.settings);
std::string _title = "Select " + iinfo.hname; std::string _title = "Select " + iinfo.hname;
std::string filespec = "Known ROMs|"; std::string filespec = "Known ROMs|";
std::string exts = ""; std::string exts = "";