Implemented a method to "detect" the user's TEMP folder that doesn't depend on the %TMP% environment variable. QDir::temp() internally uses GetTempPath(), which *does* depend on %TMP%.
This commit is contained in:
parent
801500ce94
commit
40b0300284
@ -25,7 +25,7 @@
|
||||
#define VER_LAMEXP_MAJOR 4
|
||||
#define VER_LAMEXP_MINOR_HI 0
|
||||
#define VER_LAMEXP_MINOR_LO 0
|
||||
#define VER_LAMEXP_BUILD 128
|
||||
#define VER_LAMEXP_BUILD 130
|
||||
#define VER_LAMEXP_SUFFIX TechPreview
|
||||
|
||||
/*
|
||||
|
@ -30,7 +30,6 @@
|
||||
#include <QFileDialog>
|
||||
#include <QTimer>
|
||||
#include <QProcess>
|
||||
#include <QUuid>
|
||||
#include <QDate>
|
||||
#include <QRegExp>
|
||||
#include <QDesktopServices>
|
||||
@ -197,7 +196,7 @@ void UpdateDialog::checkForUpdates(void)
|
||||
if(connectionScore < MIN_CONNSCORE)
|
||||
{
|
||||
m_logFile->append(QStringList() << "" << "Testing host:" << known_hosts[i] << "");
|
||||
QString outFile = QString("%1/%2.htm").arg(QDir::tempPath(), QUuid::createUuid().toString());
|
||||
QString outFile = QString("%1/%2.htm").arg(lamexp_temp_folder(), lamexp_rand_str());
|
||||
if(getFile(known_hosts[i], outFile))
|
||||
{
|
||||
connectionScore++;
|
||||
@ -288,9 +287,9 @@ bool UpdateDialog::tryUpdateMirror(UpdateInfo *updateInfo, const QString &url)
|
||||
bool success = false;
|
||||
m_logFile->append(QStringList() << "" << "Trying mirror:" << url);
|
||||
|
||||
QUuid uuid = QUuid::createUuid();
|
||||
QString outFileVersionInfo = QString("%1/%2.ver").arg(QDir::tempPath(), uuid.toString());
|
||||
QString outFileSignature = QString("%1/%2.sig").arg(QDir::tempPath(), uuid.toString());
|
||||
QString randPart = lamexp_rand_str();
|
||||
QString outFileVersionInfo = QString("%1/%2.ver").arg(lamexp_temp_folder(), randPart);
|
||||
QString outFileSignature = QString("%1/%2.sig").arg(lamexp_temp_folder(), randPart);
|
||||
|
||||
m_logFile->append(QStringList() << "" << "Downloading update info:");
|
||||
bool ok1 = getFile(QString("%1%2").arg(url,mirror_url_postfix), outFileVersionInfo);
|
||||
@ -373,15 +372,12 @@ bool UpdateDialog::checkSignature(const QString &file, const QString &signature)
|
||||
qWarning("CheckSignature: File and signature should be in same folder!");
|
||||
return false;
|
||||
}
|
||||
|
||||
QString keyring = QString("%1/%2.gpg").arg(QFileInfo(file).absolutePath(), QUuid::createUuid().toString());
|
||||
|
||||
if(!QFile::copy(m_binaryKeys, keyring))
|
||||
if(QFileInfo(file).absolutePath().compare(QFileInfo(m_binaryKeys).absolutePath(), Qt::CaseInsensitive) != 0)
|
||||
{
|
||||
qWarning("CheckSignature: Failed to copy keyring file to destination folder!");
|
||||
qWarning("CheckSignature: File and keyring should be in same folder!");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
QProcess process;
|
||||
process.setProcessChannelMode(QProcess::MergedChannels);
|
||||
process.setReadChannel(QProcess::StandardOutput);
|
||||
@ -392,11 +388,10 @@ bool UpdateDialog::checkSignature(const QString &file, const QString &signature)
|
||||
connect(&process, SIGNAL(finished(int,QProcess::ExitStatus)), &loop, SLOT(quit()));
|
||||
connect(&process, SIGNAL(readyRead()), &loop, SLOT(quit()));
|
||||
|
||||
process.start(m_binaryGnuPG, QStringList() << "--homedir" << "." << "--keyring" << QFileInfo(keyring).fileName() << QFileInfo(signature).fileName() << QFileInfo(file).fileName());
|
||||
process.start(m_binaryGnuPG, QStringList() << "--homedir" << "." << "--keyring" << QFileInfo(m_binaryKeys).fileName() << QFileInfo(signature).fileName() << QFileInfo(file).fileName());
|
||||
|
||||
if(!process.waitForStarted())
|
||||
{
|
||||
QFile::remove(keyring);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -408,8 +403,6 @@ bool UpdateDialog::checkSignature(const QString &file, const QString &signature)
|
||||
m_logFile->append(QString::fromLatin1(process.readLine()).simplified());
|
||||
}
|
||||
}
|
||||
|
||||
QFile::remove(keyring);
|
||||
|
||||
m_logFile->append(QString().sprintf("Exited with code %d", process.exitCode()));
|
||||
return (process.exitCode() == 0);
|
||||
|
@ -38,11 +38,15 @@
|
||||
#include <QMutex>
|
||||
#include <QTextCodec>
|
||||
#include <QLibrary>
|
||||
#include <QRegExp>
|
||||
|
||||
//LameXP includes
|
||||
#include "Resource.h"
|
||||
#include "LockedFile.h"
|
||||
|
||||
//Windows includes
|
||||
#include <Windows.h>
|
||||
|
||||
//CRT includes
|
||||
#include <stdio.h>
|
||||
#include <io.h>
|
||||
@ -583,15 +587,58 @@ void lamexp_ipc_read(unsigned int *command, char* message, size_t buffSize)
|
||||
LAMEXP_DELETE(lamexp_ipc);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get a random string
|
||||
*/
|
||||
QString lamexp_rand_str(void)
|
||||
{
|
||||
QRegExp regExp("\\{(\\w+)-(\\w+)-(\\w+)-(\\w+)-(\\w+)\\}");
|
||||
QString uuid = QUuid::createUuid().toString();
|
||||
|
||||
if(regExp.indexIn(uuid) >= 0)
|
||||
{
|
||||
return QString().append(regExp.cap(1)).append(regExp.cap(2)).append(regExp.cap(3)).append(regExp.cap(4)).append(regExp.cap(5));
|
||||
}
|
||||
|
||||
throw "The RegExp didn't match on the UUID string. This shouldn't happen ;-)";
|
||||
}
|
||||
|
||||
/*
|
||||
* Get LameXP temp folder
|
||||
*/
|
||||
const QString &lamexp_temp_folder(void)
|
||||
{
|
||||
const GUID LocalAppDataLowID={0xA520A1A4,0x1780,0x4FF6,{0xBD,0x18,0x16,0x73,0x43,0xC5,0xAF,0x16}};
|
||||
typedef HANDLE (WINAPI *SHGetKnownFolderPathFun)(__in const GUID &rfid, __in DWORD dwFlags, __in HANDLE hToken, __out PWSTR *ppszPath);
|
||||
|
||||
if(g_lamexp_temp_folder.isEmpty())
|
||||
{
|
||||
QDir temp = QDir::temp();
|
||||
|
||||
QLibrary Kernel32Lib("shell32.dll");
|
||||
SHGetKnownFolderPathFun SHGetKnownFolderPathPtr = (SHGetKnownFolderPathFun) Kernel32Lib.resolve("SHGetKnownFolderPath");
|
||||
|
||||
if(SHGetKnownFolderPathPtr)
|
||||
{
|
||||
WCHAR *localAppDataLowPath = NULL;
|
||||
if(SHGetKnownFolderPathPtr(LocalAppDataLowID, 0x00008000, NULL, &localAppDataLowPath) == S_OK)
|
||||
{
|
||||
QDir localAppDataLow = QDir(QDir::fromNativeSeparators(QString::fromUtf16(reinterpret_cast<const unsigned short*>(localAppDataLowPath))));
|
||||
if(localAppDataLow.exists())
|
||||
{
|
||||
if(!localAppDataLow.entryList(QDir::AllDirs).contains("Temp"))
|
||||
{
|
||||
localAppDataLow.mkdir("Temp");
|
||||
}
|
||||
if(localAppDataLow.cd("Temp"))
|
||||
{
|
||||
temp.setPath(localAppDataLow.canonicalPath());
|
||||
}
|
||||
}
|
||||
CoTaskMemFree(localAppDataLowPath);
|
||||
}
|
||||
}
|
||||
|
||||
if(!temp.exists())
|
||||
{
|
||||
temp.mkpath(".");
|
||||
@ -602,19 +649,19 @@ const QString &lamexp_temp_folder(void)
|
||||
}
|
||||
}
|
||||
|
||||
QString uuid = QUuid::createUuid().toString();
|
||||
if(!temp.mkdir(uuid))
|
||||
QString subDir = QString("%1.tmp").arg(lamexp_rand_str());
|
||||
if(!temp.mkdir(subDir))
|
||||
{
|
||||
qFatal("Temporary directory could not be created:\n%s", QString("%1/%2").arg(temp.canonicalPath(), uuid).toUtf8().constData());
|
||||
qFatal("Temporary directory could not be created:\n%s", QString("%1/%2").arg(temp.canonicalPath(), subDir).toUtf8().constData());
|
||||
return g_lamexp_temp_folder;
|
||||
}
|
||||
if(!temp.cd(uuid))
|
||||
if(!temp.cd(subDir))
|
||||
{
|
||||
qFatal("Temporary directory could not be entered:\n%s", QString("%1/%2").arg(temp.canonicalPath(), uuid).toUtf8().constData());
|
||||
qFatal("Temporary directory could not be entered:\n%s", QString("%1/%2").arg(temp.canonicalPath(), subDir).toUtf8().constData());
|
||||
return g_lamexp_temp_folder;
|
||||
}
|
||||
|
||||
QFile testFile(QString("%1/~test.txt").arg(temp.canonicalPath()));
|
||||
QFile testFile(QString("%1/.%2").arg(temp.canonicalPath(), lamexp_rand_str()));
|
||||
if(!testFile.open(QIODevice::ReadWrite) || testFile.write("LAMEXP_TEST\n") < 12)
|
||||
{
|
||||
qFatal("Write access to temporary directory has been denied:\n%s", temp.canonicalPath().toUtf8().constData());
|
||||
|
@ -76,6 +76,7 @@ bool lamexp_check_tool(const QString &toolName);
|
||||
const QString lamexp_lookup_tool(const QString &toolName);
|
||||
unsigned int lamexp_tool_version(const QString &toolName);
|
||||
void lamexp_finalization(void);
|
||||
QString lamexp_rand_str(void);
|
||||
const QString &lamexp_temp_folder(void);
|
||||
void lamexp_ipc_read(unsigned int *command, char* message, size_t buffSize);
|
||||
void lamexp_ipc_send(unsigned int command, const char* message);
|
||||
|
@ -51,6 +51,8 @@ int lamexp_main(int argc, char* argv[])
|
||||
//Init console
|
||||
lamexp_init_console(argc, argv);
|
||||
|
||||
lamexp_rand_str();
|
||||
|
||||
//Print version info
|
||||
qDebug("LameXP - Audio Encoder Front-End");
|
||||
qDebug("Version %d.%02d %s, Build %d [%s], compiled with %s", lamexp_version_major(), lamexp_version_minor(), lamexp_version_release(), lamexp_version_build(), lamexp_version_date().toString(Qt::ISODate).toLatin1().constData(), lamexp_version_compiler());
|
||||
|
@ -222,7 +222,7 @@ QString ProcessThread::generateOutFileName(void)
|
||||
}
|
||||
}
|
||||
|
||||
QFile writeTest(QString("%1/%2").arg(targetDir.canonicalPath(), QUuid::createUuid().toString()));
|
||||
QFile writeTest(QString("%1/.%2").arg(targetDir.canonicalPath(), lamexp_rand_str()));
|
||||
if(!writeTest.open(QIODevice::ReadWrite))
|
||||
{
|
||||
handleMessage(QString("The target output directory is NOT writable:\n%1").arg(targetDir.absolutePath()));
|
||||
@ -252,11 +252,11 @@ QString ProcessThread::generateOutFileName(void)
|
||||
QString ProcessThread::generateTempFileName(void)
|
||||
{
|
||||
QMutexLocker lock(m_mutex_genFileName);
|
||||
QString tempFileName = QString("%1/%2.wav").arg(QDir::tempPath(), QUuid::createUuid().toString());
|
||||
QString tempFileName = QString("%1/%2.wav").arg(lamexp_temp_folder(), lamexp_rand_str());
|
||||
|
||||
while(QFileInfo(tempFileName).exists())
|
||||
{
|
||||
tempFileName = QString("%1/%2.wav").arg(QDir::tempPath(), QUuid::createUuid().toString());
|
||||
tempFileName = QString("%1/%2.wav").arg(lamexp_temp_folder(), lamexp_rand_str());
|
||||
}
|
||||
|
||||
QFile file(tempFileName);
|
||||
|
Loading…
Reference in New Issue
Block a user