public ImportResult(ImportDecision importDecision, params string[] errors) { Ensure.That(importDecision, () => importDecision).IsNotNull(); ImportDecision = importDecision; Errors = errors.ToList(); }
public ImportResult(ImportDecision importDecision, params String[] errors) { Ensure.That(importDecision, () => importDecision).IsNotNull(); ImportDecision = importDecision; Errors = errors.ToList(); }
private IEnumerable <ImportDecision> GetDecisions(IEnumerable <String> videoFiles, Series series, bool sceneSource) { foreach (var file in videoFiles) { ImportDecision decision = null; try { var parsedEpisode = _parsingService.GetEpisodes(file, series, sceneSource); if (parsedEpisode != null) { parsedEpisode.Size = _diskProvider.GetFileSize(file); decision = GetDecision(parsedEpisode); } else { parsedEpisode = new LocalEpisode(); parsedEpisode.Path = file; decision = new ImportDecision(parsedEpisode, "Unable to parse file"); } } catch (Exception e) { _logger.ErrorException("Couldn't import file." + file, e); } if (decision != null) { yield return(decision); } } }
private IEnumerable<ImportDecision> GetDecisions(IEnumerable<String> videoFiles, Series series, bool sceneSource) { foreach (var file in videoFiles) { ImportDecision decision = null; try { var parsedEpisode = _parsingService.GetEpisodes(file, series, sceneSource); if (parsedEpisode != null) { parsedEpisode.Size = _diskProvider.GetFileSize(file); decision = GetDecision(parsedEpisode); } else { parsedEpisode = new LocalEpisode(); parsedEpisode.Path = file; decision = new ImportDecision(parsedEpisode, "Unable to parse file"); } } catch (Exception e) { _logger.ErrorException("Couldn't import file." + file, e); } if (decision != null) { yield return decision; } } }
private ImportDecision GetDecision(LocalEpisode localEpisode, DownloadClientItem downloadClientItem, bool otherFiles) { ImportDecision decision = null; var fileEpisodeInfo = Parser.Parser.ParsePath(localEpisode.Path); localEpisode.FileEpisodeInfo = fileEpisodeInfo; localEpisode.Size = _diskProvider.GetFileSize(localEpisode.Path); try { _aggregationService.Augment(localEpisode, downloadClientItem, otherFiles); if (localEpisode.Episodes.Empty()) { if (IsPartialSeason(localEpisode)) { decision = new ImportDecision(localEpisode, new Rejection("Partial season packs are not supported")); } else if (IsSeasonExtra(localEpisode)) { decision = new ImportDecision(localEpisode, new Rejection("Extras are not supported")); } else { decision = new ImportDecision(localEpisode, new Rejection("Invalid season or episode")); } } else { decision = GetDecision(localEpisode, downloadClientItem); } } catch (AugmentingFailedException) { decision = new ImportDecision(localEpisode, new Rejection("Unable to parse file")); } catch (Exception ex) { _logger.Error(ex, "Couldn't import file. {0}", localEpisode.Path); decision = new ImportDecision(localEpisode, new Rejection("Unexpected error processing file")); } if (decision == null) { _logger.Error("Unable to make a decision on {0}", localEpisode.Path); } else if (decision.Rejections.Any()) { _logger.Debug("File rejected for the following reasons: {0}", string.Join(", ", decision.Rejections)); } else { _logger.Debug("File accepted"); } return(decision); }
private IEnumerable <ImportDecision> GetDecisions(IEnumerable <String> videoFiles, Series series, bool sceneSource, QualityModel quality = null) { foreach (var file in videoFiles) { ImportDecision decision = null; try { var localEpisode = _parsingService.GetLocalEpisode(file, series, sceneSource); if (localEpisode != null) { if (quality != null && new QualityModelComparer(localEpisode.Series.Profile).Compare(quality, localEpisode.Quality) > 0) { _logger.Debug("Using quality from folder: {0}", quality); localEpisode.Quality = quality; } localEpisode.Size = _diskProvider.GetFileSize(file); _logger.Debug("Size: {0}", localEpisode.Size); //TODO: make it so media info doesn't ruin the import process of a new series if (sceneSource) { localEpisode.MediaInfo = _videoFileInfoReader.GetMediaInfo(file); } decision = GetDecision(localEpisode); } else { localEpisode = new LocalEpisode(); localEpisode.Path = file; decision = new ImportDecision(localEpisode, "Unable to parse file"); } } catch (EpisodeNotFoundException e) { var localEpisode = new LocalEpisode(); localEpisode.Path = file; decision = new ImportDecision(localEpisode, e.Message); } catch (Exception e) { _logger.ErrorException("Couldn't import file. " + file, e); } if (decision != null) { yield return(decision); } } }
private ImportDecision GetDecision(string file, Series series, DownloadClientItem downloadClientItem, ParsedEpisodeInfo folderInfo, bool sceneSource, bool shouldUseFolderName) { ImportDecision decision = null; try { var localEpisode = _parsingService.GetLocalEpisode(file, series, shouldUseFolderName ? folderInfo : null, sceneSource); if (localEpisode != null) { localEpisode.Quality = GetQuality(folderInfo, localEpisode.Quality, series); localEpisode.Size = _diskProvider.GetFileSize(file); _logger.Debug("Size: {0}", localEpisode.Size); //TODO: make it so media info doesn't ruin the import process of a new series if (sceneSource) { localEpisode.MediaInfo = _videoFileInfoReader.GetMediaInfo(file); } if (localEpisode.Episodes.Empty()) { decision = new ImportDecision(localEpisode, new Rejection("Invalid season or episode")); } else { decision = GetDecision(localEpisode, downloadClientItem); } } else { localEpisode = new LocalEpisode(); localEpisode.Path = file; decision = new ImportDecision(localEpisode, new Rejection("Unable to parse file")); } } catch (Exception e) { _logger.Error(e, "Couldn't import file. {0}", file); var localEpisode = new LocalEpisode { Path = file }; decision = new ImportDecision(localEpisode, new Rejection("Unexpected error processing file")); } if (decision == null) { _logger.Error("Unable to make a decision on {0}", file); } return(decision); }
private ImportDecision GetDecision(string file, Series series, ParsedEpisodeInfo folderInfo, bool sceneSource, bool shouldUseFolderName) { ImportDecision decision = null; try { var localEpisode = _parsingService.GetLocalEpisode(file, series, shouldUseFolderName ? folderInfo : null, sceneSource); if (localEpisode != null) { localEpisode.Quality = GetQuality(folderInfo, localEpisode.Quality, series); localEpisode.Size = _diskProvider.GetFileSize(file); _logger.Debug("Size: {0}", localEpisode.Size); //TODO: make it so media info doesn't ruin the import process of a new series if (sceneSource) { localEpisode.MediaInfo = _videoFileInfoReader.GetMediaInfo(file); } decision = GetDecision(localEpisode); } else { localEpisode = new LocalEpisode(); localEpisode.Path = file; decision = new ImportDecision(localEpisode, new Rejection("Unable to parse file")); } } catch (EpisodeNotFoundException e) { var localEpisode = new LocalEpisode(); localEpisode.Path = file; decision = new ImportDecision(localEpisode, new Rejection(e.Message)); } catch (Exception e) { _logger.ErrorException("Couldn't import file. " + file, e); } return(decision); }
private IEnumerable<ImportDecision> GetDecisions(IEnumerable<String> videoFiles, Series series, bool sceneSource, QualityModel quality = null) { foreach (var file in videoFiles) { ImportDecision decision = null; try { var parsedEpisode = _parsingService.GetLocalEpisode(file, series, sceneSource); if (parsedEpisode != null) { if (quality != null && new QualityModelComparer(parsedEpisode.Series.QualityProfile).Compare(quality, parsedEpisode.Quality) > 0) { _logger.Trace("Using quality from folder: {0}", quality); parsedEpisode.Quality = quality; } parsedEpisode.Size = _diskProvider.GetFileSize(file); _logger.Trace("Size: {0}", parsedEpisode.Size); decision = GetDecision(parsedEpisode); } else { parsedEpisode = new LocalEpisode(); parsedEpisode.Path = file; decision = new ImportDecision(parsedEpisode, "Unable to parse file"); } } catch (Exception e) { _logger.ErrorException("Couldn't import file." + file, e); } if (decision != null) { yield return decision; } } }
private IEnumerable <ImportDecision> GetDecisions(IEnumerable <String> videoFiles, Series series, bool sceneSource, QualityModel quality = null) { foreach (var file in videoFiles) { ImportDecision decision = null; try { var parsedEpisode = _parsingService.GetLocalEpisode(file, series, sceneSource); if (parsedEpisode != null) { if (quality != null && new QualityModelComparer(parsedEpisode.Series.QualityProfile).Compare(quality, parsedEpisode.Quality) > 0) { _logger.Debug("Using quality from folder: {0}", quality); parsedEpisode.Quality = quality; } parsedEpisode.Size = _diskProvider.GetFileSize(file); _logger.Debug("Size: {0}", parsedEpisode.Size); decision = GetDecision(parsedEpisode); } else { parsedEpisode = new LocalEpisode(); parsedEpisode.Path = file; decision = new ImportDecision(parsedEpisode, "Unable to parse file"); } } catch (Exception e) { _logger.ErrorException("Couldn't import file." + file, e); } if (decision != null) { yield return(decision); } } }
private ImportDecision GetDecision(string file, Movie movie, ParsedMovieInfo folderInfo, bool sceneSource, bool shouldUseFolderName, bool shouldCheckQuality = false) { ImportDecision decision = null; try { var localMovie = _parsingService.GetLocalMovie(file, movie, shouldUseFolderName ? folderInfo : null, sceneSource); if (localMovie != null) { localMovie.Quality = GetQuality(folderInfo, localMovie.Quality, movie); localMovie.Size = _diskProvider.GetFileSize(file); _logger.Debug("Size: {0}", localMovie.Size); var current = localMovie.Quality; //TODO: make it so media info doesn't ruin the import process of a new series if (sceneSource && ShouldCheckQualityForParsedQuality(current.Quality)) { localMovie.MediaInfo = _videoFileInfoReader.GetMediaInfo(file); if (shouldCheckQuality) { _logger.Debug("Checking quality for this video file to make sure nothing mismatched."); var width = localMovie.MediaInfo.Width; var qualityName = current.Quality.Name.ToLower(); QualityModel updated = null; if (width > 2000) { if (qualityName.Contains("bluray")) { updated = new QualityModel(Quality.Bluray2160p); } else if (qualityName.Contains("webdl")) { updated = new QualityModel(Quality.WEBDL2160p); } else if (qualityName.Contains("hdtv")) { updated = new QualityModel(Quality.HDTV2160p); } else { var def = _qualitiesService.Get(Quality.HDTV2160p); if (localMovie.Size > def.MinSize && def.MaxSize > localMovie.Size) { updated = new QualityModel(Quality.HDTV2160p); } def = _qualitiesService.Get(Quality.WEBDL2160p); if (localMovie.Size > def.MinSize && def.MaxSize > localMovie.Size) { updated = new QualityModel(Quality.WEBDL2160p); } def = _qualitiesService.Get(Quality.Bluray2160p); if (localMovie.Size > def.MinSize && def.MaxSize > localMovie.Size) { updated = new QualityModel(Quality.Bluray2160p); } if (updated == null) { updated = new QualityModel(Quality.Bluray2160p); } } } else if (width > 1400) { if (qualityName.Contains("bluray")) { updated = new QualityModel(Quality.Bluray1080p); } else if (qualityName.Contains("webdl")) { updated = new QualityModel(Quality.WEBDL1080p); } else if (qualityName.Contains("hdtv")) { updated = new QualityModel(Quality.HDTV1080p); } else { var def = _qualitiesService.Get(Quality.HDTV1080p); if (localMovie.Size > def.MinSize && def.MaxSize > localMovie.Size) { updated = new QualityModel(Quality.HDTV1080p); } def = _qualitiesService.Get(Quality.WEBDL1080p); if (localMovie.Size > def.MinSize && def.MaxSize > localMovie.Size) { updated = new QualityModel(Quality.WEBDL1080p); } def = _qualitiesService.Get(Quality.Bluray1080p); if (localMovie.Size > def.MinSize && def.MaxSize > localMovie.Size) { updated = new QualityModel(Quality.Bluray1080p); } if (updated == null) { updated = new QualityModel(Quality.Bluray1080p); } } } else if (width > 900) { if (qualityName.Contains("bluray")) { updated = new QualityModel(Quality.Bluray720p); } else if (qualityName.Contains("webdl")) { updated = new QualityModel(Quality.WEBDL720p); } else if (qualityName.Contains("hdtv")) { updated = new QualityModel(Quality.HDTV720p); } else { var def = _qualitiesService.Get(Quality.HDTV720p); if (localMovie.Size > def.MinSize && def.MaxSize > localMovie.Size) { updated = new QualityModel(Quality.HDTV720p); } def = _qualitiesService.Get(Quality.WEBDL720p); if (localMovie.Size > def.MinSize && def.MaxSize > localMovie.Size) { updated = new QualityModel(Quality.WEBDL720p); } def = _qualitiesService.Get(Quality.Bluray720p); if (localMovie.Size > def.MinSize && def.MaxSize > localMovie.Size) { updated = new QualityModel(Quality.Bluray720p); } if (updated == null) { updated = new QualityModel(Quality.Bluray720p); } } } if (updated != null && updated != current) { _logger.Debug("Quality ({0}) of the file is different than the one we have ({1})", updated, current); updated.QualitySource = QualitySource.MediaInfo; localMovie.Quality = updated; } } decision = GetDecision(localMovie); } else { decision = GetDecision(localMovie); } } else { localMovie = new LocalMovie(); localMovie.Path = file; decision = new ImportDecision(localMovie, new Rejection("Unable to parse file")); } } catch (Exception e) { _logger.Error(e, "Couldn't import file. " + file); var localMovie = new LocalMovie { Path = file }; decision = new ImportDecision(localMovie, new Rejection("Unexpected error processing file")); } //LocalMovie nullMovie = null; //decision = new ImportDecision(nullMovie, new Rejection("IMPLEMENTATION MISSING!!!")); return(decision); }
public ImportResult(ImportDecision importDecision, params String[] errors) { ImportDecision = importDecision; Errors = errors.ToList(); }
private ImportDecision GetDecision(string file, Series series, ParsedEpisodeInfo folderInfo, bool sceneSource, bool shouldUseFolderName) { ImportDecision decision = null; try { var localEpisode = _parsingService.GetLocalEpisode(file, series, shouldUseFolderName ? folderInfo : null, sceneSource); if (localEpisode != null) { localEpisode.Quality = GetQuality(folderInfo, localEpisode.Quality, series); localEpisode.Size = _diskProvider.GetFileSize(file); _logger.Debug("Size: {0}", localEpisode.Size); //TODO: make it so media info doesn't ruin the import process of a new series if (sceneSource) { localEpisode.MediaInfo = _videoFileInfoReader.GetMediaInfo(file); } if (localEpisode.Episodes.Empty()) { decision = new ImportDecision(localEpisode, new Rejection("Invalid season or episode")); } else { decision = GetDecision(localEpisode); } } else { localEpisode = new LocalEpisode(); localEpisode.Path = file; decision = new ImportDecision(localEpisode, new Rejection("Unable to parse file")); } } catch (Exception e) { _logger.ErrorException("Couldn't import file. " + file, e); } return decision; }