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 float percent = (float)(TotalBytesTransferred.QuadPart) / (float)(TotalFileSize.QuadPart);
20 progress->UpdateProgress(percent);
22 return PROGRESS_CONTINUE;
25 LocalCopyMethod::LocalCopyMethod()
30 void LocalCopyMethod::SetOutputPath(const TCHAR *path)
32 UTIL_PathFormat(m_OutputPath,
33 sizeof(m_OutputPath) / sizeof(TCHAR),
37 UTIL_PathFormat(m_CurrentPath,
38 sizeof(m_CurrentPath) / sizeof(TCHAR),
43 void LocalCopyMethod::TrackProgress(ICopyProgress *pProgress)
45 m_pProgress = pProgress;
48 bool LocalCopyMethod::CreateFolder(const TCHAR *name, TCHAR *buffer, size_t maxchars)
53 sizeof(path) / sizeof(TCHAR),
58 if (CreateDirectory(name, NULL))
63 DWORD error = GetLastError();
64 if (error == ERROR_ALREADY_EXISTS)
69 GenerateErrorMessage(error, buffer, maxchars);
74 bool LocalCopyMethod::SetCurrentFolder(const TCHAR *path, TCHAR *buffer, size_t maxchars)
78 UTIL_PathFormat(m_CurrentPath,
79 sizeof(m_CurrentPath) / sizeof(TCHAR),
85 UTIL_PathFormat(m_CurrentPath,
86 sizeof(m_CurrentPath) / sizeof(TCHAR),
95 bool LocalCopyMethod::SendFile(const TCHAR *path, TCHAR *buffer, size_t maxchars)
97 const TCHAR *filename = GetFileFromPath(path);
101 UTIL_Format(buffer, maxchars, _T("Invalid filename"));
105 TCHAR new_path[MAX_PATH];
106 UTIL_PathFormat(new_path,
107 sizeof(new_path) / sizeof(TCHAR),
112 m_bCancelStatus = FALSE;
116 m_pProgress ? CopyProgressRoutine : NULL,
121 /* Delete the file in case it was a partial copy */
122 DeleteFile(new_path);
124 GenerateErrorMessage(GetLastError(), buffer, maxchars);
132 void LocalCopyMethod::CancelCurrentCopy()
134 m_bCancelStatus = TRUE;
137 bool LocalCopyMethod::CheckForExistingInstall()
139 TCHAR path[MAX_PATH];
141 UTIL_PathFormat(path,
142 sizeof(path) / sizeof(TCHAR),
143 _T("%s\\addons\\sourcemod"),
145 if (GetFileAttributes(path) == INVALID_FILE_ATTRIBUTES)
147 UTIL_PathFormat(path,
148 sizeof(path) / sizeof(TCHAR),
149 _T("%s\\cfg\\sourcemod"),
151 if (GetFileAttributes(path) == INVALID_FILE_ATTRIBUTES)