Store all files in the current directory for portable installations. Fixes #43

This commit is contained in:
Cameron Gutman
2018-08-16 21:04:47 -07:00
parent 345e800abd
commit 38ff2bf5cb
6 changed files with 79 additions and 12 deletions

View File

@@ -88,7 +88,8 @@ SOURCES += \
gui/computermodel.cpp \
gui/appmodel.cpp \
streaming/streamutils.cpp \
backend/autoupdatechecker.cpp
backend/autoupdatechecker.cpp \
path.cpp
HEADERS += \
utils.h \
@@ -104,7 +105,8 @@ HEADERS += \
gui/appmodel.h \
streaming/video/decoder.h \
streaming/streamutils.h \
backend/autoupdatechecker.h
backend/autoupdatechecker.h \
path.h
# Platform-specific renderers and decoders
ffmpeg {

View File

@@ -1,13 +1,12 @@
#include "boxartmanager.h"
#include "../path.h"
#include <QStandardPaths>
#include <QImageReader>
#include <QImageWriter>
BoxArtManager::BoxArtManager(QObject *parent) :
QObject(parent),
m_BoxArtDir(
QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/boxart")
m_BoxArtDir(Path::getBoxArtCacheDir())
{
if (!m_BoxArtDir.exists()) {
m_BoxArtDir.mkpath(".");

View File

@@ -11,6 +11,7 @@
#define SDL_MAIN_HANDLED
#include <SDL.h>
#include "path.h"
#include "gui/computermodel.h"
#include "gui/appmodel.h"
#include "backend/autoupdatechecker.h"
@@ -130,15 +131,23 @@ void qtLogToDiskHandler(QtMsgType type, const QMessageLogContext&, const QString
int main(int argc, char *argv[])
{
if (QFile(QDir::currentPath() + "/portable.dat").exists()) {
qInfo() << "Running in portable mode from:" << QDir::currentPath();
QSettings::setDefaultFormat(QSettings::IniFormat);
QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, QDir::currentPath());
QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, QDir::currentPath());
// Initialize paths for portable mode
Path::initialize(true);
}
else {
// Initialize paths for standard installation
Path::initialize(false);
}
#ifdef USE_CUSTOM_LOGGER
#ifdef LOG_TO_FILE
#ifdef Q_OS_DARWIN
// On macOS, $TMPDIR is some random folder under /var/folders/ that nobody can
// easily find, so use the system's global tmp directory instead.
QDir tempDir("/tmp");
#else
QDir tempDir(QDir::tempPath());
#endif
QDir tempDir(Path::getLogDir());
s_LoggerFile = new QFile(tempDir.filePath(QString("Moonlight-%1.log").arg(QDateTime::currentSecsSinceEpoch())));
if (s_LoggerFile->open(QIODevice::WriteOnly)) {
qInfo() << "Redirecting log output to " << s_LoggerFile->fileName();

39
app/path.cpp Normal file
View File

@@ -0,0 +1,39 @@
#include "path.h"
#include <QtDebug>
#include <QDir>
#include <QStandardPaths>
#include <QSettings>
QString Path::s_LogDir;
QString Path::s_BoxArtCacheDir;
QString Path::getLogDir()
{
Q_ASSERT(!s_LogDir.isEmpty());
return s_LogDir;
}
QString Path::getBoxArtCacheDir()
{
Q_ASSERT(!s_BoxArtCacheDir.isEmpty());
return s_BoxArtCacheDir;
}
void Path::initialize(bool portable)
{
if (portable) {
s_LogDir = QDir::currentPath();
s_BoxArtCacheDir = QDir::currentPath() + "/boxart";
}
else {
#ifdef Q_OS_DARWIN
// On macOS, $TMPDIR is some random folder under /var/folders/ that nobody can
// easily find, so use the system's global tmp directory instead.
s_LogDir = "/tmp";
#else
s_LogDir = QDir::tempPath();
#endif
s_BoxArtCacheDir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/boxart";
}
}

16
app/path.h Normal file
View File

@@ -0,0 +1,16 @@
#pragma once
#include <QString>
class Path
{
public:
static QString getLogDir();
static QString getBoxArtCacheDir();
static void initialize(bool portable);
static QString s_LogDir;
static QString s_BoxArtCacheDir;
};