Merge with develop

--HG--
branch : compatibility-develop
This commit is contained in:
kervala 2016-10-10 16:36:38 +02:00
commit 41d0e70064
2 changed files with 41 additions and 0 deletions

View file

@ -12,5 +12,6 @@
<file>ryzom_installer.ini</file> <file>ryzom_installer.ini</file>
<file>Info.plist</file> <file>Info.plist</file>
<file>PkgInfo</file> <file>PkgInfo</file>
<file>shortcut.sh</file>
</qresource> </qresource>
</RCC> </RCC>

View file

@ -291,6 +291,26 @@ bool CFilesExtractor::exec()
return false; return false;
} }
static uint32 convertWindowsFileTimeToUnixTimestamp(const CNtfsFileTime &nt)
{
// first, convert it into second since jan1, 1601
uint64 t = nt.Low | (uint64(nt.High) << 32);
// offset to convert Windows file times to UNIX timestamp
uint64 offset = UINT64_CONSTANT(116444736000000000);
// adjust time base to unix epoch base
t -= offset;
// convert the resulting time into seconds
t /= 10; // microsec
t /= 1000; // millisec
t /= 1000; // sec
// return the resulting time
return uint32(t);
}
bool CFilesExtractor::extract7z() bool CFilesExtractor::extract7z()
{ {
Q7zFile inFile(m_sourceFile); Q7zFile inFile(m_sourceFile);
@ -432,10 +452,24 @@ bool CFilesExtractor::extract7z()
if (m_listener) m_listener->operationProgress(totalUncompressed, filename); if (m_listener) m_listener->operationProgress(totalUncompressed, filename);
// set attrinbutes
if (SzBitWithVals_Check(&db.Attribs, i)) if (SzBitWithVals_Check(&db.Attribs, i))
{
Set7zFileAttrib(destPath, db.Attribs.Vals[i]); Set7zFileAttrib(destPath, db.Attribs.Vals[i]);
} }
// set modification time
if (SzBitWithVals_Check(&db.MTime, i))
{
char buffer[1024];
if (!NLMISC::CFile::setFileModificationDate(qToUtf8(destPath), convertWindowsFileTimeToUnixTimestamp(db.MTime.Vals[i])))
{
qDebug() << "Unable to change date of " << destPath;
}
}
}
IAlloc_Free(&allocImp, outBuffer); IAlloc_Free(&allocImp, outBuffer);
} }
@ -550,6 +584,12 @@ bool CFilesExtractor::extractZip()
f.setPermissions(fi.permissions); f.setPermissions(fi.permissions);
f.close(); f.close();
// set the right modification date
if (!NLMISC::CFile::setFileModificationDate(qToUtf8(absPath), fi.lastModified.toTime_t()))
{
qDebug() << "Unable to change date of " << absPath;
}
if (m_listener) m_listener->operationProgress(currentSize, QFileInfo(absPath).fileName()); if (m_listener) m_listener->operationProgress(currentSize, QFileInfo(absPath).fileName());
} }
} }