Exemple #1
0
        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;
            }
        }
Exemple #2
0
 /// <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;
 }
Exemple #3
0
        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);
        }
Exemple #4
0
        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;
        }