Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cardModels"></param>
        /// <param name="isUpdate">是否需要从Web更新</param>
        public void DownloadImages(List <CardModel> cardModels, bool isUpdate = false)
        {
            PrgModel.Start();
            var taskDic = new Dictionary <int, bool>();
            var sqls    = new List <string>();

            for (var i = 0; i != cardModels.Count; i++)
            {
                var page = Convert.ToInt32(i);
                taskDic.Add(page, false);
                GetCardDetailUrls(cardModels[page], isUpdate).Select(pair =>
                {
                    // 数据模型填充
                    cardModels[page].ImagesUrl   = JsonUtils.Serializer(pair.Key);
                    cardModels[page].ImagesStats = 0;
                    // 满足条件之一则更新数据库:1、数据源是否来自Web 2、是否需要从Web更新
                    if (pair.Value || isUpdate)
                    {
                        // 获取更新数据库的语句
                        var updateSql = SqlExUtils.GetUpateImagesSql(cardModels[page]);
                        sqls.Add(updateSql);
                    }
                    // 下载图鉴
                    DownloadImages(cardModels[page]);
                    return(pair.Key);
                }).ObserveOnDispatcher().Subscribe(urls =>
                {
                    // UI更新状态
                    taskDic[page] = true;
                    var persent   = taskDic.Values.Count(x => x) / float.Parse(cardModels.Count.ToString());
                    PrgModel.Update(Convert.ToInt32(persent * 100),
                                    $"已完成:{taskDic.Values.Count(x => x)} / {cardModels.Count}");
                });
            }
            // 轮询任务字典,确保整个任务执行完毕,将数据提交至观测者
            _dispose = Observable.Interval(TimeSpan.FromSeconds(1)).ObserveOnDispatcher().Subscribe(time =>
            {
                if (cardModels.Count != taskDic.Values.Count(x => x))
                {
                    if (sqls.Count <= 20)
                    {
                        return;
                    }
                    DataManager.Execute(sqls.GetRange(0, 20));
                    sqls.RemoveRange(0, 20);
                    return;
                }
                _dispose.Dispose();
                PrgModel.Finish();

                DataManager.Execute(sqls.GetRange(0, sqls.Count));
                sqls.RemoveRange(0, sqls.Count);
                DataManager.ReFillDataToDataSet(DataManager.DsAllCache, SqlExUtils.GetQueryAllSql(),
                                                DataManager.BahamutDbName);
                CardUtils.InitCardModels(true);
            });
        }
Esempio n. 2
0
        // 同步图标数据至数据库
        private static void SyncIconData(ICollection <string> dbMd5, IEnumerable <CardModel> cardModels)
        {
            var sqls = cardModels.Select(cardModel =>
                                         dbMd5.Contains(cardModel.Md5)
                    ? SqlExUtils.GetUpdateIconSql(cardModel)
                    : SqlExUtils.GetAddIconSql(cardModel)).Distinct().ToList();
            var result = DataManager.Execute(sqls);

            LogUtils.Write($"SyncIconData:{result}");
            DataManager.ReFillDataToDataSet(DataManager.DsAllCache, SqlExUtils.GetQueryAllSql(),
                                            DataManager.BahamutDbName);
            CardUtils.InitCardModels(true);
        }
 private void CardPreviewWindow_OnLoaded(object sender, RoutedEventArgs e)
 {
     LogUtils.Show();
     DataManager.Init(DataManager.BahamutDbName, PathManager.RootPath + DataManager.BahamutDbName, "");
     if (DataManager.FillDataToDataSet(DataManager.DsAllCache, SqlExUtils.GetQueryAllSql(),
                                       DataManager.BahamutDbName))
     {
         AppbarView.DataContext  = new AppbarVm(this);
         ContentView.DataContext = new CardPreviewVm();
         CardUtils.InitCgPath();
     }
     else
     {
         BaseDialogUtils.ShowDialogOk("数据库异常");
     }
 }
Esempio n. 4
0
        // 同步图鉴数据至数据库
        private static void SyncImagesData(ICollection <string> imagesUrl, CardModel cardModel, bool isUpdateDb = true)
        {
            cardModel.ImagesUrl   = JsonUtils.Serializer(imagesUrl);
            cardModel.ImagesStats = 0;
            var updateSql = SqlExUtils.GetUpateImagesSql(cardModel);
            var reuslt    = DataManager.Execute(updateSql);

            if (!reuslt)
            {
                LogUtils.Write($"UpdateImages:{updateSql}");
            }
            if (!isUpdateDb)
            {
                return;
            }
            DataManager.ReFillDataToDataSet(DataManager.DsAllCache, SqlExUtils.GetQueryAllSql(),
                                            DataManager.BahamutDbName);
            CardUtils.InitCardModels(true);
        }
Esempio n. 5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="md5"></param>
 /// <param name="isUpdate">是否需要从Web更新</param>
 public async void ShowImages(string md5, bool isUpdate)
 {
     await DialogHost.Show(new DialogProgress("数据读取中..."), (object s, DialogOpenedEventArgs e) =>
     {
         var cardModel = CardUtils.GetCardModel(md5);
         GetCardDetailUrls(cardModel, isUpdate).ObserveOnDispatcher().Subscribe(pair =>
         {
             // 满足条件之一则更新数据库:1、数据源是否来自Web 2、是否需要从Web更新
             if (pair.Value || isUpdate)
             {
                 SyncImagesData(pair.Key, cardModel);
                 DataManager.ReFillDataToDataSet(DataManager.DsAllCache, SqlExUtils.GetQueryAllSql(), DataManager.BahamutDbName);
                 CardUtils.InitCardModels(true);
             }
             e.Session.UpdateContent(new CardDetailDialog(md5));
             DownloadImages(cardModel);
         });
     });
 }