251cced1f8
Various minor things done to project files Updated sample extension project file and updated makefile to the new unified version (more changes likely on the way) Updated regex project file and makefile --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401971
168 lines
3.3 KiB
C++
168 lines
3.3 KiB
C++
#include "InstallerUtil.h"
|
|
#include "LocalCopyMethod.h"
|
|
|
|
LocalCopyMethod g_LocalCopier;
|
|
|
|
DWORD CALLBACK CopyProgressRoutine(LARGE_INTEGER TotalFileSize,
|
|
LARGE_INTEGER TotalBytesTransferred,
|
|
LARGE_INTEGER StreamSize,
|
|
LARGE_INTEGER StreamBytesTransferred,
|
|
DWORD dwStreamNumber,
|
|
DWORD dwCallbackReason,
|
|
HANDLE hSourceFile,
|
|
HANDLE hDestinationFile,
|
|
LPVOID lpData)
|
|
{
|
|
ICopyProgress *progress = (ICopyProgress *)lpData;
|
|
|
|
progress->UpdateProgress((size_t)TotalBytesTransferred.QuadPart,
|
|
(size_t)TotalFileSize.QuadPart);
|
|
|
|
return PROGRESS_CONTINUE;
|
|
}
|
|
|
|
LocalCopyMethod::LocalCopyMethod()
|
|
{
|
|
m_pProgress = NULL;
|
|
}
|
|
|
|
void LocalCopyMethod::SetOutputPath(const TCHAR *path)
|
|
{
|
|
UTIL_PathFormat(m_OutputPath,
|
|
sizeof(m_OutputPath) / sizeof(TCHAR),
|
|
_T("%s"),
|
|
path);
|
|
|
|
UTIL_PathFormat(m_CurrentPath,
|
|
sizeof(m_CurrentPath) / sizeof(TCHAR),
|
|
_T("%s"),
|
|
path);
|
|
}
|
|
|
|
void LocalCopyMethod::TrackProgress(ICopyProgress *pProgress)
|
|
{
|
|
m_pProgress = pProgress;
|
|
}
|
|
|
|
bool LocalCopyMethod::CreateFolder(const TCHAR *name, TCHAR *buffer, size_t maxchars)
|
|
{
|
|
TCHAR path[MAX_PATH];
|
|
|
|
UTIL_PathFormat(path,
|
|
sizeof(path) / sizeof(TCHAR),
|
|
_T("%s\\%s"),
|
|
m_CurrentPath,
|
|
name);
|
|
|
|
if (CreateDirectory(path, NULL))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
DWORD error = GetLastError();
|
|
if (error == ERROR_ALREADY_EXISTS)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
GenerateErrorMessage(error, buffer, maxchars);
|
|
|
|
return false;
|
|
}
|
|
|
|
bool LocalCopyMethod::SetCurrentFolder(const TCHAR *path, TCHAR *buffer, size_t maxchars)
|
|
{
|
|
if (path == NULL)
|
|
{
|
|
UTIL_PathFormat(m_CurrentPath,
|
|
sizeof(m_CurrentPath) / sizeof(TCHAR),
|
|
_T("%s"),
|
|
m_OutputPath);
|
|
}
|
|
else
|
|
{
|
|
UTIL_PathFormat(m_CurrentPath,
|
|
sizeof(m_CurrentPath) / sizeof(TCHAR),
|
|
_T("%s\\%s"),
|
|
m_OutputPath,
|
|
path);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool LocalCopyMethod::SendFile(const TCHAR *path, TCHAR *buffer, size_t maxchars)
|
|
{
|
|
const TCHAR *filename = GetFileFromPath(path);
|
|
|
|
if (filename == NULL)
|
|
{
|
|
UTIL_Format(buffer, maxchars, _T("Invalid filename"));
|
|
return false;
|
|
}
|
|
|
|
TCHAR new_path[MAX_PATH];
|
|
UTIL_PathFormat(new_path,
|
|
sizeof(new_path) / sizeof(TCHAR),
|
|
_T("%s\\%s"),
|
|
m_CurrentPath,
|
|
filename);
|
|
|
|
m_bCancelStatus = FALSE;
|
|
|
|
if (m_pProgress != NULL)
|
|
{
|
|
m_pProgress->StartingNewFile(filename);
|
|
}
|
|
|
|
if (CopyFileEx(path,
|
|
new_path,
|
|
m_pProgress ? CopyProgressRoutine : NULL,
|
|
m_pProgress,
|
|
&m_bCancelStatus,
|
|
0) == 0)
|
|
{
|
|
/* Delete the file in case it was a partial copy */
|
|
DeleteFile(new_path);
|
|
|
|
GenerateErrorMessage(GetLastError(), buffer, maxchars);
|
|
|
|
return false;
|
|
}
|
|
|
|
if (m_pProgress != NULL)
|
|
{
|
|
m_pProgress->FileDone(UTIL_GetFileSize(path));
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void LocalCopyMethod::CancelCurrentCopy()
|
|
{
|
|
m_bCancelStatus = TRUE;
|
|
}
|
|
|
|
bool LocalCopyMethod::CheckForExistingInstall()
|
|
{
|
|
TCHAR path[MAX_PATH];
|
|
|
|
UTIL_PathFormat(path,
|
|
sizeof(path) / sizeof(TCHAR),
|
|
_T("%s\\addons\\sourcemod"),
|
|
m_CurrentPath);
|
|
if (GetFileAttributes(path) == INVALID_FILE_ATTRIBUTES)
|
|
{
|
|
UTIL_PathFormat(path,
|
|
sizeof(path) / sizeof(TCHAR),
|
|
_T("%s\\cfg\\sourcemod"),
|
|
m_CurrentPath);
|
|
if (GetFileAttributes(path) == INVALID_FILE_ATTRIBUTES)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|