Ringdebug and utils
Change-Id: I7144be0052eb7d1900d17b31edbfe48d0498d7db
diff --git a/Utils.h b/Utils.h
new file mode 100644
index 0000000..1498faa
--- /dev/null
+++ b/Utils.h
@@ -0,0 +1,76 @@
+#pragma once
+#include <pch.h>
+
+using namespace Platform;
+using namespace Windows::Storage;
+
+namespace RingClientUWP
+{
+namespace Utils {
+
+task<bool>
+fileExists(StorageFolder^ folder, String^ fileName)
+{
+ return create_task(folder->GetFileAsync(fileName))
+ .then([](task<StorageFile^> taskResult)
+ {
+ bool exists;
+ try {
+ taskResult.get();
+ exists = true;
+ }
+ catch (COMException ^e) {
+ if (e->HResult == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) {
+ exists = false;
+ }
+ else {
+ throw;
+ }
+ }
+ return exists;
+ });
+}
+
+std::string makeString(const std::wstring& wstr)
+{
+ auto wideData = wstr.c_str();
+ int bufferSize = WideCharToMultiByte(CP_UTF8, 0, wideData, -1, nullptr, 0, NULL, NULL);
+
+ std::unique_ptr<char[]> utf8;
+ utf8.reset(new char[bufferSize]);
+
+ if (WideCharToMultiByte(CP_UTF8, 0, wideData, -1, utf8.get(), bufferSize, NULL, NULL) == 0) {
+ return std::string();
+ }
+
+ return std::string(utf8.get());
+}
+
+std::wstring makeWString(const std::string& str)
+{
+ auto utf8Data = str.c_str();
+ int bufferSize = MultiByteToWideChar(CP_UTF8, 0, utf8Data, -1, nullptr, 0);
+
+ std::unique_ptr<wchar_t[]> wide;
+ wide.reset(new wchar_t[bufferSize]);
+
+ if (MultiByteToWideChar(CP_UTF8, 0, utf8Data, -1, wide.get(), bufferSize) == 0) {
+ return std::wstring();
+ }
+
+ return std::wstring(wide.get());;
+}
+
+std::string toString(Platform::String ^str)
+{
+ std::wstring wsstr(str->Data());
+ return makeString(wsstr);
+}
+
+Platform::String^ toPlatformString(const std::string& str)
+{
+ std::wstring wsstr = makeWString(str);
+ return ref new Platform::String(wsstr.c_str(), wsstr.length());
+}
+}
+}
\ No newline at end of file