private async Task <BooleanResponse> DeleteAsync(string contentName, SemaphoreSlim semaPhore) { await semaPhore.WaitAsync(); var response = new BooleanResponse() { Success = false }; try { await Task.Run(() => { using (var isoStorage = IsolatedStorageFile.GetUserStoreForApplication()) { if (isoStorage.FileExists(contentName)) { isoStorage.DeleteFile(contentName); } response.Success = true; } }); } catch (Exception ex) { response.Error = ex; ex.ConsoleWrite(); } finally { semaPhore.Release(); } return(response); }
public async Task <BooleanResponse> TruncateAsync <T>() where T : ISqlDataModel, new() { var response = new BooleanResponse(); await conn.RunInTransactionAsync(async (tran) => { try { using (await Mutex.LockAsync().ConfigureAwait(false)) { if (conn == null) { await InitializeConnection(); } await conn.DropTableAsync <T>(); await conn.CreateTableAsync <T>(); tran.Commit(); response.Success = true; } } catch (Exception ex) { response.Error = ex; tran.Rollback(); } }); return(response); }
public async Task <BooleanResponse> AddOrUpdate <T>(IEnumerable <T> collection) where T : ISqlDataModel, new() { var response = new BooleanResponse(); try { using (await Mutex.LockAsync().ConfigureAwait(false)) { if (conn == null) { await InitializeConnection(); } if (CoreSettings.Config.SqliteSettings.EncryptionEnabled) { collection.EncryptedDataModelProperties <T>(); } var inserts = new List <T>(); var updates = new List <T>(); foreach (var obj in collection) { obj.UTCTickStamp = DateTime.UtcNow.Ticks; if (obj.CorrelationID != default(Guid)) { updates.Add(obj); } else { obj.CorrelationID = Guid.NewGuid(); inserts.Add(obj); } } var totalInserted = await conn.InsertAllAsync(inserts); var totalUpdated = await conn.UpdateAllAsync(updates); if (totalUpdated == updates.Count && totalInserted == inserts.Count) { response.Success = true; } return(response); } } catch (Exception ex) { response.Error = ex; return(response); } }
public async Task <BooleanResponse> AddOrUpdate <T>(T obj) where T : ISqlDataModel, new() { var response = new BooleanResponse(); int rowsAffected = 0; obj.UTCTickStamp = DateTime.UtcNow.Ticks; try { using (await Mutex.LockAsync().ConfigureAwait(false)) { if (conn == null) { await InitializeConnection(); } if (CoreSettings.Config.SqliteSettings.EncryptionEnabled) { obj.EncryptedDataModelProperties <T>(); } if (obj.CorrelationID != default(Guid)) { rowsAffected = await conn.UpdateAsync(obj); } else { obj.CorrelationID = Guid.NewGuid(); rowsAffected = await conn.InsertAsync(obj); if (rowsAffected != 1) { obj.CorrelationID = default(Guid); } } response.Success = rowsAffected == 1 ? true : false; return(response); } } catch (Exception ex) { response.Error = ex; return(response); } }
public async Task <BooleanResponse> DeleteByQuery <T>(Expression <Func <T, bool> > exp, bool softDelete = false) where T : ISqlDataModel, new() { var response = new BooleanResponse(); try { using (await Mutex.LockAsync().ConfigureAwait(false)) { if (conn == null) { await InitializeConnection(); } int rowsAffected = 0; var obj = await conn.Table <T>().Where(exp).FirstOrDefaultAsync(); if (obj != null) { if (softDelete) { obj.UTCTickStamp = DateTime.UtcNow.Ticks; obj.MarkedForDelete = true; rowsAffected = await conn.UpdateAsync(obj); } else { rowsAffected = await conn.DeleteAsync(obj); } response.Success = rowsAffected == 1 ? true : false; } return(response); } } catch (Exception ex) { response.Error = ex; return(response); } }
public async Task <BooleanResponse> SaveAccountStore <T>(string username, string password, T obj) where T : class, new() { return(await Task.Run(() => { var response = new BooleanResponse() { Success = false }; try { var account = GetAccount(username); PersistAccount(account, username, password, obj); SaveAccount(account, username); response.Success = true; } catch (Exception ex) { response.Error = ex; } return response; })); }
public async Task <BooleanResponse> SaveStringAsync(string contentName, string obj) { await fileStoreLock.WaitAsync(); var response = new BooleanResponse() { Success = false }; return(await Task.Run(() => { try { using (var isoStorage = IsolatedStorageFile.GetUserStoreForApplication()) { using (var s = isoStorage.OpenFile(contentName, FileMode.Create)) { using (var sw = new StreamWriter(s)) { sw.Write(obj); sw.Flush(); sw.Close(); response.Success = true; } } } } catch (Exception ex) { response.Error = ex; } finally { fileStoreLock.Release(); } return response; })); }
private async Task <BooleanResponse> SaveAsync <T>(string contentName, object obj, SemaphoreSlim semaPhore) { await semaPhore.WaitAsync(); return(await Task.Run(() => { var response = new BooleanResponse() { Success = false }; try { using (var isoStorage = IsolatedStorageFile.GetUserStoreForApplication()) { using (var s = isoStorage.OpenFile(contentName, FileMode.Create)) { using (var sw = new StreamWriter(s)) { _serializer.Serialize(new JsonTextWriter(sw), obj); sw.Flush(); sw.Close(); response.Success = true; } } } } catch (Exception ex) { ex.ConsoleWrite(true); } finally { semaPhore.Release(); } return response; })); }
public async Task <BooleanResponse> SyncExternalCollection <T, P>(List <T> collection, Expression <Func <T, P> > exp) where T : ISqlDataModel, new() { var st = DateTime.Now; var response = new BooleanResponse(); collection.ForEach((obj) => obj.UTCTickStamp = DateTime.UtcNow.Ticks); try { using (await Mutex.LockAsync().ConfigureAwait(false)) { if (conn == null) { await InitializeConnection(); } if (CoreSettings.Config.SqliteSettings.EncryptionEnabled) { collection.EncryptedDataModelProperties <T>(); } var expression = (MemberExpression)exp.Body; string name = expression.Member.Name; var prop = typeof(T).GetProperty(name); var inserts = new List <T>(); var updates = new List <T>(); foreach (var obj in collection) { var vObj = (P)prop.GetValue(obj, null); if (!IsDefaultValue <P>(vObj)) { var stmt = $"SELECT count({name}) FROM {obj.GetType().Name} WHERE {name} = ?"; var result = await conn.ExecuteScalarAsync <int>(stmt, vObj); if (result > 0) { var existingGuid = $"SELECT InternalID FROM {obj.GetType().Name} WHERE {name} = ?"; var guidResult = await conn.ExecuteScalarAsync <Guid>(existingGuid, vObj); obj.CorrelationID = guidResult; updates.Add(obj); } else { if (obj.CorrelationID == default(Guid)) { obj.CorrelationID = Guid.NewGuid(); } inserts.Add(obj); } } } int totalInserted = 0; if (inserts.Count > 0) { totalInserted = await conn.InsertAllAsync(inserts); } int totalUpdated = 0; if (updates.Count > 0) { totalUpdated = await conn.UpdateAllAsync(updates); } if (totalUpdated == updates.Count && totalInserted == inserts.Count) { response.Success = true; } return(response); } } catch (Exception ex) { response.Error = ex; return(response); } }
public async Task <BooleanResponse> SyncExternalObject <T, P>(T obj, Expression <Func <T, P> > exp) where T : ISqlDataModel, new() { var response = new BooleanResponse(); int rowsAffected = 0; obj.UTCTickStamp = DateTime.UtcNow.Ticks; try { using (await Mutex.LockAsync().ConfigureAwait(false)) { if (conn == null) { await InitializeConnection(); } if (CoreSettings.Config.SqliteSettings.EncryptionEnabled) { obj.EncryptedDataModelProperties <T>(); } var expression = (MemberExpression)exp.Body; string name = expression.Member.Name; var prop = obj.GetType().GetProperty(name); var vObj = (P)prop.GetValue(obj, null); if (default(P).Equals(vObj)) { throw new ApplicationException($"Instance of model is missing primary key identified for {typeof(T).Name}"); } else { var stmt = $"SELECT count({name}) FROM {obj.GetType().Name} WHERE {name} = ?"; var result = await conn.ExecuteScalarAsync <int>(stmt, vObj); if (result > 0) { var existingGuid = $"SELECT InternalID FROM {obj.GetType().Name} WHERE {name} = ?"; var guidResult = await conn.ExecuteScalarAsync <Guid>(existingGuid, vObj); obj.CorrelationID = guidResult; rowsAffected = await conn.UpdateAsync(obj); } else { if (obj.CorrelationID == default(Guid)) { obj.CorrelationID = Guid.NewGuid(); } rowsAffected = await conn.InsertAsync(obj); } } response.Success = rowsAffected == 1 ? true : false; return(response); } } catch (Exception ex) { response.Error = ex; return(response); } }