/// <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); }); }
// 同步图标数据至数据库 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("数据库异常"); } }
// 同步图鉴数据至数据库 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); }
/// <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); }); }); }