예제 #1
0
        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);
        }
예제 #2
0
        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));
            }
        }
예제 #3
0
        //下载壁纸
        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()));
        }