Exemplo n.º 1
0
        private async Task SynchronizeDataAsync()
        {
            ShowActivityUI(true);

            SQLiteConnection db = App.dbHandler.db;

            //db.DeleteAll<Article> ();
            //db.DeleteAll<ArticleGroup> ();

            var  articles         = db.Query <Article> ("select * from Article ORDER by SysRevision DESC");
            long maxSysRevArticle = articles.FirstOrDefault() == null ? 0 : articles.FirstOrDefault().SysRevision;
            //db.Execute("select MAX(SysRevision) from Article");
            var  articleGroups         = db.Query <Article> ("select * from ArticleGroup ORDER by SysRevision DESC");
            long maxSysRevArticleGroup = articleGroups.FirstOrDefault() == null ? 0 : articleGroups.FirstOrDefault().SysRevision;

            //= db.Execute("select MAX(SysRevision) from ArticleGroup");

            RegServices.MobRegService service     = new RegServices.MobRegService(ProgramVars.URL);
            LoadSyncInput             inputObject = new LoadSyncInput()
            {
                installationID = App.appSettings.installationID,
                userID         = App.appSettings.loginVars.userID.ToString(),
                loadSyncList   = string.Format("Article={0:d}|ArticleGroup={1:d}", maxSysRevArticle, maxSysRevArticleGroup),
                parameters     = ""
            };

            RestSyncResult result = await service.SynchronizeAsync(inputObject);

            if (result.statusCode != 0)
            {
                ShowActivityUI(false);
                await DisplayAlert(AppResources.Error, result.status, AppResources.Cancel);
            }
            else
            {
                if (result.Articles != null)
                {
                    foreach (rsArticle a in result.Articles)
                    {
                        Article article = db.Find <Article> (a.ID);
                        if (article != null)
                        {
                            if (a.SysDeleted)
                            {
                                db.Delete(article);
                            }
                            else
                            {
                                article.SysRevision = a.SysRevision;
                                article.Name        = a.Name;
                                article.GroupID     = a.GroupID;
                                db.Update(article);
                            }
                        }
                        else
                        {
                            if (!a.SysDeleted)
                            {
                                article = new Article(a);
                                db.Insert(article);
                            }
                        }
                    }
                }
                if (result.ArticleGroups != null)
                {
                    foreach (rsArticleGroup g in result.ArticleGroups)
                    {
                        ArticleGroup artGroup = db.Find <ArticleGroup> (g.ID);
                        if (artGroup != null)
                        {
                            if (g.SysDeleted)
                            {
                                db.Delete(artGroup);
                            }
                            else
                            {
                                artGroup.Name        = g.Name;
                                artGroup.SysRevision = g.SysRevision;
                                db.Update(artGroup);
                            }
                        }
                        else
                        {
                            if (!g.SysDeleted)
                            {
                                artGroup = new ArticleGroup(g);
                                db.Insert(artGroup);
                            }
                        }
                    }
                }

                //end foreach
            }             // end if null

            ShowActivityUI(false);
        }