diff --git a/Parse/Internal/Storage/Controller/StorageController.cs b/Parse/Internal/Storage/Controller/StorageController.cs
index f5619882..9a159d8b 100644
--- a/Parse/Internal/Storage/Controller/StorageController.cs
+++ b/Parse/Internal/Storage/Controller/StorageController.cs
@@ -156,7 +156,14 @@ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
/// Loads a settings dictionary from the file wrapped by .
///
/// A storage dictionary containing the deserialized content of the storage file targeted by the instance
- public Task> LoadAsync() => Queue.Enqueue(toAwait => toAwait.ContinueWith(_ => Task.FromResult((IStorageDictionary) Storage) ?? (Storage = new StorageDictionary(File)).LoadAsync().OnSuccess(__ => Storage as IStorageDictionary)).Unwrap(), CancellationToken.None);
+ public Task> LoadAsync()
+ {
+ // check if storage dictionary is already created from the controllers file (create if not)
+ if (Storage == null)
+ Storage = new StorageDictionary(File);
+ // load storage dictionary content async and return the resulting dictionary type
+ return Queue.Enqueue(toAwait => toAwait.ContinueWith(_ => Storage.LoadAsync().OnSuccess(__ => Storage as IStorageDictionary)).Unwrap(), CancellationToken.None);
+ }
///
///
diff --git a/Parse/Internal/Utilities/StorageManager.cs b/Parse/Internal/Utilities/StorageManager.cs
index 4843057e..a921c4fd 100644
--- a/Parse/Internal/Utilities/StorageManager.cs
+++ b/Parse/Internal/Utilities/StorageManager.cs
@@ -31,7 +31,10 @@ internal static class StorageManager
public static async Task WriteToAsync(this FileInfo file, string content)
{
using (FileStream stream = new FileStream(Path.GetFullPath(file.FullName), FileMode.Create, FileAccess.Write, FileShare.Read, 4096, FileOptions.SequentialScan | FileOptions.Asynchronous))
- await stream.WriteAsync(Encoding.Unicode.GetBytes(content), 0, content.Length * 2 /* UTF-16, so two bytes per character of length. */);
+ {
+ byte[] data = Encoding.Unicode.GetBytes(content);
+ await stream.WriteAsync(data, 0, data.Length);
+ }
}
///
@@ -41,7 +44,7 @@ public static async Task WriteToAsync(this FileInfo file, string content)
/// A task that should contain the little-endian 16-bit character string (UTF-16) extracted from the if the read completes successfully
public static async Task ReadAllTextAsync(this FileInfo file)
{
- using (StreamReader reader = file.OpenText())
+ using (StreamReader reader = new StreamReader(file.OpenRead(), Encoding.Unicode))
return await reader.ReadToEndAsync();
}
@@ -72,14 +75,15 @@ public static FileInfo GetWrapperForRelativePersistentStorageFilePath(string pat
{
path = Path.GetFullPath(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), path));
- Directory.CreateDirectory(path.Substring(0, path.LastIndexOf(Path.VolumeSeparatorChar)));
+ Directory.CreateDirectory(path.Substring(0, path.LastIndexOf(Path.DirectorySeparatorChar)));
return new FileInfo(path);
}
public static async Task TransferAsync(string originFilePath, string targetFilePath)
{
if (!String.IsNullOrWhiteSpace(originFilePath) && !String.IsNullOrWhiteSpace(targetFilePath) && new FileInfo(originFilePath) is FileInfo originFile && originFile.Exists && new FileInfo(targetFilePath) is FileInfo targetFile)
- using (StreamWriter writer = targetFile.CreateText()) using (StreamReader reader = originFile.OpenText())
+ using (StreamWriter writer = new StreamWriter(targetFile.OpenWrite(), Encoding.Unicode))
+ using (StreamReader reader = new StreamReader(originFile.OpenRead(), Encoding.Unicode))
await writer.WriteAsync(await reader.ReadToEndAsync());
}
}
diff --git a/Parse/Public/ParseClient.cs b/Parse/Public/ParseClient.cs
index 24ba5061..5cbca097 100644
--- a/Parse/Public/ParseClient.cs
+++ b/Parse/Public/ParseClient.cs
@@ -251,10 +251,10 @@ public static void Initialize(Configuration configuration)
switch (configuration.StorageConfiguration)
{
- case IStorageController controller when !(controller is null):
+ case null:
+ configuration.StorageConfiguration = Configuration.MetadataBasedStorageConfiguration.NoCompanyInferred;
break;
default:
- configuration.StorageConfiguration = Configuration.MetadataBasedStorageConfiguration.NoCompanyInferred;
break;
}
@@ -263,6 +263,7 @@ public static void Initialize(Configuration configuration)
ParseObject.RegisterSubclass();
ParseObject.RegisterSubclass();
ParseObject.RegisterSubclass();
+ ParseObject.RegisterSubclass();
ParseModuleController.Instance.ParseDidInitialize();
}