mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 08:23:04 +02:00
save files to Documents by default
This commit is contained in:
parent
74a1f5de96
commit
87fa919ac8
4 changed files with 66 additions and 41 deletions
|
@ -11,11 +11,12 @@
|
||||||
#include <QtCore/QLoggingCategory>
|
#include <QtCore/QLoggingCategory>
|
||||||
#include <QtCore/QThread>
|
#include <QtCore/QThread>
|
||||||
|
|
||||||
|
#include <shared/FileUtils.h>
|
||||||
#include <shared/QtHelpers.h>
|
#include <shared/QtHelpers.h>
|
||||||
#include <DependencyManager.h>
|
#include <DependencyManager.h>
|
||||||
#include <Trace.h>
|
|
||||||
#include <StatTracker.h>
|
|
||||||
#include <OffscreenUi.h>
|
#include <OffscreenUi.h>
|
||||||
|
#include <StatTracker.h>
|
||||||
|
#include <Trace.h>
|
||||||
|
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
|
||||||
|
@ -141,8 +142,13 @@ void TestScriptingInterface::endTraceEvent(QString name) {
|
||||||
tracing::traceEvent(trace_test(), name, tracing::DurationEnd);
|
tracing::traceEvent(trace_test(), name, tracing::DurationEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestScriptingInterface::savePhysicsSimulationStats(QString filename) {
|
void TestScriptingInterface::savePhysicsSimulationStats(QString originalPath) {
|
||||||
qApp->saveNextPhysicsStats(filename);
|
QString path = FileUtils::replaceDateTimeTokens(originalPath);
|
||||||
|
path = FileUtils::computeDocumentPath(path);
|
||||||
|
if (!FileUtils::canCreateFile(path)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
qApp->saveNextPhysicsStats(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestScriptingInterface::profileRange(const QString& name, QScriptValue fn) {
|
void TestScriptingInterface::profileRange(const QString& name, QScriptValue fn) {
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include <QtCore/QFileInfo>
|
#include <QtCore/QFileInfo>
|
||||||
#include <QtCore/QDir>
|
#include <QtCore/QDir>
|
||||||
#include <QtCore/QStandardPaths>
|
#include <QtCore/QStandardPaths>
|
||||||
#include <QtCore/QDateTime>
|
|
||||||
|
|
||||||
#include <QtCore/QFile>
|
#include <QtCore/QFile>
|
||||||
#include <QtCore/QFileInfo>
|
#include <QtCore/QFileInfo>
|
||||||
|
@ -31,6 +30,8 @@
|
||||||
|
|
||||||
#include "Gzip.h"
|
#include "Gzip.h"
|
||||||
#include "PortableHighResolutionClock.h"
|
#include "PortableHighResolutionClock.h"
|
||||||
|
#include "SharedLogging.h"
|
||||||
|
#include "shared/FileUtils.h"
|
||||||
#include "shared/GlobalAppProperties.h"
|
#include "shared/GlobalAppProperties.h"
|
||||||
|
|
||||||
using namespace tracing;
|
using namespace tracing;
|
||||||
|
@ -104,30 +105,13 @@ void TraceEvent::writeJson(QTextStream& out) const {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tracer::serialize(const QString& originalPath) {
|
void Tracer::serialize(const QString& filename) {
|
||||||
|
QString fullPath = FileUtils::replaceDateTimeTokens(filename);
|
||||||
QString path = originalPath;
|
fullPath = FileUtils::computeDocumentPath(fullPath);
|
||||||
|
if (!FileUtils::canCreateFile(fullPath)) {
|
||||||
// Filter for specific tokens potentially present in the path:
|
return;
|
||||||
auto now = QDateTime::currentDateTime();
|
|
||||||
|
|
||||||
path = path.replace("{DATE}", now.date().toString("yyyyMMdd"));
|
|
||||||
path = path.replace("{TIME}", now.time().toString("HHmm"));
|
|
||||||
|
|
||||||
// If the filename is relative, turn it into an absolute path relative to the document directory.
|
|
||||||
QFileInfo originalFileInfo(path);
|
|
||||||
if (originalFileInfo.isRelative()) {
|
|
||||||
QString docsLocation = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
|
|
||||||
path = docsLocation + "/" + path;
|
|
||||||
QFileInfo info(path);
|
|
||||||
if (!info.absoluteDir().exists()) {
|
|
||||||
QString originalRelativePath = originalFileInfo.path();
|
|
||||||
QDir(docsLocation).mkpath(originalRelativePath);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
std::list<TraceEvent> currentEvents;
|
std::list<TraceEvent> currentEvents;
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> guard(_eventsMutex);
|
std::lock_guard<std::mutex> guard(_eventsMutex);
|
||||||
|
@ -137,11 +121,6 @@ void Tracer::serialize(const QString& originalPath) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the file exists and we can't remove it, fail early
|
|
||||||
if (QFileInfo(path).exists() && !QFile::remove(path)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we can't open a temp file for writing, fail early
|
// If we can't open a temp file for writing, fail early
|
||||||
QByteArray data;
|
QByteArray data;
|
||||||
{
|
{
|
||||||
|
@ -159,15 +138,16 @@ void Tracer::serialize(const QString& originalPath) {
|
||||||
out << "\n]";
|
out << "\n]";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (path.endsWith(".gz")) {
|
if (fullPath.endsWith(".gz")) {
|
||||||
QByteArray compressed;
|
QByteArray compressed;
|
||||||
gzip(data, compressed);
|
gzip(data, compressed);
|
||||||
data = compressed;
|
data = compressed;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
QFile file(path);
|
QFile file(fullPath);
|
||||||
if (!file.open(QIODevice::WriteOnly)) {
|
if (!file.open(QIODevice::WriteOnly)) {
|
||||||
|
qDebug(shared) << "failed to open file '" << fullPath << "'";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
file.write(data);
|
file.write(data);
|
||||||
|
@ -191,7 +171,6 @@ void Tracer::serialize(const QString& originalPath) {
|
||||||
} }
|
} }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
data = document.toJson(QJsonDocument::Compact);
|
data = document.toJson(QJsonDocument::Compact);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "FileUtils.h"
|
#include "FileUtils.h"
|
||||||
|
|
||||||
|
#include <QtCore/QDateTime>
|
||||||
#include <QtCore/QDir>
|
#include <QtCore/QDir>
|
||||||
#include <QtCore/QFileInfo>
|
#include <QtCore/QFileInfo>
|
||||||
#include <QtCore/QProcess>
|
#include <QtCore/QProcess>
|
||||||
|
@ -20,6 +21,8 @@
|
||||||
#include <QtCore/QRegularExpression>
|
#include <QtCore/QRegularExpression>
|
||||||
#include <QtGui/QDesktopServices>
|
#include <QtGui/QDesktopServices>
|
||||||
|
|
||||||
|
#include "../SharedLogging.h"
|
||||||
|
|
||||||
|
|
||||||
QString FileUtils::readFile(const QString& filename) {
|
QString FileUtils::readFile(const QString& filename) {
|
||||||
QFile file(filename);
|
QFile file(filename);
|
||||||
|
@ -82,20 +85,54 @@ QString FileUtils::standardPath(QString subfolder) {
|
||||||
// standard path
|
// standard path
|
||||||
// Mac: ~/Library/Application Support/Interface
|
// Mac: ~/Library/Application Support/Interface
|
||||||
QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
|
QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
|
||||||
|
|
||||||
if (!subfolder.startsWith("/")) {
|
if (!subfolder.startsWith("/")) {
|
||||||
subfolder.prepend("/");
|
subfolder.prepend("/");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!subfolder.endsWith("/")) {
|
if (!subfolder.endsWith("/")) {
|
||||||
subfolder.append("/");
|
subfolder.append("/");
|
||||||
}
|
}
|
||||||
|
|
||||||
path.append(subfolder);
|
path.append(subfolder);
|
||||||
QDir logDir(path);
|
QDir logDir(path);
|
||||||
if (!logDir.exists(path)) {
|
if (!logDir.exists(path)) {
|
||||||
logDir.mkpath(path);
|
logDir.mkpath(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString FileUtils::replaceDateTimeTokens(const QString& originalPath) {
|
||||||
|
// Filter for specific tokens potentially present in the path:
|
||||||
|
auto now = QDateTime::currentDateTime();
|
||||||
|
QString path = originalPath;
|
||||||
|
path.replace("{DATE}", now.date().toString("yyyyMMdd"));
|
||||||
|
path.replace("{TIME}", now.time().toString("HHmm"));
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString FileUtils::computeDocumentPath(const QString& originalPath) {
|
||||||
|
// If the filename is relative, turn it into an absolute path relative to the document directory.
|
||||||
|
QString path = originalPath;
|
||||||
|
QFileInfo originalFileInfo(originalPath);
|
||||||
|
if (originalFileInfo.isRelative()) {
|
||||||
|
QString docsLocation = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
|
||||||
|
path = docsLocation + "/" + originalPath;
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FileUtils::canCreateFile(const QString& fullPath) {
|
||||||
|
// If the file exists and we can't remove it, fail early
|
||||||
|
QFileInfo fileInfo(fullPath);
|
||||||
|
if (fileInfo.exists() && !QFile::remove(fullPath)) {
|
||||||
|
qDebug(shared) << "unable to overwrite file '" << fullPath << "'";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
QDir dir(fileInfo.absolutePath());
|
||||||
|
if (!dir.exists()) {
|
||||||
|
if (!dir.mkpath(fullPath)) {
|
||||||
|
qDebug(shared) << "unable to create dir '" << dir.absolutePath() << "'";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -21,6 +21,9 @@ public:
|
||||||
static QString standardPath(QString subfolder);
|
static QString standardPath(QString subfolder);
|
||||||
static QString readFile(const QString& filename);
|
static QString readFile(const QString& filename);
|
||||||
static QStringList readLines(const QString& filename, QString::SplitBehavior splitBehavior = QString::KeepEmptyParts);
|
static QStringList readLines(const QString& filename, QString::SplitBehavior splitBehavior = QString::KeepEmptyParts);
|
||||||
|
static QString replaceDateTimeTokens(const QString& path);
|
||||||
|
static QString computeDocumentPath(const QString& path);
|
||||||
|
static bool canCreateFile(const QString& fullPath);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_FileUtils_h
|
#endif // hifi_FileUtils_h
|
||||||
|
|
Loading…
Reference in a new issue