public async Task <WallpaperModel> CreateWallpaperDraft(IFormCollection fc) { if (fc != null && fc.Files.Count > 0 && fc.Files[0].Length > 0) { var formFile = fc.Files[0]; var info = new WallpaperProjectInfo() { File = formFile.FileName }; var targetDir = await WallpaperApi.CreateWallpaperDraft(AppManager.UserSetting.Wallpaper.WallpaperSaveDir, info); var distFile = Path.Combine(targetDir, formFile.FileName); using var stream = System.IO.File.Create(distFile); await formFile.CopyToAsync(stream); var r = WallpaperApi.CreateWallpaperModel(distFile); if (string.IsNullOrEmpty(r.Info.Title)) { int lastIndex = r.Info.File.LastIndexOf("."); r.Info.Title = r.Info.File.Remove(lastIndex); } return(r); } return(null); }
public async Task <BaseApiResult> UpdateProjectInfo(string destDir, WallpaperProjectInfo info) { try { await WallpaperApi.UpdateProjectInfo(destDir, info); return(BaseApiResult.SuccessState()); } catch (Exception ex) { return(BaseApiResult.ExceptionState(ex)); } }
//下载壁纸 public Task <BaseApiResult> DownloadWallpaper(string wallpaper, string cover, WallpaperProjectInfo info) { if (wallpaper == null) { return(Task.FromResult(BaseApiResult.ErrorState(ErrorType.Failed))); } string destFolder = null; if (info != null && info.ID != null) { destFolder = Path.Combine(AppManager.UserSetting.Wallpaper.WallpaperSaveDir, info.ID); } else { destFolder = WallpaperApi.GetDraftDir(AppManager.UserSetting.Wallpaper.WallpaperSaveDir); } if (info == null) { info = new WallpaperProjectInfo(); } CancellationTokenSource cts = new(); _ = Task.Run(async() => { RaiseLimiter _raiseLimiter = new(); var wpProgressInfo = new Progress <(float competed, float total)>((e) => { _raiseLimiter.Execute(async() => { var client = _hubEventEmitter.AllClient(); await client.SendAsync("DownloadWallpaperProgressChanged", new { path = wallpaper, e.competed, e.total, percent = e.competed / e.total * 90, completed = false }); }, 1000); }); var coverProgressInfo = new Progress <(float competed, float total)>((e) => { _raiseLimiter.Execute(async() => { var client = _hubEventEmitter.AllClient(); var percent = e.competed / e.total * 10 + 90; await client.SendAsync("DownloadWallpaperProgressChanged", new { path = cover, e.competed, e.total, percent, completed = percent == 100 }); }, 1000); }); info.File = Path.GetFileName(wallpaper); string destWp = Path.Combine(destFolder, info.File); await NetworkHelper.DownloadFileAsync(wallpaper, destWp, cts.Token, wpProgressInfo); if (cover != null) { info.Preview = Path.GetFileName(cover); string destCover = Path.Combine(destFolder, info.Preview); await NetworkHelper.DownloadFileAsync(cover, destCover, cts.Token, coverProgressInfo); } //生成json await UpdateProjectInfo(destFolder, info); }); return(Task.FromResult(BaseApiResult.SuccessState())); }