|
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO.IsolatedStorage;
using System.Text;
using System.Linq;
using System.Runtime.Serialization;
using System.Diagnostics.Contracts;
namespace JudahHimango.Chavah
{
public static class LocalDataStore
{
const string clientIdFileName = "clientId";
const string settingsFileName = "settings";
public static Guid GetClientId()
{
var existing = GetExistingIdOrNull();
return existing.HasValue ? existing.Value : CreateNewId();
}
public static LocalSettings GetSettings()
{
Contract.Ensures(Contract.Result<LocalSettings>() != null);
try
{
return GetSettingsOrNull() ?? CreateSettings();
}
catch
{
return CreateSettings();
}
}
private static Guid CreateNewId()
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
Contract.Assume(store != null);
using (var newFile = store.CreateFile(clientIdFileName))
{
Contract.Assume(newFile != null);
var id = Guid.NewGuid();
var idBytes = id.ToByteArray();
Contract.Assume(idBytes != null);
newFile.Write(idBytes, 0, idBytes.Length);
return id;
}
}
}
private static LocalSettings GetSettingsOrNull()
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
var settingsFilePath = store.GetFileNames(settingsFileName).FirstOrDefault();
if (settingsFilePath != null)
{
using (var settingsFile = store.OpenFile(settingsFilePath, System.IO.FileMode.Open))
{
var serializer = new DataContractSerializer(typeof(LocalSettings));
return (LocalSettings)serializer.ReadObject(settingsFile);
}
}
}
return null;
}
private static LocalSettings CreateSettings()
{
Contract.Ensures(Contract.Result<LocalSettings>() != null);
using (var store = GetLocalStore())
using (var newFile = store.CreateFile(settingsFileName))
{
var settings = new LocalSettings();
var serializer = new DataContractSerializer(typeof(LocalSettings));
serializer.WriteObject(newFile, settings);
return settings;
}
}
private static IsolatedStorageFile GetLocalStore()
{
Contract.Ensures(Contract.Result<IsolatedStorageFile>() != null);
var storage = IsolatedStorageFile.GetUserStoreForApplication();
Contract.Assume(storage != null);
return storage;
}
private static Guid? GetExistingIdOrNull()
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
var fileName = store.GetFileNames(clientIdFileName).FirstOrDefault();
if (fileName != null)
{
using (var file = store.OpenFile(fileName, System.IO.FileMode.Open))
{
var idBytes = new byte[16];
file.Read(idBytes, 0, 16);
return new Guid(idBytes);
}
}
}
return null;
}
public static void SaveSettings(LocalSettings localSettings)
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
using (var file = store.OpenFile(settingsFileName, System.IO.FileMode.OpenOrCreate))
{
var serializer = new DataContractSerializer(typeof(LocalSettings));
serializer.WriteObject(file, localSettings);
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Front end developer, RavenDB enthusiast, blogger, musician, husband, and father of 3.