paysages3d/src/system/DataFile.cpp

63 lines
1.6 KiB
C++
Raw Normal View History

2014-09-18 09:39:36 +00:00
#include "DataFile.h"
#include "Logs.h"
#include <QDir>
2015-12-10 23:36:50 +00:00
string DataFile::findFile(const string &relpath) {
if (dataDir.empty()) {
dataDir = initDataDir();
}
2014-09-18 09:39:36 +00:00
QDir dir(QString::fromStdString(dataDir));
if (dir.exists(QString::fromStdString(relpath))) {
2014-09-18 09:39:36 +00:00
return dir.absoluteFilePath(QString::fromStdString(relpath)).toStdString();
} else {
2014-09-18 09:39:36 +00:00
return "";
}
}
2015-12-10 23:36:50 +00:00
string DataFile::findDir(const string &relpath) {
2014-09-18 09:39:36 +00:00
return findFile(relpath);
}
bool DataFile::tryDataDir(const QDir &dir) {
2015-12-13 19:08:38 +00:00
Logs::debug("System") << "Try data dir " << dir.absolutePath().toStdString() << endl;
2014-09-18 09:39:36 +00:00
return dir.exists("data/.paysages_data");
}
2015-12-10 23:36:50 +00:00
string DataFile::locateDataDir() {
2014-09-18 09:39:36 +00:00
QDir dir = QDir::current();
int i = 0;
// TODO /usr/share/paysages3d/
while (i++ < 100 and not dir.isRoot()) {
if (tryDataDir(dir)) {
2014-09-18 09:39:36 +00:00
return dir.absolutePath().toStdString();
}
QDir dir2(dir.absoluteFilePath("paysages3d"));
if (tryDataDir(dir2)) {
2014-09-18 09:39:36 +00:00
return dir2.absolutePath().toStdString();
}
dir = QDir(QDir(dir.absoluteFilePath("..")).canonicalPath());
}
return "";
}
2015-12-10 23:36:50 +00:00
string DataFile::initDataDir() {
string parent = locateDataDir();
if (parent.empty()) {
2015-12-13 19:08:38 +00:00
Logs::warning("System") << "Data files not found" << endl;
2014-09-18 09:39:36 +00:00
return parent;
} else {
2015-12-10 23:36:50 +00:00
string result = QDir(QString::fromStdString(parent)).absoluteFilePath("data").toStdString();
2015-12-13 19:08:38 +00:00
Logs::debug("System") << "Data files found : " << result << endl;
2014-09-18 09:39:36 +00:00
return result;
}
}
2015-12-10 23:36:50 +00:00
string DataFile::dataDir;