61 lines
1.6 KiB
C++
61 lines
1.6 KiB
C++
#include "Utils.hpp"
|
|
#include <iostream>
|
|
#include <string>
|
|
|
|
#ifdef _WIN32
|
|
#include <Windows.h>
|
|
#include <shlobj.h>
|
|
#endif
|
|
|
|
namespace Li {
|
|
|
|
std::string Utils::GetDocumentsFolder() {
|
|
std::string documentsFolder = "";
|
|
|
|
#ifdef _WIN32
|
|
WCHAR documents[MAX_PATH];
|
|
HRESULT result = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, documents);
|
|
std::wstring wDocuments = std::wstring(documents);
|
|
documentsFolder = std::string(wDocuments.begin(), wDocuments.end());
|
|
#else
|
|
#error no way to find documents folder on this platform.
|
|
#endif
|
|
|
|
return documentsFolder;
|
|
}
|
|
|
|
void Utils::ShowErrorMessage(std::string errorMsg) {
|
|
#ifdef _WIN32
|
|
std::wstring err = std::wstring(errorMsg.begin(), errorMsg.end());
|
|
MessageBox(NULL, err.c_str(), L"Error", MB_ICONSTOP);
|
|
#endif
|
|
std::cerr << errorMsg << std::endl;
|
|
}
|
|
|
|
bool Utils::CompareStringCaseInsensitive(std::string input, std::string compare) {
|
|
unsigned int sz = input.size();
|
|
if (compare.size() != sz)
|
|
return false;
|
|
for (unsigned int i = 0; i < sz; ++i)
|
|
if (tolower(input[i]) != tolower(compare[i]))
|
|
return false;
|
|
return true;
|
|
}
|
|
std::string Utils::HumanReadableByteStr(uint64_t bytes)
|
|
{
|
|
const char* suffix[5] = { "B", "KB", "MB", "GB", "TB" };
|
|
char length = sizeof(suffix) / sizeof(suffix[0]);
|
|
|
|
int i = 0;
|
|
double dblBytes = bytes;
|
|
|
|
if (bytes > 1024) {
|
|
for (i = 0; (bytes / 1024) > 0 && i < length - 1; i++, bytes /= 1024)
|
|
dblBytes = bytes / 1024.0;
|
|
}
|
|
|
|
static char output[0x8000];
|
|
std::snprintf(output, sizeof(output), "%.02lf %s", dblBytes, suffix[i]);
|
|
return std::string(output);
|
|
}
|
|
} |