Esempio n. 1
0
        public static bool DownloadAll(out Downloader handler)
        {
            var bundles = new List <BundleRef>();

            for (var i = 0; i < serverVersions.bundles.Count; i++)
            {
                var bundle = serverVersions.bundles[i];
                if (IsNew(bundle))
                {
                    bundles.Add(bundle);
                }
            }

            if (bundles.Count > 0)
            {
                var downloader = new Downloader();
                foreach (var item in bundles)
                {
                    downloader.AddDownload(GetDownloadURL(item.name), updatePath + item.name, item.crc, item.len);
                }
                Downloaders.Add(downloader);
                handler = downloader;
                return(true);
            }

            handler = null;
            return(false);
        }
        private void ProcessVideos(IEnumerable <YTVideo> videos, SeenItems seenItems, string downloadFolder, int season, LocalMetadata localMetadata)
        {
            var client       = new YoutubeClient();
            var seasonFolder = Path.Combine(downloadFolder, $"Season {season}");

            Directory.CreateDirectory(seasonFolder);
            var episodeNumber = GetLastEpisodeNumber(seasonFolder);

            videos.ToList().ForEach(video =>
            {
                episodeNumber++;

                Console.WriteLine($"  0.00% Downloading {video.Id} {episodeNumber} {video.Title}");
                Console.SetCursorPosition(0, Console.CursorTop - 1);

                var videoFileNameBase = $"S{season.ToString().PadLeft(2, '0')}E{episodeNumber.ToString("N0").PadLeft(2, '0')} " + video.Title.Aggregate("", (agg, cur) => Path.GetInvalidFileNameChars().Contains(cur) ? agg : agg + cur);

                var progress = new ConcurrentProgress <double>(d =>
                {
                    Console.SetCursorPosition(0, Console.CursorTop);
                    Console.Write((d * 100).ToString("N2").PadLeft(6));
                });

                Downloaders.DownloadVideo(client, video, seasonFolder, videoFileNameBase, progress);
                Downloaders.DownloadAllCaptions(client, video, seasonFolder, videoFileNameBase, progress);
                CreateMetadata(video, seasonFolder, videoFileNameBase, localMetadata);

                seenItems.SaveId(video.Id);

                Console.WriteLine();
            });
        }
        private async Task InitilizeTasks()
        {
            int max = Config.MaxDownloaders;

            for (int i = 0; i < Config.MaxDownloaders; i++)
            {
                TaskState state = new TaskState();
                Task      task  = new Task <Task>(DoDownloadWork, state);
                //Task task = DoDownloadWork(state);
                state.Id = task.Id;

                Downloaders.TryAdd(i, task);
                Tasks.TryAdd(task.Id, task);
            }

            for (int i = 0; i < Config.MaxProcessors; i++)
            {
                TaskState state = new TaskState();
                Task      task  = new Task <Task>(DoWork, state, TaskCreationOptions.LongRunning);
                state.Id = task.Id;

                Workers.TryAdd(i, task);
                Tasks.TryAdd(task.Id, task);
            }
        }
 public static MangaDownloaderBase GetDownloader(Downloaders downloader)
 {
     if (downloader == Downloaders.ReadMangaToday)
     {
         return new ReadMangaToday();
     }
     else if (downloader == Downloaders.Mangafox)
     {
         return new Mangafox();
     }
     else if (downloader == Downloaders.Kissmanga)
     {
         return new Kissmanga();
     }
     else return null;
 }
Esempio n. 5
0
        public static bool DownloadAll(string[] patches, out Downloader handler)
        {
            if (updateAll)
            {
                return(DownloadAll(out handler));
            }

            var bundles = new List <BundleRef>();

            foreach (var patch in patches)
            {
                var saved = PlayerPrefs.GetString(patch, string.Empty);
                if (!saved.Equals(currentVersions.ver))
                {
                    var newFiles = GetNewFiles(patch);
                    foreach (var file in newFiles)
                    {
                        if (!bundles.Exists(x => x.name.Equals(file.name)))
                        {
                            bundles.Add(file);
                        }
                    }
                }
            }

            if (bundles.Count > 0)
            {
                var downloader = new Downloader();
                foreach (var item in bundles)
                {
                    downloader.AddDownload(GetDownloadURL(item.name), updatePath + item.name, item.crc, item.len);
                }
                Downloaders.Add(downloader);
                handler             = downloader;
                handler.onFinished += () =>
                {
                    foreach (var item in patches)
                    {
                        PlayerPrefs.SetString(item, currentVersions.ver);
                    }
                };
                return(true);
            }

            handler = null;
            return(false);
        }
Esempio n. 6
0
 private static void UpdateDownloaders()
 {
     if (Downloaders.Count > 0)
     {
         for (var i = 0; i < Downloaders.Count; ++i)
         {
             var downloader = Downloaders[i];
             downloader.Update();
             if (downloader.isDone)
             {
                 Log("RemoveDownloader:" + i);
                 Downloaders.RemoveAt(i);
                 --i;
             }
         }
     }
 }
Esempio n. 7
0
        private void SaveVideo(YTVideo video, string downloadFolder, string videoFileNameBase)
        {
            var client = new YoutubeClient();

            Console.WriteLine($"  0.00% Downloading {video.Id} {video.Title}");
            Console.SetCursorPosition(0, Console.CursorTop - 1);

            var progress = new ConcurrentProgress <double>(d =>
            {
                Console.SetCursorPosition(0, Console.CursorTop);
                Console.Write((d * 100).ToString("N2").PadLeft(6));
            });

            Downloaders.DownloadVideo(client, video, downloadFolder, videoFileNameBase, progress);
            Downloaders.DownloadAllCaptions(client, video, downloadFolder, videoFileNameBase, progress);

            Console.WriteLine();
        }
Esempio n. 8
0
        public static bool DownloadAll(string[] patches, out Downloader handler)
        {
            if (updateAll)
            {
                return(DownloadAll(out handler));
            }

            var bundles = new List <BundleRef>();

            foreach (var patch in patches)
            {
                var newFiles = GetNewFiles(patch);
                foreach (var file in newFiles)
                {
                    if (!bundles.Exists(x => x.name.Equals(file.name)))
                    {
                        bundles.Add(file);
                    }
                }
            }

            if (bundles.Count > 0)
            {
                var downloader = new Downloader();
                foreach (var item in bundles)
                {
                    downloader.AddDownload(GetDownloadURL(item.name), updatePath + item.name, item.crc, item.len);
                }
                Downloaders.Add(downloader);
                handler = downloader;
                return(true);
            }

            handler = null;
            return(false);
        }
Esempio n. 9
0
        /*
         * public int SetProxy(string ProxyURL) {
         *  var cnt = 0;
         *
         *  this.Downloaders.ForEach(x => {
         *      if (x is IProxy) {
         *          (x as IProxy).ProxyURL = ProxyURL;
         *          cnt++;
         *      }
         *  });
         *
         *  return cnt;
         * }
         */

        public void AddDownloader(IFileDownloader downloader)
        {
            Downloaders.Add(downloader);
        }
Esempio n. 10
0
        private void DownloadFinishedCallback(Downloaders.AbstractDownloader downloader, int id)
        {
            Log.Info("Finished downloading file with id '{0}'", id);

            // Don't report finished signal when download is called blocking
            if (id != BLOCKING_DOWNLOAD_ID) {
                lock (this) {
                    // Remove Download
                    this.Downloads.Remove(id);
                }
            }

            // TODO: Maybe dangerous when disconnecting while other download
            // is still running?
            // Disconnect signals
            downloader.Status -= new Downloaders.StatusHandler( this.OnDownloadStatus );
            downloader.Finished -= new Downloaders.FinishedHandler( this.DownloadFinishedCallback );

            this.OnDownloadFinished(id);
        }
Esempio n. 11
0
 private async Task InitializeMangaDownloader(Downloaders downloader)
 {
     ToggleAllButtons();
     await Task.Run(() =>
     {
         if (mangaDownloader != null)
         {
             mangaDownloader.Dispose();
         }
         mangaDownloader = MangaDownloaderBase.GetDownloader(downloader);
         mangaDownloader.ChapterDownloadEvent += MangaDownloader_ChapterDownloadEvent;
         mangaDownloader.PageDownloadEvent += MangaDownloader_PageDownloadEvent;
         mangaDownloader.ChapterHtmlDownloadEvent += MangaDownloader_ChapterHtmlDownloadEvent;
     });
     ToggleAllButtons();
 }