protected virtual bool ProcessOnePage(string url, IndexContent indexContent, ref PageInfo pi)
        {
            string   content  = string.Empty;
            Encoding encoding = null;

            string rooturl = FileDownloadUtil.GetRootUrl(HttpMainHost, CurrentUrl, url);

            int  count = 0;
            bool res   = false;

            while (count < Retry)
            {
                res = FileDownloadUtil.DownloadWebPage(rooturl, url, ref content, ref encoding);

                if (res)
                {
                    break;
                }

                Logger.Instance.Error(string.Format("Download Page Failed! [{0}] = {1}", count, url));
                count++;
            }

            if (!res)
            {
                Logger.Instance.Error(string.Format("Download Page Failed! [{0}]", url));
                return(false);
            }
            else
            {
                pi = GetPageInfo(content, indexContent);

                return(true);
            }
        }
        public BaseDownloadImagesText(string indexUri, string saveToRoot, string novelTitle,
                                      bool UpdateMode, int MaxPages, string httpMainHost, string httpImageHost)
        {
            novelTitle = FileDownloadUtil.GetInvalidPath(novelTitle);
            saveToRoot = FileDownloadUtil.GetInvalidPath(saveToRoot);

            mUpdateMode = UpdateMode;
            mNovelTitle = novelTitle;

            mIndexUri = FileDownloadUtil.GetCorrectCurrentUrl(indexUri);

            mSaveToRoot      = string.Format("{0}\\{1}", saveToRoot, novelTitle);
            mSaveToImageRoot = string.Format("{0}\\Images", mSaveToRoot);

            mNovelRoot = mSaveToRoot;
            mMaxPages  = MaxPages;

            htmlIndexTemplate = string.Format("{0}\\HTTPTemplateIndex.html", AppDomain.CurrentDomain.BaseDirectory);
            htmlPageTemplate  = string.Format("{0}\\HTMLTemplatePages.html", AppDomain.CurrentDomain.BaseDirectory);
            novelJS           = string.Format("{0}\\novel.js", AppDomain.CurrentDomain.BaseDirectory);

            HttpMainHost = httpMainHost;

            HttpImageHost = httpImageHost;

            CurrentUrl = FileDownloadUtil.GetCorrectCurrentUrl(FileDownloadUtil.CombindCorrectUrl(HttpMainHost, indexUri));
        }
        protected virtual bool ProcessIndex(ref List <IndexContent> indexList, ref Encoding encoding)
        {
            string content = string.Empty;

            int  count = 0;
            bool res   = false;

            while (count < Retry)
            {
                res = FileDownloadUtil.DownloadWebPage(HttpMainHost, mIndexUri, ref content, ref encoding);

                if (res)
                {
                    break;
                }

                Logger.Instance.Error(string.Format("Download Page Failed! [{0}] = Index", count));
                count++;
            }

            if (!res)
            {
                Logger.Instance.Error("Download Index Failed!");
                return(false);
            }
            else
            {
                Logger.Instance.Info("Download Index OK!");

                indexList = GetIndex(content);

                return(true);
            }
        }
예제 #4
0
        private async Task DownloadFromRemoteUrlAsync()
        {
            var cachedFolder = ApplicationData.Current.TemporaryFolder;

            if (!string.IsNullOrEmpty(ExpectedFileName))
            {
                var file = await cachedFolder.TryGetFileAsync(ExpectedFileName);

                if (file != null)
                {
                    LocalPath = file.Path;
                    await SetImageSourceAsync(file);

                    return;
                }
            }
            else
            {
                ExpectedFileName = GenerateRandomFileName();
            }
            using (var stream = await FileDownloadUtil.GetIRandomAccessStreamFromUrlAsync(this.RemoteUrl, CTSFactory.MakeCTS().Token))
            {
                var file = await SaveStreamIntoFileAsync(stream.AsStream(), ExpectedFileName, cachedFolder);

                if (file != null)
                {
                    LocalPath = file.Path;
                }
                stream.Seek(0);
                if (stream != null)
                {
                    await SetImageSourceAsync(stream);
                }
            }
        }
        protected virtual bool DownloadImages(PageInfo pi, bool overwrite)
        {
            try
            {
                if (!Directory.Exists(mSaveToImageRoot))
                {
                    Directory.CreateDirectory(mSaveToImageRoot);
                }

                int piCount  = 0;
                int imgCount = 0;

                foreach (string image in pi.ImageList)
                {
                    string FileName = image.Substring(image.LastIndexOf("/") + 1,
                                                      (image.Length - image.LastIndexOf("/") - 1));

                    string saveToLoc = string.Format("{0}\\{1}", mSaveToImageRoot, FileName);

                    if (File.Exists(saveToLoc) && overwrite)
                    {
                        Logger.Instance.InfoImportant("Over write mode, Delete: " + new FileInfo(saveToLoc).Name);
                        File.Delete(saveToLoc);
                    }
                    else if (File.Exists(saveToLoc) && !overwrite)
                    {
                        Logger.Instance.InfoImportant("Update Mode, File Exists: " + new FileInfo(saveToLoc).Name);
                        pi.DownloadedImageList.Add(FileName);
                        continue;
                    }

                    if (FileDownloadUtil.DownloadFile(image, saveToLoc))
                    {
                        Logger.Instance.Info(string.Format("Dwonload OK: {0}", image));
                        pi.DownloadedImageList.Add(FileName);

                        imgCount++;
                    }
                    else
                    {
                        Logger.Instance.Info(string.Format("Dwonload Failed: {0}", image));
                    }

                    piCount++;
                    Logger.Instance.Info("Download Image For PI: " + piCount);
                    Logger.Instance.Info("Download Image: " + imgCount);
                }


                return(true);
            }
            catch (Exception ex)
            {
                Logger.Instance.Error(ex.ToString());
                return(false);
            }
        }
예제 #6
0
        /// <summary>
        /// 下载6分钟内的弹幕,返回弹幕列表
        /// </summary>
        /// <param name="avid">稿件avID</param>
        /// <param name="cid">视频CID</param>
        /// <param name="segmentIndex">分包,每6分钟一包</param>
        /// <returns></returns>
        public List <BiliDanmaku> GetDanmakuProto(long avid, long cid, int segmentIndex)
        {
            string url     = $"https://api.bilibili.com/x/v2/dm/web/seg.so?type=1&oid={cid}&pid={avid}&segment_index={segmentIndex}";
            string referer = "https://www.bilibili.com";

            FileDownloadUtil fileDownload = new FileDownloadUtil();

            fileDownload.Init(url, referer, Path.GetTempPath() + "downkyi/danmaku", $"{cid}-{segmentIndex}.proto", "DanmakuProtobuf");
            fileDownload.Download();

            var danmakuList = new List <BiliDanmaku>();

            DmSegMobileReply danmakus;

            try
            {
                using (var input = File.OpenRead(Path.GetTempPath() + $"downkyi/danmaku/{cid}-{segmentIndex}.proto"))
                {
                    danmakus = DmSegMobileReply.Parser.ParseFrom(input);
                    if (danmakus == null || danmakus.Elems == null)
                    {
                        return(danmakuList);
                    }

                    foreach (var dm in danmakus.Elems)
                    {
                        var danmaku = new BiliDanmaku
                        {
                            Id       = dm.Id,
                            Progress = dm.Progress,
                            Mode     = dm.Mode,
                            Fontsize = dm.Fontsize,
                            Color    = dm.Color,
                            MidHash  = dm.MidHash,
                            Content  = dm.Content,
                            Ctime    = dm.Ctime,
                            Weight   = dm.Weight,
                            //Action = dm.Action,
                            Pool = dm.Pool
                        };
                        danmakuList.Add(danmaku);
                    }
                }
            }
            catch (Exception e)
            {
#if DEBUG
                Console.WriteLine("发生异常: {0}", e);
#endif
                return(null);
            }

            return(danmakuList);
        }
예제 #7
0
        void tbUrl_TextChanged(object sender, EventArgs e)
        {
            string format = FileDownloadUtil.GetUrlFromHost(this.tbUrl.Text);

            if (!format.Equals(this.tbUrl.Text))
            {
                Logger.Instance.Info("Format Url");
                this.tbUrl.Text = format;
            }
            else
            {
                ApplyUrl();
            }
        }
예제 #8
0
        private bool DownloadImages(List <PageInfo> pageInfoList, bool overwrite)
        {
            try
            {
                if (!Directory.Exists(mSaveToImageRoot))
                {
                    Directory.CreateDirectory(mSaveToImageRoot);
                }


                foreach (PageInfo pi in pageInfoList)
                {
                    foreach (string image in pi.ImageList)
                    {
                        string FileName = image.Substring(image.LastIndexOf("/") + 1,
                                                          (image.Length - image.LastIndexOf("/") - 1));

                        string saveToLoc = string.Format("{0}\\{1}", mSaveToImageRoot, FileName);

                        if (File.Exists(saveToLoc) && overwrite)
                        {
                            File.Delete(saveToLoc);
                        }
                        else if (File.Exists(saveToLoc) && !overwrite)
                        {
                            pi.DownloadedImageList.Add(FileName);
                            continue;
                        }

                        if (FileDownloadUtil.DownloadFile(image, saveToLoc))
                        {
                            Logger.Instance.Info(string.Format("Dwonload OK: {0}", image));
                            pi.DownloadedImageList.Add(FileName);
                        }
                        else
                        {
                            Logger.Instance.Info(string.Format("Dwonload Failed: {0}", image));
                        }
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                Logger.Instance.Error(ex.ToString());
                return(false);
            }
        }
예제 #9
0
        private bool ProcessOnePage(string url, IndexContent indexContent, ref PageInfo pi)
        {
            string   content  = string.Empty;
            Encoding encoding = null;

            if (!FileDownloadUtil.DownloadWebPage(HttpMainHost, url, ref content, ref encoding))
            {
                Logger.Instance.Error(string.Format("Download Page Failed! [{0}]", url));
                return(false);
            }
            else
            {
                pi = GetPageInfo(content, indexContent);

                return(true);
            }
        }
예제 #10
0
        private bool ProcessIndex(ref List <IndexContent> indexList, ref Encoding encoding)
        {
            string content = string.Empty;

            if (!FileDownloadUtil.DownloadWebPage(HttpMainHost, mIndexUri, ref content, ref encoding))
            {
                Logger.Instance.Error("Download Index Failed!");
                return(false);
            }
            else
            {
                Logger.Instance.Info("Download Index OK!");

                indexList = GetIndex(content);

                return(true);
            }
        }
예제 #11
0
        public async Task AddCustom(CommandContext ctx, [RemainingText, Description("Name of the command")] string customCommandName)
        {
            CustomAudioCommandModel custCom = CustomAudioCommandFile.Instance.GetAudioFileForCommand(customCommandName);

            if (custCom != null)
            {
                await ctx.RespondAsync("A command with that name already exists :^(");

                return;
            }

            if (await FileDownloadUtil.DownloadFileFromDiscordMessageAsync(ctx))
            {
                DiscordAttachment attachment      = ctx.Message.Attachments[0];
                string            customAudioPath = string.Format(@"AudioFiles\{0}", attachment.FileName);

                CustomAudioCommandFile.Instance.AddCustomCommand(customCommandName, customAudioPath);
                await ctx.RespondAsync(string.Format("Custom command ```{0}``` was added :^)", customCommandName));
            }
        }
예제 #12
0
        public async Task <StorageFile> DownloadImageAsync(string url, string desireName = "img.jpg")
        {
            if (CachedFiles.ContainsKey(url))
            {
                return(await StorageFile.GetFileFromPathAsync(CachedFiles[url]));
            }
            using (var stream = await FileDownloadUtil.GetIRandomAccessStreamFromUrlAsync(url, CTSFactory.MakeCTS().Token))
            {
                var newFile = await GetTempFolder().CreateFileAsync(desireName, CreationCollisionOption.GenerateUniqueName);

                var bytes = new byte[stream.AsStream().Length];
                await stream.AsStream().ReadAsync(bytes, 0, (int)stream.AsStream().Length);

                await FileIO.WriteBytesAsync(newFile, bytes);

                CachedFiles.Add(url, newFile.Path);
                await SaveAsync();

                return(newFile);
            }
        }
예제 #13
0
 private void ApplyUrl()
 {
     this.LinkLabelToNovel.Text = DownloadConfig.Protocol + "://" + FileDownloadUtil.CombindCorrectUrl(this.CBHost.Text, tbUrl.Text);
 }
예제 #14
0
        public void Start(string host, string url, string novelName, string maxPage, string updateMode)
        {
            try
            {
                IsRunning = true;
                StartTime = DateTime.Now;

                LogFile = DateTime.Now.ToString("yyyyMMdd_HHmmssfff") + ".txt";

                novelName = FileDownloadUtil.GetInvalidPath(novelName);

                SaveTo = string.Format("{0}/Downloads", AppDomain.CurrentDomain.BaseDirectory);

                if (string.IsNullOrEmpty(novelName))
                {
                    mLogSaveToFileUrl = "Downloads/" + LogFile;
                }
                else
                {
                    mLogSaveToFileUrl = "Downloads/" + novelName + "/" + LogFile;
                }

                mSaveToDirectory = SaveTo + System.IO.Path.DirectorySeparatorChar + novelName;

                SetLog(mSaveToDirectory);

                Url  = url;
                Host = host;

                ProgressArgs arg = new ProgressArgs();
                arg.Progress = ProgressEnum.Progressing;
                FireOnProgressChangedEvent(arg);

                if (string.IsNullOrEmpty(novelName))
                {
                    Logger.Instance.Error("Novel Name can't be empty");

                    EndTime      = DateTime.Now;
                    arg.Progress = ProgressEnum.FinishFailed;
                    FireOnProgressChangedEvent(arg);

                    return;
                }


                NovelName = novelName;

                if (!int.TryParse(maxPage, out MaxPages))
                {
                    MaxPages = 1000;
                    Logger.Instance.Error("Use Default Max Pages 1000");
                }

                UpdateMode = !updateMode.Equals("YES", StringComparison.OrdinalIgnoreCase);

                if (Host.TrimStart().TrimEnd().Equals("BIQUGE", StringComparison.OrdinalIgnoreCase) ||
                    Host.TrimStart().TrimEnd().Equals("BIQUGE.COM", StringComparison.OrdinalIgnoreCase))
                {
                    download = new BiqugeDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages);
                }
                else if (Host.TrimStart().TrimEnd().Equals("BIQUGE.CO", StringComparison.OrdinalIgnoreCase))
                {
                    download = new BiqugeCODownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages);
                }
                else if (Host.TrimStart().TrimEnd().Equals("DAYANWENXUE", StringComparison.OrdinalIgnoreCase) ||
                         Host.TrimStart().TrimEnd().Equals("DAYANWENXUE.COM", StringComparison.OrdinalIgnoreCase))
                {
                    download = new DayanwenxueDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages);
                }
                else if (Host.TrimStart().TrimEnd().Equals("XIAOSHUOM", StringComparison.OrdinalIgnoreCase) ||
                         Host.TrimStart().TrimEnd().Equals("XIAOSHUOM.COM", StringComparison.OrdinalIgnoreCase))
                {
                    download = new XiaoshuomDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages);
                }
                else if (Host.TrimStart().TrimEnd().Equals("SHUKEJU", StringComparison.OrdinalIgnoreCase) ||
                         Host.TrimStart().TrimEnd().Equals("SHUKEJU.COM", StringComparison.OrdinalIgnoreCase))
                {
                    download = new ShukejuDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages);
                }
                else if (Host.TrimStart().TrimEnd().Equals("WENXUELOU", StringComparison.OrdinalIgnoreCase) ||
                         Host.TrimStart().TrimEnd().Equals("WENXUELOU.COM", StringComparison.OrdinalIgnoreCase))
                {
                    download = new WenxuelouDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages);
                }
                else if (Host.TrimStart().TrimEnd().Equals("BIQUGE", StringComparison.OrdinalIgnoreCase) ||
                         Host.TrimStart().TrimEnd().Equals("BIQUGE.CC", StringComparison.OrdinalIgnoreCase))
                {
                    download = new BiqugeCCDownloadImagesText(Url, SaveTo, NovelName, UpdateMode, MaxPages);
                }
                else
                {
                    Logger.Instance.Error("Can't find plug-in for this host");

                    EndTime      = DateTime.Now;
                    arg.Progress = ProgressEnum.FinishFailed;
                    FireOnProgressChangedEvent(arg);

                    return;
                }

                if (download != null)
                {
                    download.CopyFiles();

                    download.OnProgressChanged += new ProgressChangeDelegate(download_OnProgressChanged);

                    thread = new Thread(new ThreadStart(download.ProcessAllOneByOne));
                    thread.Start();
                }
            }
            catch (Exception ex)
            {
                Logger.Instance.Error(ex.ToString());
                ProgressArgs arg = new ProgressArgs();
                arg.Progress = ProgressEnum.FinishFailed;
                FireOnProgressChangedEvent(arg);
            }
            finally
            {
                IsRunning = false;
            }
        }