mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-10 21:40:15 +00:00
Upgraded "input-file" command line option to Files::MaybeQuotedPath from std::string to allow unicode characters on Windows.
This commit is contained in:
parent
e5c417c968
commit
6bf4c7a04f
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <components/bsa/compressedbsafile.hpp>
|
#include <components/bsa/compressedbsafile.hpp>
|
||||||
#include <components/misc/strings/algorithm.hpp>
|
#include <components/misc/strings/algorithm.hpp>
|
||||||
|
#include <components/files/configurationmanager.hpp>
|
||||||
|
|
||||||
#define BSATOOL_VERSION 1.1
|
#define BSATOOL_VERSION 1.1
|
||||||
|
|
||||||
@ -112,37 +113,39 @@ bool parseOptions (int argc, char** argv, Arguments &info)
|
|||||||
<< desc << std::endl;
|
<< desc << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
info.filename = variables["input-file"].as< std::vector<std::string> >()[0]; //TODO(Project579): This will probably break in windows with unicode paths
|
auto inputFiles = variables["input-file"].as< std::vector<Files::MaybeQuotedPath> >();
|
||||||
|
|
||||||
|
info.filename = inputFiles[0];
|
||||||
|
|
||||||
// Default output to the working directory
|
// Default output to the working directory
|
||||||
info.outdir = ".";
|
info.outdir = ".";
|
||||||
|
|
||||||
if (info.mode == "extract")
|
if (info.mode == "extract")
|
||||||
{
|
{
|
||||||
if (variables["input-file"].as< std::vector<std::string> >().size() < 2)
|
if (inputFiles.size() < 2)
|
||||||
{
|
{
|
||||||
std::cout << "\nERROR: file to extract unspecified\n\n"
|
std::cout << "\nERROR: file to extract unspecified\n\n"
|
||||||
<< desc << std::endl;
|
<< desc << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (variables["input-file"].as< std::vector<std::string> >().size() > 1)
|
if (inputFiles.size() > 1)
|
||||||
info.extractfile = variables["input-file"].as< std::vector<std::string> >()[1];
|
info.extractfile = inputFiles[1];
|
||||||
if (variables["input-file"].as< std::vector<std::string> >().size() > 2)
|
if (inputFiles.size() > 2)
|
||||||
info.outdir = variables["input-file"].as< std::vector<std::string> >()[2];
|
info.outdir = inputFiles[2];
|
||||||
}
|
}
|
||||||
else if (info.mode == "add")
|
else if (info.mode == "add")
|
||||||
{
|
{
|
||||||
if (variables["input-file"].as< std::vector<std::string> >().size() < 1)
|
if (inputFiles.empty())
|
||||||
{
|
{
|
||||||
std::cout << "\nERROR: file to add unspecified\n\n"
|
std::cout << "\nERROR: file to add unspecified\n\n"
|
||||||
<< desc << std::endl;
|
<< desc << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (variables["input-file"].as< std::vector<std::string> >().size() > 1)
|
if (inputFiles.size() > 1)
|
||||||
info.addfile = variables["input-file"].as< std::vector<std::string> >()[1];
|
info.addfile = inputFiles[1];
|
||||||
}
|
}
|
||||||
else if (variables["input-file"].as< std::vector<std::string> >().size() > 1)
|
else if (inputFiles.size() > 1)
|
||||||
info.outdir = variables["input-file"].as< std::vector<std::string> >()[1];
|
info.outdir = inputFiles[1];
|
||||||
|
|
||||||
info.longformat = variables.count("long") != 0;
|
info.longformat = variables.count("long") != 0;
|
||||||
info.fullpath = variables.count("full-path") != 0;
|
info.fullpath = variables.count("full-path") != 0;
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include <components/esm/format.hpp>
|
#include <components/esm/format.hpp>
|
||||||
#include <components/files/openfile.hpp>
|
#include <components/files/openfile.hpp>
|
||||||
#include <components/misc/strings/algorithm.hpp>
|
#include <components/misc/strings/algorithm.hpp>
|
||||||
|
#include <components/files/configurationmanager.hpp>
|
||||||
|
|
||||||
#include "record.hpp"
|
#include "record.hpp"
|
||||||
#include "labels.hpp"
|
#include "labels.hpp"
|
||||||
@ -154,9 +155,10 @@ bool parseOptions (int argc, char** argv, Arguments &info)
|
|||||||
return false;
|
return false;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
info.filename = variables["input-file"].as< std::vector<std::filesystem::path> >()[0];
|
const auto inputFiles = variables["input-file"].as< std::vector<Files::MaybeQuotedPath> >();
|
||||||
if (variables["input-file"].as< std::vector<std::string> >().size() > 1)
|
info.filename = inputFiles[0];
|
||||||
info.outname = variables["input-file"].as< std::vector<std::filesystem::path> >()[1];
|
if (inputFiles.size() > 1)
|
||||||
|
info.outname = inputFiles[1];
|
||||||
|
|
||||||
if (const auto it = variables.find("raw"); it != variables.end())
|
if (const auto it = variables.find("raw"); it != variables.end())
|
||||||
info.mRawFormat = ESM::parseFormat(it->second.as<std::string>());
|
info.mRawFormat = ESM::parseFormat(it->second.as<std::string>());
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <components/vfs/manager.hpp>
|
#include <components/vfs/manager.hpp>
|
||||||
#include <components/vfs/bsaarchive.hpp>
|
#include <components/vfs/bsaarchive.hpp>
|
||||||
#include <components/vfs/filesystemarchive.hpp>
|
#include <components/vfs/filesystemarchive.hpp>
|
||||||
|
#include <components/files/configurationmanager.hpp>
|
||||||
|
|
||||||
#include <boost/program_options.hpp>
|
#include <boost/program_options.hpp>
|
||||||
|
|
||||||
@ -66,7 +67,7 @@ void readVFS(std::unique_ptr<VFS::Archive>&& anArchive, const std::filesystem::p
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool parseOptions (int argc, char** argv, std::vector<std::string>& files)
|
bool parseOptions (int argc, char** argv, std::vector<Files::MaybeQuotedPath> &files)
|
||||||
{
|
{
|
||||||
bpo::options_description desc("Ensure that OpenMW can use the provided NIF and BSA files\n\n"
|
bpo::options_description desc("Ensure that OpenMW can use the provided NIF and BSA files\n\n"
|
||||||
"Usages:\n"
|
"Usages:\n"
|
||||||
@ -75,7 +76,7 @@ bool parseOptions (int argc, char** argv, std::vector<std::string>& files)
|
|||||||
"Allowed options");
|
"Allowed options");
|
||||||
desc.add_options()
|
desc.add_options()
|
||||||
("help,h", "print help message.")
|
("help,h", "print help message.")
|
||||||
("input-file", bpo::value< std::vector<std::filesystem::path> >(), "input file")
|
("input-file", bpo::value< std::vector<Files::MaybeQuotedPath> >(), "input file")
|
||||||
;
|
;
|
||||||
|
|
||||||
//Default option if none provided
|
//Default option if none provided
|
||||||
@ -96,7 +97,7 @@ bool parseOptions (int argc, char** argv, std::vector<std::string>& files)
|
|||||||
}
|
}
|
||||||
if (variables.count("input-file"))
|
if (variables.count("input-file"))
|
||||||
{
|
{
|
||||||
files = variables["input-file"].as< std::vector<std::string> >();
|
files = variables["input-file"].as< std::vector<Files::MaybeQuotedPath> >();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,18 +115,16 @@ bool parseOptions (int argc, char** argv, std::vector<std::string>& files)
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
std::vector<std::string> files;
|
std::vector<Files::MaybeQuotedPath> files;
|
||||||
if(!parseOptions (argc, argv, files))
|
if(!parseOptions (argc, argv, files))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
Nif::NIFFile::setLoadUnsupportedFiles(true);
|
Nif::NIFFile::setLoadUnsupportedFiles(true);
|
||||||
// std::cout << "Reading Files" << std::endl;
|
// std::cout << "Reading Files" << std::endl;
|
||||||
for(const auto& name : files)
|
for(const auto& path : files)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
const std::filesystem::path path(name); //TODO(Project579): This will probably break in windows with unicode paths
|
|
||||||
|
|
||||||
if(isNIF(path))
|
if(isNIF(path))
|
||||||
{
|
{
|
||||||
//std::cout << "Decoding: " << name << std::endl;
|
//std::cout << "Decoding: " << name << std::endl;
|
||||||
@ -143,7 +142,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::cerr << "ERROR: \"" << path << "\" is not a nif file, bsa file, or directory!" << std::endl;
|
std::cerr << "ERROR: \"" << path << "\" is not a nif file, bsa file, or directory!" << std::endl; //TODO(Project579): This will probably break in windows with unicode paths
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user