示例#1
0
        public async Task DownloadSeason(Uri seasonUrl, IEpisodeProvider episodeProvider, CancellationToken cancellationToken = default)
        {
            _logger.LogInformation("Current season: " + seasonUrl);
            var episodes = await episodeProvider.GetShowSeasonEpisodesAsync(seasonUrl, cancellationToken);

            if (episodes == null || episodes.Length == 0)
            {
                _logger.LogInformation("No Episodes Available");
                return;
            }
            foreach (var episode in episodes)
            {
                _logger.LogInformation("Current episode: " + episode);
                var downloaded = await _historyService.CheckIfDownloadedAsync(episode);

                if (downloaded)
                {
                    _logger.LogInformation("Already downloaded. Skipped");
                    continue;
                }
                try
                {
                    await DownloadEpisode(episode, episodeProvider, cancellationToken);

                    _logger.LogInformation("Downnload Finished");
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, ex.Message);
                }
            }
        }
示例#2
0
        private async Task DownloadEpisode(Uri episodeUrl, IEpisodeProvider episodeProvider, CancellationToken cancellationToken = default)
        {
            var episodeInfo = await episodeProvider.GetEpisodeInfoAsync(episodeUrl, cancellationToken);

            _logger.LogInformation($"Downloading {episodeInfo.GetFileName()}");

            var filename = _fileService.MakeValidFileName(episodeInfo.GetFileName());

            var savePathBuilder = new SavePathBuilder(_fileService)
                                  .ForEpisode(episodeInfo)
                                  .SetBasePath(_configuration.SavePath);

            if (_configuration.SaveShowsInFolders)
            {
                savePathBuilder.AddShowFolder();
            }
            if (_configuration.SaveSeasonsInFolders)
            {
                savePathBuilder.AddSeasonFolder();
            }
            var savePath = savePathBuilder.Build();

            var downloadFile = new File(filename, _configuration.DownloadExtension, _configuration.DownloadPath);
            var finalFile    = downloadFile.SetPath(savePath);

            _fileService.EnsureFolderExists(_configuration.DownloadPath);
            _fileService.EnsureFolderExists(savePath);

            _downloadService.DownloadEpisode(episodeInfo.StreamUrl, downloadFile.GetFullPath(), episodeInfo.Skip, episodeInfo.Duration);
            _fileService.MoveFile(downloadFile.GetFullPath(), finalFile.GetFullPath(), _configuration.Overwrite);

            await _historyService.AddDownloadedAsync(episodeInfo.GetFileName(), episodeUrl, episodeInfo.StreamUrl);
        }
示例#3
0
        public async Task DownloadShow(Uri showUrl, IEpisodeProvider episodeProvider, CancellationToken cancellationToken = default)
        {
            _logger.LogInformation("Current show: " + showUrl);
            var seasons = await episodeProvider.GetShowSeasonsAsync(showUrl, cancellationToken);

            if (seasons == null || seasons.Length == 0)
            {
                _logger.LogInformation("No Seasons Available");
                return;
            }

            foreach (var season in seasons)
            {
                await DownloadSeason(season, episodeProvider);
            }
        }
示例#4
0
 //
 // GET: /Series/
 public SeriesController(ISyncProvider syncProvider, ISeriesProvider seriesProvider, IEpisodeProvider episodeProvider)
 {
     _seriesProvider = seriesProvider;
     _episodeProvider = episodeProvider;
     _syncProvider = syncProvider;
 }
示例#5
0
 public SyncProvider(ISeriesProvider seriesProvider, IEpisodeProvider episodeProvider, INotificationProvider notificationProvider)
 {
     _seriesProvider = seriesProvider;
     _episodeProvider = episodeProvider;
     _notificationProvider = notificationProvider;
 }