Ejemplo n.º 1
0
        public async void UpdateAccountsDBAsync(string path)
        {
            try
            {
                GetToken(User);
                bool isAccounts = true;
                if (path != "accounts/")
                {
                    isAccounts = false;
                }

                var fromServer = await AccountServer.Get(path, User.Token);

                foreach (Account newItem in fromServer)
                {
                    Account item = db.Accounts.SingleOrDefault(it => it.Id2 == newItem.Id);
                    if (item == null)
                    {
                        newItem.IsAccount = isAccounts;
                        newItem.User      = User;
                        await AddItemAsync(newItem);
                    }
                    else
                    {
                        if (item.UpdateTime < newItem.UpdateTime)
                        {
                            if (item.Title != newItem.Title)
                            {
                                item.Title = newItem.Title;
                            }
                            if (item.Balance != newItem.Balance)
                            {
                                item.Balance = newItem.Balance;
                            }
                            if (item.TotalSum != newItem.TotalSum)
                            {
                                item.TotalSum = newItem.TotalSum;
                            }

                            await UpdateItemAsync(item);
                        }
                        else
                        {
                            if (item.Title != newItem.Title)
                            {
                                newItem.Title = item.Title;
                            }
                            if (item.Balance != newItem.Balance)
                            {
                                newItem.Balance = item.Balance;
                            }
                            if (item.TotalSum != newItem.TotalSum)
                            {
                                newItem.TotalSum = item.TotalSum;
                            }

                            AccountServer.Update(newItem, User.Token);
                        }
                    }
                }

                var fromLocal = db.Accounts.Where(item => item.User.Id == User.Id && item.IsAccount == isAccounts).Include(i => i.User).ToList();
                foreach (Account newItem in fromLocal)
                {
                    Account itemFromServer = fromServer.SingleOrDefault(item => item.Id == newItem.Id2);

                    if (itemFromServer == null)
                    {
                        newItem.Id2 = AccountServer.Add(newItem, User.Token).Id;

                        try { await UpdateItemAsync(newItem); }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }
                    }
                    else
                    {
                        if (newItem.UpdateTime < itemFromServer.UpdateTime)
                        {
                            if (newItem.Title != itemFromServer.Title)
                            {
                                newItem.Title = itemFromServer.Title;
                            }
                            if (newItem.Balance != itemFromServer.Balance)
                            {
                                newItem.Balance = itemFromServer.Balance;
                            }
                            if (newItem.TotalSum != itemFromServer.TotalSum)
                            {
                                newItem.TotalSum = itemFromServer.TotalSum;
                            }

                            try { await UpdateItemAsync(newItem); }
                            catch (Exception e)
                            {
                                Console.WriteLine(e);
                            }
                        }
                        else
                        {
                            if (itemFromServer.Title != newItem.Title)
                            {
                                itemFromServer.Title = newItem.Title;
                            }
                            if (itemFromServer.Balance != newItem.Balance)
                            {
                                itemFromServer.Balance = newItem.Balance;
                            }
                            if (itemFromServer.TotalSum != newItem.TotalSum)
                            {
                                itemFromServer.TotalSum = newItem.TotalSum;
                            }

                            AccountServer.Update(itemFromServer, User.Token);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }