Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Threading.Tasks;
- using Windows.Storage;
- using Windows.Storage.Search;
- using Caliburn.Micro;
- using Newtonsoft.Json;
- namespace FileStorage
- {
- public abstract class Service<T> : IService<T> where T : class
- {
- protected abstract IStorageFolder StorageFolder { get; }
- protected abstract string FolderName { get; }
- public virtual async Task<IEnumerable<T>> GetAll()
- {
- var files = new List<T>();
- foreach (var file in await Files())
- files.Add(JsonConvert.DeserializeObject<T>(await FileIO.ReadTextAsync(file)));
- return files;
- }
- public async Task Save(T schema, string fileName)
- {
- var folder = await Folder();
- var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists);
- return await FileIO.WriteTextAsync(file, JsonConvert.SerializeObject(schema));
- }
- public async Task<T> Get(string fileName)
- {
- var file = await GetFile(fileName);
- return file == null ? null : JsonConvert.DeserializeObject<T>(await FileIO.ReadTextAsync(file));
- }
- public async Task Delete(string fileName)
- {
- var file = await GetFile(fileName);
- if (file != null)
- await file.DeleteAsync();
- }
- protected async Task<StorageFile> GetFile(string fileName)
- {
- var folder = await Folder();
- var file = await folder.GetFileAsync(fileName);
- return file;
- }
- protected async Task<IEnumerable<IStorageFile>> Files()
- {
- var folder = await Folder();
- return await folder.GetFilesAsync(CommonFileQuery.OrderByName);
- }
- private async Task CreateFolder()
- {
- await StorageFolder.CreateFolderAsync(FolderName);
- }
- protected async Task<StorageFolder> Folder()
- {
- try
- {
- var folder = await StorageFolder.GetFolderAsync(FolderName);
- if (folder == null)
- await CreateFolder();
- return folder;
- }
- catch (Exception ex)
- {
- LogManager.GetLog(GetType()).Error(ex);
- throw;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement