Even though it would make more sense to evaluate %APPDATA%, VapourSynth apparently ignores that one. We set up %APPDATA% anyway, just to be sure.
buildCommandLine(cmdLine_Encode, (pipedSource != NULL), clipInfo, m_indexFile, pass, passLogFile);
log("Creating encoder process:");
- if(!startProcess(processEncode, getBinaryPath(), cmdLine_Encode, true, &getExtraPaths()))
+ if(!startProcess(processEncode, getBinaryPath(), cmdLine_Encode, true, &getExtraPaths(), &getExtraEnv()))
{
return false;
}
//MUtils
#include <MUtils/Global.h>
+#include <MUtils/OSSupport.h>
#include <MUtils/Exception.h>
//Qt
checkSourceProperties_init(patterns, cmdLine);
log("Creating process:");
- if(!startProcess(process, getBinaryPath(), cmdLine, true, &getExtraPaths()))
+ if(!startProcess(process, getBinaryPath(), cmdLine, true, &getExtraPaths(), &getExtraEnv()))
{
return false;;
}
buildCommandLine(cmdLine_Input);
log("Creating input process:");
- if(!startProcess(processInput, getBinaryPath(), cmdLine_Input, false, &getExtraPaths()))
+ if(!startProcess(processInput, getBinaryPath(), cmdLine_Input, false, &getExtraPaths(), &getExtraEnv()))
{
return false;
}
{
MUTILS_THROW("[getSourceInfo] This function must be overwritten in sub-classes!");
}
+
+// ------------------------------------------------------------
+// Auxiliary FUnctions
+// ------------------------------------------------------------
+
+QHash<QString, QString> AbstractSource::getExtraEnv(void) const
+{
+ QHash<QString, QString> extraEnv;
+
+ const QString profilePath = MUtils::OS::known_folder(MUtils::OS::FOLDER_USER_PROFILE);
+ if (!profilePath.isEmpty())
+ {
+ extraEnv.insert("USERPROFILE", QDir::toNativeSeparators(profilePath));
+ }
+
+ const QString appDataPath = MUtils::OS::known_folder(MUtils::OS::FOLDER_ROAMING_DATA);
+ if (!appDataPath.isEmpty())
+ {
+ extraEnv.insert("APPDATA", QDir::toNativeSeparators(appDataPath));
+ }
+
+ return extraEnv;
+}
\ No newline at end of file
static const AbstractSourceInfo& getSourceInfo(void);
protected:
+ virtual QHash<QString, QString> getExtraEnv(void) const;
+
virtual void checkSourceProperties_init(QList<QRegExp*> &patterns, QStringList &cmdLine) = 0;
virtual void checkSourceProperties_parseLine(const QString &line, const QList<QRegExp*> &patterns, ClipInfo &clipInfo) = 0;
}
// ------------------------------------------------------------
-// Check Source Properties
+// Source Processing
// ------------------------------------------------------------
void VapoursynthSource::buildCommandLine(QStringList &cmdLine)
checkVersion_init(patterns, cmdLine);
log("Creating process:");
- if(!startProcess(process, getBinaryPath(), cmdLine, true, &getExtraPaths()))
+ if(!startProcess(process, getBinaryPath(), cmdLine, true, &getExtraPaths(), &getExtraEnv()))
{
return false;
}
// Process Creation
// ------------------------------------------------------------
-bool AbstractTool::startProcess(QProcess &process, const QString &program, const QStringList &args, bool mergeChannels, const QStringList *const extraPaths)
+bool AbstractTool::startProcess(QProcess &process, const QString &program, const QStringList &args, bool mergeChannels, const QStringList *const extraPaths, const QHash<QString, QString> *const extraEnv)
{
QMutexLocker lock(&s_mutexStartProcess);
log(commandline2string(program, args) + "\n");
- MUtils::init_process(process, QDir::tempPath(), true, extraPaths);
+ MUtils::init_process(process, QDir::tempPath(), true, extraPaths, extraEnv);
if(!mergeChannels)
{
process.setProcessChannelMode(QProcess::SeparateChannels);
#include <QUuid>
#include <QMutex>
#include <QStringList>
+#include <QHash>
class OptionsModel;
class SysinfoModel;
static const unsigned int m_processTimeoutWarning = 24;
virtual QString getBinaryPath(void) const = 0;
+ virtual QHash<QString, QString> getExtraEnv(void) const { return QHash<QString, QString>(); }
virtual QStringList getExtraPaths(void) const { return QStringList(); }
virtual void checkVersion_init(QList<QRegExp*> &patterns, QStringList &cmdLine) = 0;
void setProgress(unsigned int newProgress) { emit progressChanged(newProgress); }
void setDetails(const QString &text) { emit detailsChanged(text); }
- bool startProcess(QProcess &process, const QString &program, const QStringList &args, bool mergeChannels = true, const QStringList *const extraPath = NULL);
+ bool startProcess(QProcess &process, const QString &program, const QStringList &args, bool mergeChannels = true, const QStringList *const extraPath = NULL, const QHash<QString, QString> *const extraEnv = NULL);
JobObject *const m_jobObject;
const OptionsModel *const m_options;