Added new function to detect the current date. Slightly more robust against manipulations.
This commit is contained in:
parent
f689ce5646
commit
cb042bbf3c
@ -149,7 +149,7 @@ copy /Y "$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\bin\Win32\*.manifes
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions>
|
||||||
<AdditionalDependencies>QtCore4.lib;QtGui4.lib;Winmm.lib;Shlwapi.lib;Wininet.lib;PowrProf.lib;QKeccakHash_VS2012.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>QtCore4.lib;QtGui4.lib;Winmm.lib;Shlwapi.lib;Wininet.lib;PowrProf.lib;psapi.lib;QKeccakHash_VS2012.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<ShowProgress>LinkVerboseLib</ShowProgress>
|
<ShowProgress>LinkVerboseLib</ShowProgress>
|
||||||
<Version>
|
<Version>
|
||||||
</Version>
|
</Version>
|
||||||
@ -222,7 +222,7 @@ del "$(TargetDir)imageformats\q???d4.dll"
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions>
|
||||||
<AdditionalDependencies>QtCore.lib;QtGui.lib;QtSvg.lib;qtmain.lib;qsvg.lib;qico.lib;qtga.lib;Winmm.lib;imm32.lib;ws2_32.lib;Shlwapi.lib;Wininet.lib;PowrProf.lib;QKeccakHash_VS2012.lib;EncodePointer.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>QtCore.lib;QtGui.lib;QtSvg.lib;qtmain.lib;qsvg.lib;qico.lib;qtga.lib;Winmm.lib;imm32.lib;ws2_32.lib;Shlwapi.lib;Wininet.lib;PowrProf.lib;psapi.lib;QKeccakHash_VS2012.lib;EncodePointer.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<ShowProgress>LinkVerboseLib</ShowProgress>
|
<ShowProgress>LinkVerboseLib</ShowProgress>
|
||||||
<AdditionalLibraryDirectories>$(SolutionDir)\etc\Prerequisites\qt4_static\lib;$(SolutionDir)\etc\Prerequisites\qt4_static\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\EncodePointer\lib;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;$(SolutionDir)\etc\Prerequisites\keccak\lib\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(SolutionDir)\etc\Prerequisites\qt4_static\lib;$(SolutionDir)\etc\Prerequisites\qt4_static\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\EncodePointer\lib;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;$(SolutionDir)\etc\Prerequisites\keccak\lib\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
#define VER_LAMEXP_MINOR_LO 7
|
#define VER_LAMEXP_MINOR_LO 7
|
||||||
#define VER_LAMEXP_TYPE Alpha
|
#define VER_LAMEXP_TYPE Alpha
|
||||||
#define VER_LAMEXP_PATCH 7
|
#define VER_LAMEXP_PATCH 7
|
||||||
#define VER_LAMEXP_BUILD 1221
|
#define VER_LAMEXP_BUILD 1223
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Tool versions (minimum expected versions!)
|
// Tool versions (minimum expected versions!)
|
||||||
|
@ -473,7 +473,7 @@ void AboutDialog::initInformationTab(void)
|
|||||||
const QString copyrightStr = QString().sprintf
|
const QString copyrightStr = QString().sprintf
|
||||||
(
|
(
|
||||||
"Copyright (C) 2004-%04d LoRd_MuldeR <MuldeR2@GMX.de>. Some rights reserved.",
|
"Copyright (C) 2004-%04d LoRd_MuldeR <MuldeR2@GMX.de>. Some rights reserved.",
|
||||||
qMax(lamexp_version_date().year(), QDate::currentDate().year())
|
qMax(lamexp_version_date().year(), lamexp_current_date_safe().year())
|
||||||
);
|
);
|
||||||
|
|
||||||
QString aboutText;
|
QString aboutText;
|
||||||
@ -484,25 +484,27 @@ void AboutDialog::initInformationTab(void)
|
|||||||
aboutText += QString("%1<br>").arg(NOBR(tr("Please visit %1 for news and updates!").arg(LINK(lamexp_website_url()))));
|
aboutText += QString("%1<br>").arg(NOBR(tr("Please visit %1 for news and updates!").arg(LINK(lamexp_website_url()))));
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
const QDate currentDate = lamexp_current_date_safe();
|
||||||
if(LAMEXP_DEBUG)
|
if(LAMEXP_DEBUG)
|
||||||
{
|
{
|
||||||
int daysLeft = qMax(QDate::currentDate().daysTo(lamexp_version_expires()), 0);
|
int daysLeft = qMax(currentDate.daysTo(lamexp_version_expires()), 0);
|
||||||
aboutText += QString("<hr><font color=\"crimson\">%1</font>").arg(NOBR(QString("!!! --- DEBUG BUILD --- Expires at: %1 · Days left: %2 --- DEBUG BUILD --- !!!").arg(lamexp_version_expires().toString(Qt::ISODate), QString::number(daysLeft))));
|
aboutText += QString("<hr><font color=\"crimson\">%1</font>").arg(NOBR(QString("!!! --- DEBUG BUILD --- Expires at: %1 · Days left: %2 --- DEBUG BUILD --- !!!").arg(lamexp_version_expires().toString(Qt::ISODate), QString::number(daysLeft))));
|
||||||
}
|
}
|
||||||
else if(lamexp_version_demo())
|
else if(lamexp_version_demo())
|
||||||
{
|
{
|
||||||
int daysLeft = qMax(QDate::currentDate().daysTo(lamexp_version_expires()), 0);
|
int daysLeft = qMax(currentDate.daysTo(lamexp_version_expires()), 0);
|
||||||
aboutText += QString("<hr><font color=\"crimson\">%1</font>").arg(NOBR(tr("Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left.").arg(lamexp_version_expires().toString(Qt::ISODate), QString::number(daysLeft))));
|
aboutText += QString("<hr><font color=\"crimson\">%1</font>").arg(NOBR(tr("Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left.").arg(lamexp_version_expires().toString(Qt::ISODate), QString::number(daysLeft))));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
const QDate currentDate = lamexp_current_date_safe();
|
||||||
if(LAMEXP_DEBUG)
|
if(LAMEXP_DEBUG)
|
||||||
{
|
{
|
||||||
int daysLeft = qMax(QDate::currentDate().daysTo(lamexp_version_expires()), 0i64);
|
int daysLeft = qMax(currentDate.daysTo(lamexp_version_expires()), 0i64);
|
||||||
aboutText += QString("<hr><font color=\"crimson\">%1</font>").arg(NOBR(QString("!!! --- DEBUG BUILD --- Expires at: %1 · Days left: %2 --- DEBUG BUILD --- !!!").arg(lamexp_version_expires().toString(Qt::ISODate), QString::number(daysLeft))));
|
aboutText += QString("<hr><font color=\"crimson\">%1</font>").arg(NOBR(QString("!!! --- DEBUG BUILD --- Expires at: %1 · Days left: %2 --- DEBUG BUILD --- !!!").arg(lamexp_version_expires().toString(Qt::ISODate), QString::number(daysLeft))));
|
||||||
}
|
}
|
||||||
else if(lamexp_version_demo())
|
else if(lamexp_version_demo())
|
||||||
{
|
{
|
||||||
int daysLeft = qMax(QDate::currentDate().daysTo(lamexp_version_expires()), 0i64);
|
int daysLeft = qMax(currentDate.daysTo(lamexp_version_expires()), 0i64);
|
||||||
aboutText += QString("<hr><font color=\"crimson\">%1</font>").arg(NOBR(tr("Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left.").arg(lamexp_version_expires().toString(Qt::ISODate), QString::number(daysLeft))));
|
aboutText += QString("<hr><font color=\"crimson\">%1</font>").arg(NOBR(tr("Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left.").arg(lamexp_version_expires().toString(Qt::ISODate), QString::number(daysLeft))));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1273,7 +1273,7 @@ void MainWindow::windowShown(void)
|
|||||||
//Check for expiration
|
//Check for expiration
|
||||||
if(lamexp_version_demo())
|
if(lamexp_version_demo())
|
||||||
{
|
{
|
||||||
if(QDate::currentDate() >= lamexp_version_expires())
|
if(lamexp_current_date_safe() >= lamexp_version_expires())
|
||||||
{
|
{
|
||||||
qWarning("Binary has expired !!!");
|
qWarning("Binary has expired !!!");
|
||||||
PlaySound(MAKEINTRESOURCE(IDR_WAVE_WHAMMY), GetModuleHandle(NULL), SND_RESOURCE | SND_SYNC);
|
PlaySound(MAKEINTRESOURCE(IDR_WAVE_WHAMMY), GetModuleHandle(NULL), SND_RESOURCE | SND_SYNC);
|
||||||
@ -1300,7 +1300,7 @@ void MainWindow::windowShown(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Update reminder
|
//Update reminder
|
||||||
if(QDate::currentDate() >= lamexp_version_date().addYears(1))
|
if(lamexp_current_date_safe() >= lamexp_version_date().addYears(1))
|
||||||
{
|
{
|
||||||
qWarning("Binary is more than a year old, time to update!");
|
qWarning("Binary is more than a year old, time to update!");
|
||||||
int ret = QMessageBox::warning(this, tr("Urgent Update"), NOBR(tr("Your version of LameXP is more than a year old. Time for an update!")), tr("Check for Updates"), tr("Exit Program"), tr("Ignore"));
|
int ret = QMessageBox::warning(this, tr("Urgent Update"), NOBR(tr("Your version of LameXP is more than a year old. Time for an update!")), tr("Check for Updates"), tr("Exit Program"), tr("Ignore"));
|
||||||
@ -1326,7 +1326,7 @@ void MainWindow::windowShown(void)
|
|||||||
else if(m_settings->autoUpdateEnabled())
|
else if(m_settings->autoUpdateEnabled())
|
||||||
{
|
{
|
||||||
QDate lastUpdateCheck = QDate::fromString(m_settings->autoUpdateLastCheck(), Qt::ISODate);
|
QDate lastUpdateCheck = QDate::fromString(m_settings->autoUpdateLastCheck(), Qt::ISODate);
|
||||||
if(!firstRun && (!lastUpdateCheck.isValid() || QDate::currentDate() >= lastUpdateCheck.addDays(14)))
|
if(!firstRun && (!lastUpdateCheck.isValid() || lamexp_current_date_safe() >= lastUpdateCheck.addDays(14)))
|
||||||
{
|
{
|
||||||
if(QMessageBox::information(this, tr("Update Reminder"), NOBR(lastUpdateCheck.isValid() ? tr("Your last update check was more than 14 days ago. Check for updates now?") : tr("Your did not check for LameXP updates yet. Check for updates now?")), tr("Check for Updates"), tr("Postpone")) == 0)
|
if(QMessageBox::information(this, tr("Update Reminder"), NOBR(lastUpdateCheck.isValid() ? tr("Your last update check was more than 14 days ago. Check for updates now?") : tr("Your did not check for LameXP updates yet. Check for updates now?")), tr("Check for Updates"), tr("Postpone")) == 0)
|
||||||
{
|
{
|
||||||
|
@ -840,13 +840,13 @@ bool UpdateDialog::parseVersionInfo(const QString &file, UpdateInfo *updateInfo)
|
|||||||
m_logFile->append("WARNING: Version info timestamp is missing!");
|
m_logFile->append("WARNING: Version info timestamp is missing!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if(updateInfoDate.addMonths(VERSION_INFO_EXPIRES_MONTHS) < QDate::currentDate())
|
else if(updateInfoDate.addMonths(VERSION_INFO_EXPIRES_MONTHS) < lamexp_current_date_safe())
|
||||||
{
|
{
|
||||||
updateInfo->resetInfo();
|
updateInfo->resetInfo();
|
||||||
m_logFile->append(QString::fromLatin1("WARNING: This version info has expired at %1!").arg(updateInfoDate.addMonths(VERSION_INFO_EXPIRES_MONTHS).toString(Qt::ISODate)));
|
m_logFile->append(QString::fromLatin1("WARNING: This version info has expired at %1!").arg(updateInfoDate.addMonths(VERSION_INFO_EXPIRES_MONTHS).toString(Qt::ISODate)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if(QDate::currentDate() < updateInfoDate)
|
else if(lamexp_current_date_safe() < updateInfoDate)
|
||||||
{
|
{
|
||||||
m_logFile->append("Version info is from the future, take care!");
|
m_logFile->append("Version info is from the future, take care!");
|
||||||
qWarning("Version info is from the future, take care!");
|
qWarning("Version info is from the future, take care!");
|
||||||
|
@ -71,10 +71,8 @@
|
|||||||
#include <Objbase.h>
|
#include <Objbase.h>
|
||||||
#include <PowrProf.h>
|
#include <PowrProf.h>
|
||||||
|
|
||||||
//Debug only includes
|
//Process API
|
||||||
#if LAMEXP_DEBUG
|
|
||||||
#include <Psapi.h>
|
#include <Psapi.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
//Initialize static Qt plugins
|
//Initialize static Qt plugins
|
||||||
#ifdef QT_NODLL
|
#ifdef QT_NODLL
|
||||||
@ -2251,6 +2249,69 @@ unsigned int lamexp_rand(void)
|
|||||||
return rnd;
|
return rnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Determines the current date, resistant against certain manipulations
|
||||||
|
*/
|
||||||
|
QDate lamexp_current_date_safe(void)
|
||||||
|
{
|
||||||
|
const DWORD MAX_PROC = 1024;
|
||||||
|
DWORD *processes = new DWORD[MAX_PROC];
|
||||||
|
DWORD bytesReturned = 0;
|
||||||
|
|
||||||
|
if(!EnumProcesses(processes, sizeof(DWORD) * MAX_PROC, &bytesReturned))
|
||||||
|
{
|
||||||
|
LAMEXP_DELETE_ARRAY(processes);
|
||||||
|
return QDate::currentDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
const DWORD procCount = bytesReturned / sizeof(DWORD);
|
||||||
|
ULARGE_INTEGER lastStartTime;
|
||||||
|
memset(&lastStartTime, 0, sizeof(ULARGE_INTEGER));
|
||||||
|
|
||||||
|
for(DWORD i = 0; i < procCount; i++)
|
||||||
|
{
|
||||||
|
HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, processes[i]);
|
||||||
|
if(hProc)
|
||||||
|
{
|
||||||
|
FILETIME processTime[4];
|
||||||
|
if(GetProcessTimes(hProc, &processTime[0], &processTime[1], &processTime[2], &processTime[3]))
|
||||||
|
{
|
||||||
|
ULARGE_INTEGER timeCreation;
|
||||||
|
timeCreation.LowPart = processTime[0].dwLowDateTime;
|
||||||
|
timeCreation.HighPart = processTime[0].dwHighDateTime;
|
||||||
|
if(timeCreation.QuadPart > lastStartTime.QuadPart)
|
||||||
|
{
|
||||||
|
lastStartTime.QuadPart = timeCreation.QuadPart;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CloseHandle(hProc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LAMEXP_DELETE_ARRAY(processes);
|
||||||
|
|
||||||
|
FILETIME lastStartTime_fileTime;
|
||||||
|
lastStartTime_fileTime.dwHighDateTime = lastStartTime.HighPart;
|
||||||
|
lastStartTime_fileTime.dwLowDateTime = lastStartTime.LowPart;
|
||||||
|
|
||||||
|
FILETIME lastStartTime_localTime;
|
||||||
|
if(!FileTimeToLocalFileTime(&lastStartTime_fileTime, &lastStartTime_localTime))
|
||||||
|
{
|
||||||
|
memcpy(&lastStartTime_localTime, &lastStartTime_fileTime, sizeof(FILETIME));
|
||||||
|
}
|
||||||
|
|
||||||
|
SYSTEMTIME lastStartTime_system;
|
||||||
|
if(!FileTimeToSystemTime(&lastStartTime_localTime, &lastStartTime_system))
|
||||||
|
{
|
||||||
|
memset(&lastStartTime_system, 0, sizeof(SYSTEMTIME));
|
||||||
|
lastStartTime_system.wYear = 1970; lastStartTime_system.wMonth = lastStartTime_system.wDay = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QDate currentDate = QDate::currentDate();
|
||||||
|
const QDate processDate = QDate(lastStartTime_system.wYear, lastStartTime_system.wMonth, lastStartTime_system.wDay);
|
||||||
|
return (currentDate >= processDate) ? currentDate : processDate;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Entry point checks
|
* Entry point checks
|
||||||
*/
|
*/
|
||||||
@ -2329,6 +2390,9 @@ void lamexp_fatal_exit(const wchar_t* exitMessage, const wchar_t* errorBoxMessag
|
|||||||
TerminateProcess(GetCurrentProcess(), -1);
|
TerminateProcess(GetCurrentProcess(), -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Sleep(30000);
|
||||||
|
TerminateProcess(GetCurrentProcess(), -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -158,6 +158,7 @@ const QString lamexp_clean_filename(const QString &str);
|
|||||||
const QString lamexp_clean_filepath(const QString &str);
|
const QString lamexp_clean_filepath(const QString &str);
|
||||||
void lamexp_seed_rand(void);
|
void lamexp_seed_rand(void);
|
||||||
unsigned int lamexp_rand(void);
|
unsigned int lamexp_rand(void);
|
||||||
|
QDate lamexp_current_date_safe(void);
|
||||||
void lamexp_fatal_exit(const wchar_t* exitMessage, const wchar_t* errorBoxMessage = NULL);
|
void lamexp_fatal_exit(const wchar_t* exitMessage, const wchar_t* errorBoxMessage = NULL);
|
||||||
|
|
||||||
//Debug-only functions
|
//Debug-only functions
|
||||||
|
@ -57,7 +57,7 @@ static int lamexp_main(int argc, char* argv[])
|
|||||||
|
|
||||||
//Print version info
|
//Print version info
|
||||||
qDebug("LameXP - Audio Encoder Front-End v%d.%02d %s (Build #%03d)", lamexp_version_major(), lamexp_version_minor(), lamexp_version_release(), lamexp_version_build());
|
qDebug("LameXP - Audio Encoder Front-End v%d.%02d %s (Build #%03d)", lamexp_version_major(), lamexp_version_minor(), lamexp_version_release(), lamexp_version_build());
|
||||||
qDebug("Copyright (c) 2004-%04d LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.", qMax(lamexp_version_date().year(),QDate::currentDate().year()));
|
qDebug("Copyright (c) 2004-%04d LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.", qMax(lamexp_version_date().year(), lamexp_current_date_safe().year()));
|
||||||
qDebug("Built on %s at %s with %s for Win-%s.\n", lamexp_version_date().toString(Qt::ISODate).toLatin1().constData(), lamexp_version_time(), lamexp_version_compiler(), lamexp_version_arch());
|
qDebug("Built on %s at %s with %s for Win-%s.\n", lamexp_version_date().toString(Qt::ISODate).toLatin1().constData(), lamexp_version_time(), lamexp_version_compiler(), lamexp_version_arch());
|
||||||
|
|
||||||
//print license info
|
//print license info
|
||||||
@ -98,9 +98,10 @@ static int lamexp_main(int argc, char* argv[])
|
|||||||
//Check for expiration
|
//Check for expiration
|
||||||
if(lamexp_version_demo())
|
if(lamexp_version_demo())
|
||||||
{
|
{
|
||||||
if(QDate::currentDate().addDays(1) < lamexp_version_date())
|
const QDate currentDate = lamexp_current_date_safe();
|
||||||
|
if(currentDate.addDays(1) < lamexp_version_date())
|
||||||
{
|
{
|
||||||
qFatal("System's date (%s) is before LameXP build date (%s). Huh?", QDate::currentDate().toString(Qt::ISODate).toLatin1().constData(), lamexp_version_date().toString(Qt::ISODate).toLatin1().constData());
|
qFatal("System's date (%s) is before LameXP build date (%s). Huh?", currentDate.toString(Qt::ISODate).toLatin1().constData(), lamexp_version_date().toString(Qt::ISODate).toLatin1().constData());
|
||||||
}
|
}
|
||||||
qWarning(QString("Note: This demo (pre-release) version of LameXP will expire at %1.\n").arg(lamexp_version_expires().toString(Qt::ISODate)).toLatin1().constData());
|
qWarning(QString("Note: This demo (pre-release) version of LameXP will expire at %1.\n").arg(lamexp_version_expires().toString(Qt::ISODate)).toLatin1().constData());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user