public static QualityModel ParseQuality(string name) { Logger.Debug("Trying to parse quality for {0}", name); name = name.Trim(); var result = ParseQualityName(name); // Based on extension if (result.Quality == Quality.Unknown && !name.ContainsInvalidPathChars()) { try { result.Quality = MediaFileExtensions.GetQualityForExtension(Path.GetExtension(name)); result.SourceDetectionSource = QualityDetectionSource.Extension; result.ResolutionDetectionSource = QualityDetectionSource.Extension; } catch (ArgumentException) { // Swallow exception for cases where string contains illegal // path characters. } } return(result); }
public static QualityModel ParseQualityName(string name) { var normalizedName = name.Replace('_', ' ').Trim(); var result = ParseQualityModifiers(name, normalizedName); if (RawHDRegex.IsMatch(normalizedName)) { result.SourceDetectionSource = QualityDetectionSource.Name; result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.RAWHD; return(result); } var sourceMatches = SourceRegex.Matches(normalizedName); var sourceMatch = sourceMatches.OfType <Match>().LastOrDefault(); var resolution = ParseResolution(normalizedName); var codecRegex = CodecRegex.Match(normalizedName); var remuxMatch = RemuxRegex.IsMatch(normalizedName); if (resolution != Resolution.Unknown) { result.ResolutionDetectionSource = QualityDetectionSource.Name; } if (sourceMatch != null && sourceMatch.Success) { result.SourceDetectionSource = QualityDetectionSource.Name; if (sourceMatch.Groups["bluray"].Success) { if (codecRegex.Groups["xvid"].Success || codecRegex.Groups["divx"].Success) { result.Quality = Quality.Bluray480p; return(result); } if (resolution == Resolution.R2160p) { result.Quality = remuxMatch ? Quality.Bluray2160pRemux : Quality.Bluray2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = remuxMatch ? Quality.Bluray1080pRemux : Quality.Bluray1080p; return(result); } if (resolution == Resolution.R360P || resolution == Resolution.R480P || resolution == Resolution.R540p || resolution == Resolution.R576p) { result.Quality = Quality.Bluray480p; return(result); } // Treat a remux without a source as 1080p, not 720p. if (remuxMatch) { result.Quality = Quality.Bluray1080pRemux; return(result); } result.Quality = Quality.Bluray720p; return(result); } if (sourceMatch.Groups["webdl"].Success) { if (resolution == Resolution.R2160p) { result.Quality = Quality.WEBDL2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = Quality.WEBDL1080p; return(result); } if (resolution == Resolution.R720p) { result.Quality = Quality.WEBDL720p; return(result); } if (name.Contains("[WEBDL]")) { result.Quality = Quality.WEBDL720p; return(result); } result.Quality = Quality.WEBDL480p; return(result); } if (sourceMatch.Groups["webrip"].Success) { if (resolution == Resolution.R2160p) { result.Quality = Quality.WEBRip2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = Quality.WEBRip1080p; return(result); } if (resolution == Resolution.R720p) { result.Quality = Quality.WEBRip720p; return(result); } result.Quality = Quality.WEBRip480p; return(result); } if (sourceMatch.Groups["hdtv"].Success) { if (MPEG2Regex.IsMatch(normalizedName)) { result.Quality = Quality.RAWHD; return(result); } if (resolution == Resolution.R2160p) { result.Quality = Quality.HDTV2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = Quality.HDTV1080p; return(result); } if (resolution == Resolution.R720p) { result.Quality = Quality.HDTV720p; return(result); } if (name.Contains("[HDTV]")) { result.Quality = Quality.HDTV720p; return(result); } result.Quality = Quality.SDTV; return(result); } if (sourceMatch.Groups["bdrip"].Success || sourceMatch.Groups["brrip"].Success) { switch (resolution) { case Resolution.R720p: result.Quality = Quality.Bluray720p; return(result); case Resolution.R1080p: result.Quality = Quality.Bluray1080p; return(result); default: result.Quality = Quality.Bluray480p; return(result); } } if (sourceMatch.Groups["dvd"].Success) { result.Quality = Quality.DVD; return(result); } if (sourceMatch.Groups["pdtv"].Success || sourceMatch.Groups["sdtv"].Success || sourceMatch.Groups["dsr"].Success || sourceMatch.Groups["tvrip"].Success) { if (resolution == Resolution.R1080p || normalizedName.ContainsIgnoreCase("1080p")) { result.Quality = Quality.HDTV1080p; return(result); } if (resolution == Resolution.R720p || normalizedName.ContainsIgnoreCase("720p")) { result.Quality = Quality.HDTV720p; return(result); } if (HighDefPdtvRegex.IsMatch(normalizedName)) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.HDTV720p; return(result); } result.Quality = Quality.SDTV; return(result); } } // Anime Bluray matching if (AnimeBlurayRegex.Match(normalizedName).Success) { result.SourceDetectionSource = QualityDetectionSource.Name; if (resolution == Resolution.R360P || resolution == Resolution.R480P || resolution == Resolution.R540p || resolution == Resolution.R576p || normalizedName.ContainsIgnoreCase("480p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.DVD; return(result); } if (resolution == Resolution.R1080p || normalizedName.ContainsIgnoreCase("1080p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = remuxMatch ? Quality.Bluray1080pRemux : Quality.Bluray1080p; return(result); } if (resolution == Resolution.R2160p || normalizedName.ContainsIgnoreCase("2160p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = remuxMatch ? Quality.Bluray2160pRemux : Quality.Bluray2160p; return(result); } // Treat a remux without a source as 1080p, not 720p. if (remuxMatch) { result.Quality = Quality.Bluray1080p; return(result); } result.Quality = Quality.Bluray720p; return(result); } if (AnimeWebDlRegex.Match(normalizedName).Success) { result.SourceDetectionSource = QualityDetectionSource.Name; if (resolution == Resolution.R360P || resolution == Resolution.R480P || resolution == Resolution.R540p || resolution == Resolution.R576p || normalizedName.ContainsIgnoreCase("480p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.WEBDL480p; return(result); } if (resolution == Resolution.R1080p || normalizedName.ContainsIgnoreCase("1080p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.WEBDL1080p; return(result); } if (resolution == Resolution.R2160p || normalizedName.ContainsIgnoreCase("2160p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.WEBDL2160p; return(result); } result.Quality = Quality.WEBDL720p; return(result); } if (resolution != Resolution.Unknown) { var source = QualitySource.Unknown; if (remuxMatch) { result.SourceDetectionSource = QualityDetectionSource.Name; source = QualitySource.BlurayRaw; } else { try { var quality = MediaFileExtensions.GetQualityForExtension(name.GetPathExtension()); if (quality != Quality.Unknown) { result.SourceDetectionSource = QualityDetectionSource.Extension; source = quality.Source; } } catch (ArgumentException ex) { Logger.Debug(ex, "Unable to parse quality from extension"); } } if (resolution == Resolution.R2160p) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = source == QualitySource.Unknown ? Quality.HDTV2160p : QualityFinder.FindBySourceAndResolution(source, 2160); return(result); } if (resolution == Resolution.R1080p) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = source == QualitySource.Unknown ? Quality.HDTV1080p : QualityFinder.FindBySourceAndResolution(source, 1080); return(result); } if (resolution == Resolution.R720p) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = source == QualitySource.Unknown ? Quality.HDTV720p : QualityFinder.FindBySourceAndResolution(source, 720); return(result); } if (resolution == Resolution.R360P || resolution == Resolution.R480P || resolution == Resolution.R540p || resolution == Resolution.R576p) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = source == QualitySource.Unknown ? Quality.SDTV : QualityFinder.FindBySourceAndResolution(source, 480); return(result); } } if (codecRegex.Groups["x264"].Success) { result.Quality = Quality.SDTV; return(result); } if (normalizedName.Contains("848x480")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; if (normalizedName.Contains("dvd")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.DVD; } else if (normalizedName.ContainsIgnoreCase("bluray")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray480p; } else { result.Quality = Quality.SDTV; } return(result); } if (normalizedName.ContainsIgnoreCase("1280x720")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; if (normalizedName.ContainsIgnoreCase("bluray")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray720p; } else { result.Quality = Quality.HDTV720p; } return(result); } if (normalizedName.ContainsIgnoreCase("1920x1080")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; if (normalizedName.ContainsIgnoreCase("bluray")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray1080p; } else { result.Quality = Quality.HDTV1080p; } return(result); } if (normalizedName.ContainsIgnoreCase("bluray720p")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray720p; return(result); } if (normalizedName.ContainsIgnoreCase("bluray1080p")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray1080p; return(result); } if (normalizedName.ContainsIgnoreCase("bluray2160p")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray2160p; return(result); } var otherSourceMatch = OtherSourceMatch(normalizedName); if (otherSourceMatch != Quality.Unknown) { result.SourceDetectionSource = QualityDetectionSource.Name; result.Quality = otherSourceMatch; } return(result); }
public static QualityModel ParseQuality(string name, string desc, int fileBitrate, int fileSampleSize = 0) { Logger.Debug("Trying to parse quality for {0}", name); var normalizedName = name.Replace('_', ' ').Trim().ToLower(); var result = ParseQualityModifiers(name, normalizedName); if (desc.IsNotNullOrWhiteSpace()) { var descCodec = ParseCodec(desc, ""); Logger.Trace($"Got codec {descCodec}"); result.Quality = FindQuality(descCodec, fileBitrate, fileSampleSize); if (result.Quality != Quality.Unknown) { result.QualityDetectionSource = QualityDetectionSource.TagLib; return(result); } } var codec = ParseCodec(normalizedName, name); var bitrate = ParseBitRate(normalizedName); var sampleSize = ParseSampleSize(normalizedName); switch (codec) { case Codec.MP1: case Codec.MP2: result.Quality = Quality.Unknown; break; case Codec.MP3VBR: if (bitrate == BitRate.VBRV0) { result.Quality = Quality.MP3_VBR; } else if (bitrate == BitRate.VBRV2) { result.Quality = Quality.MP3_VBR_V2; } else { result.Quality = Quality.Unknown; } break; case Codec.MP3CBR: if (bitrate == BitRate.B096) { result.Quality = Quality.MP3_096; } else if (bitrate == BitRate.B128) { result.Quality = Quality.MP3_128; } else if (bitrate == BitRate.B160) { result.Quality = Quality.MP3_160; } else if (bitrate == BitRate.B192) { result.Quality = Quality.MP3_192; } else if (bitrate == BitRate.B256) { result.Quality = Quality.MP3_256; } else if (bitrate == BitRate.B320) { result.Quality = Quality.MP3_320; } else { result.Quality = Quality.Unknown; } break; case Codec.FLAC: if (sampleSize == SampleSize.S24) { result.Quality = Quality.FLAC_24; } else { result.Quality = Quality.FLAC; } break; case Codec.ALAC: result.Quality = Quality.ALAC; break; case Codec.WAVPACK: result.Quality = Quality.WAVPACK; break; case Codec.APE: result.Quality = Quality.APE; break; case Codec.WMA: result.Quality = Quality.WMA; break; case Codec.WAV: result.Quality = Quality.WAV; break; case Codec.AAC: if (bitrate == BitRate.B192) { result.Quality = Quality.AAC_192; } else if (bitrate == BitRate.B256) { result.Quality = Quality.AAC_256; } else if (bitrate == BitRate.B320) { result.Quality = Quality.AAC_320; } else { result.Quality = Quality.AAC_VBR; } break; case Codec.AACVBR: result.Quality = Quality.AAC_VBR; break; case Codec.OGG: case Codec.OPUS: if (bitrate == BitRate.B160) { result.Quality = Quality.VORBIS_Q5; } else if (bitrate == BitRate.B192) { result.Quality = Quality.VORBIS_Q6; } else if (bitrate == BitRate.B224) { result.Quality = Quality.VORBIS_Q7; } else if (bitrate == BitRate.B256) { result.Quality = Quality.VORBIS_Q8; } else if (bitrate == BitRate.B320) { result.Quality = Quality.VORBIS_Q9; } else if (bitrate == BitRate.B500) { result.Quality = Quality.VORBIS_Q10; } else { result.Quality = Quality.Unknown; } break; case Codec.Unknown: if (bitrate == BitRate.B192) { result.Quality = Quality.MP3_192; } else if (bitrate == BitRate.B256) { result.Quality = Quality.MP3_256; } else if (bitrate == BitRate.B320) { result.Quality = Quality.MP3_320; } else if (bitrate == BitRate.VBR) { result.Quality = Quality.MP3_VBR_V2; } else { result.Quality = Quality.Unknown; } break; default: result.Quality = Quality.Unknown; break; } //Based on extension if (result.Quality == Quality.Unknown && !name.ContainsInvalidPathChars()) { try { result.Quality = MediaFileExtensions.GetQualityForExtension(name.GetPathExtension()); result.QualityDetectionSource = QualityDetectionSource.Extension; } catch (ArgumentException) { //Swallow exception for cases where string contains illegal //path characters. } } return(result); }
public static QualityModel ParseQuality(string name) { Logger.Debug("Trying to parse quality for {0}", name); name = name.Trim(); var normalizedName = name.Replace('_', ' ').Trim().ToLower(); var result = ParseQualityModifiers(name, normalizedName); if (RawHDRegex.IsMatch(normalizedName)) { result.Quality = Quality.RAWHD; return(result); } var sourceMatch = SourceRegex.Match(normalizedName); var resolution = ParseResolution(normalizedName); var codecRegex = CodecRegex.Match(normalizedName); if (sourceMatch.Groups["bluray"].Success) { if (codecRegex.Groups["xvid"].Success || codecRegex.Groups["divx"].Success) { result.Quality = Quality.DVD; return(result); } if (resolution == Resolution._1080p) { result.Quality = Quality.Bluray1080p; return(result); } if (resolution == Resolution._480p || resolution == Resolution._576p) { result.Quality = Quality.DVD; return(result); } result.Quality = Quality.Bluray720p; return(result); } if (sourceMatch.Groups["webdl"].Success) { if (resolution == Resolution._1080p) { result.Quality = Quality.WEBDL1080p; return(result); } if (resolution == Resolution._720p) { result.Quality = Quality.WEBDL720p; return(result); } if (name.Contains("[WEBDL]")) { result.Quality = Quality.WEBDL720p; return(result); } result.Quality = Quality.WEBDL480p; return(result); } if (sourceMatch.Groups["hdtv"].Success) { if (resolution == Resolution._1080p) { result.Quality = Quality.HDTV1080p; return(result); } if (resolution == Resolution._720p) { result.Quality = Quality.HDTV720p; return(result); } if (name.Contains("[HDTV]")) { result.Quality = Quality.HDTV720p; return(result); } result.Quality = Quality.SDTV; return(result); } if (sourceMatch.Groups["bdrip"].Success || sourceMatch.Groups["brrip"].Success) { switch (resolution) { case Resolution._720p: result.Quality = Quality.Bluray720p; return(result); case Resolution._1080p: result.Quality = Quality.Bluray1080p; return(result); default: result.Quality = Quality.DVD; return(result); } } if (sourceMatch.Groups["dvd"].Success) { result.Quality = Quality.DVD; return(result); } if (sourceMatch.Groups["pdtv"].Success || sourceMatch.Groups["sdtv"].Success || sourceMatch.Groups["dsr"].Success || sourceMatch.Groups["tvrip"].Success) { if (HighDefPdtvRegex.IsMatch(normalizedName)) { result.Quality = Quality.HDTV720p; return(result); } result.Quality = Quality.SDTV; return(result); } //Anime Bluray matching if (AnimeBlurayRegex.Match(normalizedName).Success) { if (resolution == Resolution._480p || resolution == Resolution._576p || normalizedName.Contains("480p")) { result.Quality = Quality.DVD; return(result); } if (resolution == Resolution._1080p || normalizedName.Contains("1080p")) { result.Quality = Quality.Bluray1080p; return(result); } result.Quality = Quality.Bluray720p; return(result); } if (resolution == Resolution._1080p) { result.Quality = Quality.HDTV1080p; return(result); } if (resolution == Resolution._720p) { result.Quality = Quality.HDTV720p; return(result); } if (resolution == Resolution._480p) { result.Quality = Quality.SDTV; return(result); } if (codecRegex.Groups["x264"].Success) { result.Quality = Quality.SDTV; return(result); } if (normalizedName.Contains("848x480")) { if (normalizedName.Contains("dvd")) { result.Quality = Quality.DVD; } result.Quality = Quality.SDTV; } if (normalizedName.Contains("1280x720")) { if (normalizedName.Contains("bluray")) { result.Quality = Quality.Bluray720p; } result.Quality = Quality.HDTV720p; } if (normalizedName.Contains("1920x1080")) { if (normalizedName.Contains("bluray")) { result.Quality = Quality.Bluray1080p; } result.Quality = Quality.HDTV1080p; } if (normalizedName.Contains("bluray720p")) { result.Quality = Quality.Bluray720p; } if (normalizedName.Contains("bluray1080p")) { result.Quality = Quality.Bluray1080p; } var otherSourceMatch = OtherSourceMatch(normalizedName); if (otherSourceMatch != Quality.Unknown) { result.Quality = otherSourceMatch; } //Based on extension if (result.Quality == Quality.Unknown && !name.ContainsInvalidPathChars()) { try { result.Quality = MediaFileExtensions.GetQualityForExtension(Path.GetExtension(name)); result.QualitySource = QualitySource.Extension; } catch (ArgumentException) { //Swallow exception for cases where string contains illegal //path characters. } } return(result); }
public static QualityModel ParseQuality(string name, string desc = null) { Logger.Debug("Trying to parse quality for {0}", name); var normalizedName = name.Replace('_', ' ').Trim().ToLower(); var result = ParseQualityModifiers(name, normalizedName); if (desc.IsNotNullOrWhiteSpace()) { var descCodec = ParseCodec(desc, ""); Logger.Trace($"Got codec {descCodec}"); result.Quality = FindQuality(descCodec); if (result.Quality != Quality.Unknown) { result.QualityDetectionSource = QualityDetectionSource.TagLib; return(result); } } var codec = ParseCodec(normalizedName, name); switch (codec) { case Codec.PDF: result.Quality = Quality.PDF; break; case Codec.EPUB: result.Quality = Quality.EPUB; break; case Codec.MOBI: result.Quality = Quality.MOBI; break; case Codec.AZW3: result.Quality = Quality.AZW3; break; case Codec.FLAC: case Codec.ALAC: case Codec.WAVPACK: result.Quality = Quality.FLAC; break; case Codec.MP1: case Codec.MP2: case Codec.MP3VBR: case Codec.MP3CBR: case Codec.APE: case Codec.WMA: case Codec.WAV: case Codec.AAC: case Codec.AACVBR: case Codec.OGG: case Codec.OPUS: result.Quality = Quality.MP3_320; break; case Codec.Unknown: default: result.Quality = Quality.Unknown; break; } //Based on extension if (result.Quality == Quality.Unknown && !name.ContainsInvalidPathChars()) { try { result.Quality = MediaFileExtensions.GetQualityForExtension(name.GetPathExtension()); result.QualityDetectionSource = QualityDetectionSource.Extension; } catch (ArgumentException) { //Swallow exception for cases where string contains illegal //path characters. } } return(result); }
public static QualityModel ParseQualityName(string name) { var normalizedName = name.Replace('_', ' ').Trim(); var result = ParseQualityModifiers(name, normalizedName); var subMatch = HardcodedSubsRegex.Matches(normalizedName).OfType <Match>().LastOrDefault(); if (subMatch != null && subMatch.Success) { if (subMatch.Groups["hcsub"].Success) { result.HardcodedSubs = subMatch.Groups["hcsub"].Value; } else if (subMatch.Groups["hc"].Success) { result.HardcodedSubs = "Generic Hardcoded Subs"; } } var sourceMatches = SourceRegex.Matches(normalizedName); var sourceMatch = sourceMatches.OfType <Match>().LastOrDefault(); var resolution = ParseResolution(normalizedName); var codecRegex = CodecRegex.Match(normalizedName); var remuxMatch = RemuxRegex.IsMatch(normalizedName); var brDiskMatch = BRDISKRegex.IsMatch(normalizedName); if (RawHDRegex.IsMatch(normalizedName) && !brDiskMatch) { result.SourceDetectionSource = QualityDetectionSource.Name; result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.RAWHD; return(result); } if (resolution != Resolution.Unknown) { result.ResolutionDetectionSource = QualityDetectionSource.Name; } if (sourceMatch != null && sourceMatch.Success) { result.SourceDetectionSource = QualityDetectionSource.Name; if (sourceMatch.Groups["bluray"].Success) { if (brDiskMatch) { result.Quality = Quality.BRDISK; return(result); } if (codecRegex.Groups["xvid"].Success || codecRegex.Groups["divx"].Success) { result.Quality = Quality.Bluray480p; return(result); } if (resolution == Resolution.R2160p) { result.Quality = remuxMatch ? Quality.Remux2160p : Quality.Bluray2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = remuxMatch ? Quality.Remux1080p : Quality.Bluray1080p; return(result); } if (resolution == Resolution.R576p) { result.Quality = Quality.Bluray576p; return(result); } if (resolution == Resolution.R360p || resolution == Resolution.R480p || resolution == Resolution.R540p) { result.Quality = Quality.Bluray480p; return(result); } // Treat a remux without a source as 1080p, not 720p. if (remuxMatch) { result.Quality = Quality.Remux1080p; return(result); } result.Quality = Quality.Bluray720p; return(result); } if (sourceMatch.Groups["webdl"].Success) { if (resolution == Resolution.R2160p) { result.Quality = Quality.WEBDL2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = Quality.WEBDL1080p; return(result); } if (resolution == Resolution.R720p) { result.Quality = Quality.WEBDL720p; return(result); } if (name.Contains("[WEBDL]")) { result.Quality = Quality.WEBDL720p; return(result); } result.Quality = Quality.WEBDL480p; return(result); } if (sourceMatch.Groups["webrip"].Success) { if (resolution == Resolution.R2160p) { result.Quality = Quality.WEBRip2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = Quality.WEBRip1080p; return(result); } if (resolution == Resolution.R720p) { result.Quality = Quality.WEBRip720p; return(result); } result.Quality = Quality.WEBRip480p; return(result); } if (sourceMatch.Groups["scr"].Success) { result.Quality = Quality.DVDSCR; return(result); } if (sourceMatch.Groups["cam"].Success) { result.Quality = Quality.CAM; return(result); } if (sourceMatch.Groups["ts"].Success) { result.Quality = Quality.TELESYNC; result.Quality.Resolution = (int)resolution; return(result); } if (sourceMatch.Groups["tc"].Success) { result.Quality = Quality.TELECINE; return(result); } if (sourceMatch.Groups["wp"].Success) { result.Quality = Quality.WORKPRINT; return(result); } if (sourceMatch.Groups["regional"].Success) { result.Quality = Quality.REGIONAL; return(result); } if (sourceMatch.Groups["hdtv"].Success) { if (MPEG2Regex.IsMatch(normalizedName)) { result.Quality = Quality.RAWHD; return(result); } if (resolution == Resolution.R2160p) { result.Quality = Quality.HDTV2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = Quality.HDTV1080p; return(result); } if (resolution == Resolution.R720p) { result.Quality = Quality.HDTV720p; return(result); } if (name.Contains("[HDTV]")) { result.Quality = Quality.HDTV720p; return(result); } result.Quality = Quality.SDTV; return(result); } if (sourceMatch.Groups["bdrip"].Success || sourceMatch.Groups["brrip"].Success) { switch (resolution) { case Resolution.R720p: result.Quality = Quality.Bluray720p; return(result); case Resolution.R1080p: result.Quality = Quality.Bluray1080p; return(result); case Resolution.R2160p: result.Quality = Quality.Bluray2160p; return(result); case Resolution.R576p: result.Quality = Quality.Bluray576p; return(result); default: result.Quality = Quality.Bluray480p; return(result); } } if (sourceMatch.Groups["dvdr"].Success) { result.Quality = Quality.DVDR; return(result); } if (sourceMatch.Groups["dvd"].Success) { result.Quality = Quality.DVD; return(result); } if (sourceMatch.Groups["pdtv"].Success || sourceMatch.Groups["sdtv"].Success || sourceMatch.Groups["dsr"].Success || sourceMatch.Groups["tvrip"].Success) { if (resolution == Resolution.R1080p || normalizedName.ContainsIgnoreCase("1080p")) { result.Quality = Quality.HDTV1080p; return(result); } if (resolution == Resolution.R720p || normalizedName.ContainsIgnoreCase("720p")) { result.Quality = Quality.HDTV720p; return(result); } if (HighDefPdtvRegex.IsMatch(normalizedName)) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.HDTV720p; return(result); } result.Quality = Quality.SDTV; return(result); } } // Anime Bluray matching if (AnimeBlurayRegex.Match(normalizedName).Success) { result.SourceDetectionSource = QualityDetectionSource.Name; if (resolution == Resolution.R360p || resolution == Resolution.R480p || resolution == Resolution.R540p || resolution == Resolution.R576p || normalizedName.ContainsIgnoreCase("480p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.DVD; return(result); } if (resolution == Resolution.R1080p || normalizedName.ContainsIgnoreCase("1080p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = remuxMatch ? Quality.Remux1080p : Quality.Bluray1080p; return(result); } if (resolution == Resolution.R2160p || normalizedName.ContainsIgnoreCase("2160p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = remuxMatch ? Quality.Remux2160p : Quality.Bluray2160p; return(result); } // Treat a remux without a source as 1080p, not 720p. if (remuxMatch) { result.Quality = Quality.Bluray1080p; return(result); } result.Quality = Quality.Bluray720p; return(result); } if (AnimeWebDlRegex.Match(normalizedName).Success) { result.SourceDetectionSource = QualityDetectionSource.Name; if (resolution == Resolution.R360p || resolution == Resolution.R480p || resolution == Resolution.R540p || resolution == Resolution.R576p || normalizedName.ContainsIgnoreCase("480p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.WEBDL480p; return(result); } if (resolution == Resolution.R1080p || normalizedName.ContainsIgnoreCase("1080p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.WEBDL1080p; return(result); } if (resolution == Resolution.R2160p || normalizedName.ContainsIgnoreCase("2160p")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.WEBDL2160p; return(result); } result.Quality = Quality.WEBDL720p; return(result); } if (resolution != Resolution.Unknown) { var source = Source.UNKNOWN; var modifier = Modifier.NONE; if (remuxMatch) { result.SourceDetectionSource = QualityDetectionSource.Name; source = Source.BLURAY; modifier = Modifier.REMUX; } else { try { var quality = MediaFileExtensions.GetQualityForExtension(name.GetPathExtension()); if (quality != Quality.Unknown) { result.SourceDetectionSource = QualityDetectionSource.Extension; source = quality.Source; } } catch (ArgumentException ex) { Logger.Debug(ex, "Unable to parse quality from extension"); } } if (resolution == Resolution.R2160p) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = source == Source.UNKNOWN ? Quality.HDTV2160p : QualityFinder.FindBySourceAndResolution(source, 2160, modifier); return(result); } if (resolution == Resolution.R1080p) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = source == Source.UNKNOWN ? Quality.HDTV1080p : QualityFinder.FindBySourceAndResolution(source, 1080, modifier); return(result); } if (resolution == Resolution.R720p) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = source == Source.UNKNOWN ? Quality.HDTV720p : QualityFinder.FindBySourceAndResolution(source, 720, modifier); return(result); } if (resolution == Resolution.R360p || resolution == Resolution.R480p || resolution == Resolution.R540p || resolution == Resolution.R576p) { result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = source == Source.UNKNOWN ? Quality.SDTV : QualityFinder.FindBySourceAndResolution(source, 480, modifier); return(result); } } if (codecRegex.Groups["x264"].Success) { result.Quality = Quality.SDTV; return(result); } if (normalizedName.ContainsIgnoreCase("848x480")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; if (normalizedName.Contains("dvd")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.DVD; } else if (normalizedName.ContainsIgnoreCase("bluray")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray480p; } else { result.Quality = Quality.SDTV; } return(result); } if (normalizedName.ContainsIgnoreCase("1280x720")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; if (normalizedName.ContainsIgnoreCase("bluray")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray720p; } else { result.Quality = Quality.HDTV720p; } return(result); } if (normalizedName.ContainsIgnoreCase("1920x1080")) { result.ResolutionDetectionSource = QualityDetectionSource.Name; if (normalizedName.ContainsIgnoreCase("bluray")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray1080p; } else { result.Quality = Quality.HDTV1080p; } return(result); } if (normalizedName.ContainsIgnoreCase("bluray720p")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray720p; return(result); } if (normalizedName.ContainsIgnoreCase("bluray1080p")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray1080p; return(result); } if (normalizedName.ContainsIgnoreCase("bluray2160p")) { result.SourceDetectionSource = QualityDetectionSource.Name; result.ResolutionDetectionSource = QualityDetectionSource.Name; result.Quality = Quality.Bluray2160p; return(result); } var otherSourceMatch = OtherSourceMatch(normalizedName); if (otherSourceMatch != Quality.Unknown) { result.SourceDetectionSource = QualityDetectionSource.Name; result.Quality = otherSourceMatch; } return(result); }
public static QualityModel ParseQuality(string name) { Logger.Debug("Trying to parse quality for {0}", name); name = name.Trim(); var normalizedName = name.Replace('_', ' ').Trim().ToLower(); var result = new QualityModel { Quality = Quality.Unknown }; result.Proper = ProperRegex.IsMatch(normalizedName); if (RawHDRegex.IsMatch(normalizedName)) { result.Quality = Quality.RAWHD; return(result); } var sourceMatch = SourceRegex.Match(normalizedName); var resolution = ParseResolution(normalizedName); var codecRegex = CodecRegex.Match(normalizedName); if (sourceMatch.Groups["bluray"].Success) { if (codecRegex.Groups["xvid"].Success || codecRegex.Groups["divx"].Success) { result.Quality = Quality.DVD; return(result); } if (resolution == Resolution._1080p) { result.Quality = Quality.Bluray1080p; return(result); } if (resolution == Resolution._480p || resolution == Resolution._576p) { result.Quality = Quality.DVD; return(result); } result.Quality = Quality.Bluray720p; return(result); } if (sourceMatch.Groups["webdl"].Success) { if (resolution == Resolution._1080p) { result.Quality = Quality.WEBDL1080p; return(result); } if (resolution == Resolution._720p) { result.Quality = Quality.WEBDL720p; return(result); } if (name.Contains("[WEBDL]")) { result.Quality = Quality.WEBDL720p; return(result); } result.Quality = Quality.WEBDL480p; return(result); } if (sourceMatch.Groups["hdtv"].Success) { if (resolution == Resolution._1080p) { result.Quality = Quality.HDTV1080p; return(result); } if (resolution == Resolution._720p) { result.Quality = Quality.HDTV720p; return(result); } if (name.Contains("[HDTV]")) { result.Quality = Quality.HDTV720p; return(result); } result.Quality = Quality.SDTV; return(result); } if (sourceMatch.Groups["bdrip"].Success || sourceMatch.Groups["brrip"].Success) { if (resolution == Resolution._720p) { result.Quality = Quality.Bluray720p; return(result); } else if (resolution == Resolution._1080p) { result.Quality = Quality.Bluray1080p; return(result); } else { result.Quality = Quality.DVD; return(result); } } if (sourceMatch.Groups["dvd"].Success) { result.Quality = Quality.DVD; return(result); } if (sourceMatch.Groups["pdtv"].Success || sourceMatch.Groups["sdtv"].Success || sourceMatch.Groups["dsr"].Success) { result.Quality = Quality.SDTV; return(result); } if (resolution == Resolution._1080p) { result.Quality = Quality.HDTV1080p; return(result); } if (resolution == Resolution._720p) { result.Quality = Quality.HDTV720p; return(result); } if (codecRegex.Groups["x264"].Success) { result.Quality = Quality.SDTV; return(result); } if (normalizedName.Contains("bluray720p")) { result.Quality = Quality.Bluray720p; } if (normalizedName.Contains("bluray1080p")) { result.Quality = Quality.Bluray1080p; } //Based on extension if (result.Quality == Quality.Unknown && !name.ContainsInvalidPathChars()) { try { result.Quality = MediaFileExtensions.GetQualityForExtension(Path.GetExtension(name)); } catch (ArgumentException) { //Swallow exception for cases where string contains illegal //path characters. } } return(result); }
public static QualityModel ParseQuality(string name) { Logger.Debug("Trying to parse quality for {0}", name); name = name.Trim(); var normalizedName = name.Replace('_', ' ').Trim().ToLower(); var result = ParseQualityModifiers(name, normalizedName); var subMatch = HardcodedSubsRegex.Matches(normalizedName).OfType <Match>().LastOrDefault(); if (subMatch != null && subMatch.Success) { if (subMatch.Groups["hcsub"].Success) { result.HardcodedSubs = subMatch.Groups["hcsub"].Value; } else if (subMatch.Groups["hc"].Success) { result.HardcodedSubs = "Generic Hardcoded Subs"; } } var sourceMatch = SourceRegex.Matches(normalizedName).OfType <Match>().LastOrDefault(); var resolution = ParseResolution(normalizedName); var codecRegex = CodecRegex.Match(normalizedName); if (RemuxRegex.IsMatch(normalizedName)) { if (resolution == Resolution.R2160p) { result.Quality = Quality.Remux2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = Quality.Remux1080p; return(result); } } if (sourceMatch != null && sourceMatch.Success) { if (sourceMatch.Groups["bluray"].Success) { if (codecRegex.Groups["xvid"].Success || codecRegex.Groups["divx"].Success) { result.Quality = Quality.DVD; return(result); } if (resolution == Resolution.R2160p) { result.Quality = Quality.Bluray2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = Quality.Bluray1080p; return(result); } if (resolution == Resolution.R576p) { result.Quality = Quality.Bluray576p; return(result); } if (resolution == Resolution.R480P) { result.Quality = Quality.Bluray480p; return(result); } result.Quality = Quality.Bluray720p; return(result); } if (sourceMatch.Groups["webdl"].Success) { if (resolution == Resolution.R2160p) { result.Quality = Quality.WEBDL2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = Quality.WEBDL1080p; return(result); } if (resolution == Resolution.R720p) { result.Quality = Quality.WEBDL720p; return(result); } if (name.Contains("[WEBDL]")) { result.Quality = Quality.WEBDL720p; return(result); } result.Quality = Quality.WEBDL480p; return(result); } if (sourceMatch.Groups["hdtv"].Success) { if (resolution == Resolution.R2160p) { result.Quality = Quality.HDTV2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = Quality.HDTV1080p; return(result); } if (resolution == Resolution.R720p) { result.Quality = Quality.HDTV720p; return(result); } if (name.Contains("[HDTV]")) { result.Quality = Quality.HDTV720p; return(result); } result.Quality = Quality.SDTV; return(result); } if (sourceMatch.Groups["bdrip"].Success || sourceMatch.Groups["brrip"].Success) { if (codecRegex.Groups["xvid"].Success || codecRegex.Groups["divx"].Success) { result.Quality = Quality.DVD; return(result); } switch (resolution) { case Resolution.R720p: result.Quality = Quality.Bluray720p; return(result); case Resolution.R1080p: result.Quality = Quality.Bluray1080p; return(result); case Resolution.R576p: result.Quality = Quality.Bluray576p; return(result); case Resolution.R480P: result.Quality = Quality.Bluray480p; return(result); default: result.Quality = Quality.Bluray480p; return(result); } } if (sourceMatch.Groups["wp"].Success) { result.Quality = Quality.WORKPRINT; return(result); } if (sourceMatch.Groups["dvd"].Success) { result.Quality = Quality.DVD; return(result); } if (sourceMatch.Groups["dvdr"].Success) { result.Quality = Quality.DVDR; return(result); } if (sourceMatch.Groups["scr"].Success) { result.Quality = Quality.DVDSCR; return(result); } if (sourceMatch.Groups["regional"].Success) { result.Quality = Quality.REGIONAL; return(result); } if (sourceMatch.Groups["cam"].Success) { result.Quality = Quality.CAM; return(result); } if (sourceMatch.Groups["ts"].Success) { result.Quality = Quality.TELESYNC; return(result); } if (sourceMatch.Groups["tc"].Success) { result.Quality = Quality.TELECINE; return(result); } if (sourceMatch.Groups["pdtv"].Success || sourceMatch.Groups["sdtv"].Success || sourceMatch.Groups["dsr"].Success || sourceMatch.Groups["tvrip"].Success) { if (HighDefPdtvRegex.IsMatch(normalizedName)) { result.Quality = Quality.HDTV720p; return(result); } result.Quality = Quality.SDTV; return(result); } } //Anime Bluray matching if (AnimeBlurayRegex.Match(normalizedName).Success) { if (resolution == Resolution.R480P || resolution == Resolution.R576p || normalizedName.Contains("480p")) { result.Quality = Quality.DVD; return(result); } if (resolution == Resolution.R1080p || normalizedName.Contains("1080p")) { result.Quality = Quality.Bluray1080p; return(result); } result.Quality = Quality.Bluray720p; return(result); } if (resolution == Resolution.R2160p) { result.Quality = Quality.HDTV2160p; return(result); } if (resolution == Resolution.R1080p) { result.Quality = Quality.HDTV1080p; return(result); } if (resolution == Resolution.R720p) { result.Quality = Quality.HDTV720p; return(result); } if (resolution == Resolution.R480P) { result.Quality = Quality.SDTV; return(result); } if (codecRegex.Groups["x264"].Success) { result.Quality = Quality.SDTV; return(result); } if (normalizedName.Contains("848x480")) { if (normalizedName.Contains("dvd")) { result.Quality = Quality.DVD; } result.Quality = Quality.SDTV; } if (normalizedName.Contains("1280x720")) { if (normalizedName.Contains("bluray")) { result.Quality = Quality.Bluray720p; } result.Quality = Quality.HDTV720p; } if (normalizedName.Contains("1920x1080")) { if (normalizedName.Contains("bluray")) { result.Quality = Quality.Bluray1080p; } result.Quality = Quality.HDTV1080p; } if (normalizedName.Contains("bluray720p")) { result.Quality = Quality.Bluray720p; } if (normalizedName.Contains("bluray1080p")) { result.Quality = Quality.Bluray1080p; } var otherSourceMatch = OtherSourceMatch(normalizedName); if (otherSourceMatch != Quality.Unknown) { result.Quality = otherSourceMatch; } //Based on extension if (result.Quality == Quality.Unknown && !name.ContainsInvalidPathChars()) { try { result.Quality = MediaFileExtensions.GetQualityForExtension(Path.GetExtension(name)); result.QualitySource = QualitySource.Extension; } catch (ArgumentException) { //Swallow exception for cases where string contains illegal //path characters. } } return(result); }