1 #include "InstallerUtil.h"
2 #include "LocalCopyMethod.h"
4 LocalCopyMethod g_LocalCopier;
6 DWORD CALLBACK CopyProgressRoutine(LARGE_INTEGER TotalFileSize,
7 LARGE_INTEGER TotalBytesTransferred,
8 LARGE_INTEGER StreamSize,
9 LARGE_INTEGER StreamBytesTransferred,
11 DWORD dwCallbackReason,
13 HANDLE hDestinationFile,
16 ICopyProgress *progress = (ICopyProgress *)lpData;
18 progress->UpdateProgress((size_t)TotalBytesTransferred.QuadPart,
19 (size_t)TotalFileSize.QuadPart);
21 return PROGRESS_CONTINUE;
24 LocalCopyMethod::LocalCopyMethod()
29 void LocalCopyMethod::SetOutputPath(const TCHAR *path)
31 UTIL_PathFormat(m_OutputPath,
32 sizeof(m_OutputPath) / sizeof(TCHAR),
36 UTIL_PathFormat(m_CurrentPath,
37 sizeof(m_CurrentPath) / sizeof(TCHAR),
42 void LocalCopyMethod::TrackProgress(ICopyProgress *pProgress)
44 m_pProgress = pProgress;
47 bool LocalCopyMethod::CreateFolder(const TCHAR *name, TCHAR *buffer, size_t maxchars)
52 sizeof(path) / sizeof(TCHAR),
57 if (CreateDirectory(path, NULL))
62 DWORD error = GetLastError();
63 if (error == ERROR_ALREADY_EXISTS)
68 GenerateErrorMessage(error, buffer, maxchars);
73 bool LocalCopyMethod::SetCurrentFolder(const TCHAR *path, TCHAR *buffer, size_t maxchars)
77 UTIL_PathFormat(m_CurrentPath,
78 sizeof(m_CurrentPath) / sizeof(TCHAR),
84 UTIL_PathFormat(m_CurrentPath,
85 sizeof(m_CurrentPath) / sizeof(TCHAR),
94 bool LocalCopyMethod::SendFile(const TCHAR *path, TCHAR *buffer, size_t maxchars)
96 const TCHAR *filename = GetFileFromPath(path);
100 UTIL_Format(buffer, maxchars, _T("Invalid filename"));
104 TCHAR new_path[MAX_PATH];
105 UTIL_PathFormat(new_path,
106 sizeof(new_path) / sizeof(TCHAR),
111 m_bCancelStatus = FALSE;
113 if (m_pProgress != NULL)
115 m_pProgress->StartingNewFile(filename);
120 m_pProgress ? CopyProgressRoutine : NULL,
125 /* Delete the file in case it was a partial copy */
126 DeleteFile(new_path);
128 GenerateErrorMessage(GetLastError(), buffer, maxchars);
133 if (m_pProgress != NULL)
135 m_pProgress->FileDone(UTIL_GetFileSize(path));
141 void LocalCopyMethod::CancelCurrentCopy()
143 m_bCancelStatus = TRUE;
146 bool LocalCopyMethod::CheckForExistingInstall()
148 TCHAR path[MAX_PATH];
150 UTIL_PathFormat(path,
151 sizeof(path) / sizeof(TCHAR),
152 _T("%s\\addons\\sourcemod"),
154 if (GetFileAttributes(path) == INVALID_FILE_ATTRIBUTES)
156 UTIL_PathFormat(path,
157 sizeof(path) / sizeof(TCHAR),
158 _T("%s\\cfg\\sourcemod"),
160 if (GetFileAttributes(path) == INVALID_FILE_ATTRIBUTES)