/// <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); }); }
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(); }