mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Skin Packager: Fixed that empty folders were not added
This commit is contained in:
parent
c78aad0474
commit
fe82e87b97
@ -379,50 +379,60 @@ unsigned __stdcall CDialogPackage::PackagerThreadProc(void* pParam)
|
|||||||
|
|
||||||
bool CDialogPackage::AddFileToPackage(const WCHAR* filePath, const WCHAR* zipPath)
|
bool CDialogPackage::AddFileToPackage(const WCHAR* filePath, const WCHAR* zipPath)
|
||||||
{
|
{
|
||||||
HANDLE file = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
std::string zipPathAscii = ConvertToAscii(zipPath);
|
||||||
if (file == INVALID_HANDLE_VALUE)
|
for (int i = 0, isize = zipPathAscii.length(); i < isize; ++i)
|
||||||
{
|
{
|
||||||
return false;
|
if (zipPathAscii[i] == '\\')
|
||||||
|
{
|
||||||
|
zipPathAscii[i] = '/';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set zip file time
|
int open = zipOpenNewFileInZip(m_ZipFile, zipPathAscii.c_str(), NULL, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_DEFAULT_COMPRESSION);
|
||||||
zip_fileinfo zi = {0};
|
|
||||||
FILETIME lastWriteTime;
|
|
||||||
FILETIME localTime;
|
|
||||||
GetFileTime(file, NULL, NULL, &lastWriteTime);
|
|
||||||
FileTimeToLocalFileTime(&lastWriteTime, &localTime);
|
|
||||||
FileTimeToDosDateTime(&localTime, ((LPWORD)&zi.dosDate) + 1, ((LPWORD)&zi.dosDate) + 0);
|
|
||||||
|
|
||||||
std::string zipPathAscii = ConvertToAscii(zipPath);
|
|
||||||
int open = zipOpenNewFileInZip(m_ZipFile, zipPathAscii.c_str(), &zi, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_DEFAULT_COMPRESSION);
|
|
||||||
if (open != ZIP_OK)
|
if (open != ZIP_OK)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool result = true;
|
bool result = true;
|
||||||
do
|
|
||||||
|
if (filePath)
|
||||||
{
|
{
|
||||||
const DWORD bufferSize = 16 * 1024;
|
HANDLE file = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
BYTE buffer[bufferSize];
|
if (file == INVALID_HANDLE_VALUE)
|
||||||
DWORD readSize;
|
|
||||||
if (!ReadFile(file, buffer, bufferSize, &readSize, NULL))
|
|
||||||
{
|
{
|
||||||
result = false;
|
result = false;
|
||||||
}
|
}
|
||||||
else if (readSize != 0)
|
|
||||||
{
|
|
||||||
result = zipWriteInFileInZip(m_ZipFile, buffer, (UINT)readSize) == ZIP_OK;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// EOF
|
do
|
||||||
break;
|
{
|
||||||
|
const DWORD bufferSize = 16 * 1024;
|
||||||
|
BYTE buffer[bufferSize];
|
||||||
|
DWORD readSize;
|
||||||
|
if (!ReadFile(file, buffer, bufferSize, &readSize, NULL))
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
else if (readSize != 0)
|
||||||
|
{
|
||||||
|
result = zipWriteInFileInZip(m_ZipFile, buffer, (UINT)readSize) == ZIP_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// EOF
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (result);
|
||||||
|
|
||||||
|
CloseHandle(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (result);
|
else
|
||||||
|
{
|
||||||
CloseHandle(file);
|
// Directory entry, so nothing needs to be written.
|
||||||
|
}
|
||||||
|
|
||||||
return zipCloseFileInZip(m_ZipFile) == ZIP_OK && result;
|
return zipCloseFileInZip(m_ZipFile) == ZIP_OK && result;
|
||||||
}
|
}
|
||||||
@ -449,6 +459,7 @@ bool CDialogPackage::AddFolderToPackage(const std::wstring& path, std::wstring b
|
|||||||
currentPath.pop_back(); // Remove *
|
currentPath.pop_back(); // Remove *
|
||||||
|
|
||||||
bool result = true;
|
bool result = true;
|
||||||
|
bool filesAdded = false;
|
||||||
std::list<std::wstring> folders;
|
std::list<std::wstring> folders;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -480,6 +491,8 @@ bool CDialogPackage::AddFolderToPackage(const std::wstring& path, std::wstring b
|
|||||||
MessageBox(m_Window, error.c_str(), L"Rainmeter Skin Packager", MB_OK | MB_ICONERROR);
|
MessageBox(m_Window, error.c_str(), L"Rainmeter Skin Packager", MB_OK | MB_ICONERROR);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filesAdded = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (FindNextFile(hFind, &fd));
|
while (FindNextFile(hFind, &fd));
|
||||||
@ -487,6 +500,14 @@ bool CDialogPackage::AddFolderToPackage(const std::wstring& path, std::wstring b
|
|||||||
|
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
|
if (!filesAdded && folders.empty())
|
||||||
|
{
|
||||||
|
// Add directory entry if folder is empty.
|
||||||
|
std::wstring zipPath = zipPrefix;
|
||||||
|
zipPath.append(currentPath, path.length(), currentPath.length() - path.length());
|
||||||
|
AddFileToPackage(NULL, zipPath.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
std::list<std::wstring>::const_iterator iter = folders.begin();
|
std::list<std::wstring>::const_iterator iter = folders.begin();
|
||||||
for ( ; iter != folders.end(); ++iter)
|
for ( ; iter != folders.end(); ++iter)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user