Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
 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;
     }));
 }
Ejemplo n.º 7
0
        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;
            }));
        }
Ejemplo n.º 8
0
        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;
            }));
        }
Ejemplo n.º 9
0
        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);
            }
        }
Ejemplo n.º 10
0
        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);
            }
        }