示例#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);
            });
        }
示例#2
0
 public CardPreviewVm()
 {
     CardModels = new ObservableCollection <CardModel>();
     CmdRare    = new DelegateCommand {
         ExecuteCommand = Rarity_Click
     };
     CmdDownloadImages = new DelegateCommand {
         ExecuteCommand = DownloadImages_Click
     };
     CmdSyncIcon = new DelegateCommand {
         ExecuteCommand = SyncIcon_Click
     };
     PrgModel = new PrgModel();
 }