public static async Task CreateMangaDownloadAsync(BiliManga manga, int mcid, string title) { try { var download = await BiliMangaDownload.CreateAsync(manga, mcid, title); DownloadPage.Current.CreateDownload(download); download.Completed += async(s, e) => { await LogCompleteAsync(s as IBiliDownload); _logger.Info($"下载完成 {title}-{manga.Title}({mcid},{manga.Epid})"); }; var task = download.StartAsync(); _logger.Info($"开始下载 {title}-{manga.Title}({mcid},P{manga.Epid})"); await task; } catch (WebException e) { _logger.Info(e, e.Message); //var dialog = new ExceptionDialog(e); //await dialog.ShowAsync(); return; } catch (Exception e) { _logger.Error(e, e.Message); //var dialog = new ExceptionDialog(e); //await dialog.ShowAsync(); return; } }
/// <summary> /// /// </summary> /// <param name="manga"></param> /// <param name="mcid"></param> /// <param name="title">这个是BiliMangaMaster的标题</param> public MangaFlyoutControl(BiliManga manga, int mcid, string title, MangaFlyout parent, BiliMangaMasterResultPage page) { this.InitializeComponent(); _manga = manga; _mcid = mcid; _title = title; _parent = parent; _page = page; }
public static async Task <List <string> > GetDownloadUrlsAsync(BiliManga manga, int mcid, string sessdata) { var json1 = await HttpHelper.PostJsonAsync(GetMangaIndexApi, JsonConvert.SerializeObject(new { ep_id = manga.Epid }), sessdata); if (json1.code == 1) { throw new MangaNeedBuyException("漫画需要购买"); } string url = json1.data.host + json1.data.path; var stream = await HttpHelper.GetStreamAsync(url, sessdata); using var data = new MemoryStream(); await stream.CopyToAsync(data); stream.Dispose(); var key = new int[] { manga.Epid& 0xff, manga.Epid >> 8& 0xff, manga.Epid >> 16& 0xff, manga.Epid >> 24& 0xff, mcid& 0xff, mcid >> 8& 0xff, mcid >> 16& 0xff, mcid >> 24& 0xff }; var bytes = data.ToArray().Skip(9).ToArray(); for (int i = 0; i < bytes.Length; i++) { bytes[i] ^= (byte)key[i % 8]; } using var zip = new ZipArchive(new MemoryStream(bytes)); var json2 = await new StreamReader(zip.GetEntry("index.dat").Open()).ReadToEndAsync(); var picList = JsonConvert.DeserializeObject <dynamic>(json2).pics; var picList2 = new List <string>(); foreach (var item in picList) { picList2.Add($"\"{item}\""); } var payload = JsonConvert.SerializeObject(new { urls = $"[{string.Join(",", picList2)}]" }); var json = await HttpHelper.PostJsonAsync(GetMangaTokenApi, payload, sessdata); if (json.code != 0) { throw new Exception("解析失败"); } var picUrlList = new List <string>(); foreach (var item in json.data) { picUrlList.Add($"{item.url}?token={item.token}"); } return(picUrlList); }
public MangaFlyout(BiliManga manga, int mcid, string title, BiliMangaMasterResultPage page) { var control = new MangaFlyoutControl(manga, mcid, title, this, page) { CanDownload = !manga.IsLocked, Title = "提示" }; if (control.CanDownload) { control.Info = $"该漫画可下载"; } else { control.Info = "该漫画不可下载,请先购买"; } Content = control; }