public static MusicVideoSignature parseMediaMatch(MusicVideoMatch mvMatch) { lock (loadingLock) { if (signatureBuilders == null) { signatureBuilders = new List <ISignatureBuilder>(); // signatureBuilders.Add(new HashBuilder()); signatureBuilders.Add(new LocalBuilder()); // signatureBuilders.Add(new BlurayMetaBuilder()); // signatureBuilders.Add(new MetaServicesBuilder()); // signatureBuilders.Add(new NfoBuilder()); // signatureBuilders.Add(new ImdbBuilder()); } } MusicVideoSignature mvSignature = new MusicVideoSignature(mvMatch.LocalMedia); foreach (ISignatureBuilder builder in signatureBuilders) { SignatureBuilderResult result = builder.UpdateSignature(mvSignature); // if a builder returns CONCLUSIVE it has updated the signature with // what is believed to be accurate data and we can exit the loop // Currently only the Hash and Imdb builder can return this status if (result == SignatureBuilderResult.CONCLUSIVE) { break; } } return(mvSignature); }
public static MusicVideoSignature parseMediaMatch(MusicVideoMatch mvMatch) { lock (loadingLock) { if (signatureBuilders == null) { signatureBuilders = new List<ISignatureBuilder>(); // signatureBuilders.Add(new HashBuilder()); signatureBuilders.Add(new LocalBuilder()); // signatureBuilders.Add(new BlurayMetaBuilder()); // signatureBuilders.Add(new MetaServicesBuilder()); // signatureBuilders.Add(new NfoBuilder()); // signatureBuilders.Add(new ImdbBuilder()); } } MusicVideoSignature mvSignature = new MusicVideoSignature(mvMatch.LocalMedia); foreach (ISignatureBuilder builder in signatureBuilders) { SignatureBuilderResult result = builder.UpdateSignature(mvSignature); // if a builder returns CONCLUSIVE it has updated the signature with // what is believed to be accurate data and we can exit the loop // Currently only the Hash and Imdb builder can return this status if (result == SignatureBuilderResult.CONCLUSIVE) break; } return mvSignature; }
/// <summary> /// Get the track details /// </summary> /// <param name="mvSignature"></param> /// <returns></returns> public List <DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { List <DBTrackInfo> results = new List <DBTrackInfo>(); if (mvSignature == null) { return(results); } lock (lockList) { DBTrackInfo mv = getMusicVideoTrack(mvSignature.Artist, mvSignature.Album, mvSignature.Track); if (mv != null) { if (mv.ArtistInfo.Count == 0) { DBArtistInfo d4 = new DBArtistInfo(); d4.Artist = mvSignature.Artist; mv.ArtistInfo.Add(d4); } results.Add(mv); } } return(results); }
public SignatureBuilderResult UpdateSignature(MusicVideoSignature signature) { if (signature.LocalMedia == null) return SignatureBuilderResult.INCONCLUSIVE; DirectoryInfo dir = new DirectoryInfo(signature.Path); string fullPath = signature.LocalMedia[0].FullPath; int fileCount = signature.LocalMedia.Count; string source = string.Empty; if (Utility.isFolderDedicated(dir, fileCount) && (mvCentralCore.Settings.PreferFolderName || fileCount > 1) && signature.Folder.Length > 1 || signature.LocalMedia[0].IsVideoDisc) { // Use foldername source = signature.Folder; // If the foldername is a volume use the media label if (Utility.IsDriveRoot(source)) source = signature.LocalMedia[0].MediaLabel; } else { // Use filename if (fileCount > 1) source = Utility.GetFileNameWithoutExtensionAndStackMarkers(signature.File); else source = Path.GetFileNameWithoutExtension(signature.File); } // Detect IMDB ID in the source string, and put it in the signature on success Match match = Regex.Match(source, @"tt\d{7}", RegexOptions.IgnoreCase); if (match.Success) signature.MdId = match.Value; // Execute configured string replacements foreach (KeyValuePair<string, string> replacement in replacements) source = Regex.Replace(source, replacement.Key, replacement.Value); // Remove noise characters/words // todo: combine this into replacements when there's a configurable setting for the user source = removeNoise(source); // Detect year in a title string int year; signature.Title = extractYearFromTitle(source, out year); signature.Year = year; return SignatureBuilderResult.INCONCLUSIVE; }
public List<DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { throw new NotImplementedException(); }
/// <summary> /// This will try and get the track and album data. Will first find artist and then check all albums for a matching track /// </summary> /// <param name="mvSignature"></param> /// <returns></returns> public List <DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { List <DBTrackInfo> results = new List <DBTrackInfo>(); return(results); }
public List <DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { throw new NotImplementedException(); }
/// <summary> /// This will try and get the track and album data. Will first find artist and then check all albums for a matching track /// </summary> /// <param name="mvSignature"></param> /// <returns></returns> public List<DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { List<DBTrackInfo> results = new List<DBTrackInfo>(); return results; }
/// <summary> /// Based on the calculated signature retrive data from providers /// </summary> /// <param name="mvSignature"></param> /// <returns></returns> public List<DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { List<DBSourceInfo> trackSources; lock (trackDetailSources) trackSources = new List<DBSourceInfo>(trackDetailSources); List<DBSourceInfo> artistSources; lock (artistDetailSources) artistSources = new List<DBSourceInfo>(artistDetailSources); // Try each datasource (ordered by their priority) to get results List<DBTrackInfo> results = new List<DBTrackInfo>(); foreach (DBSourceInfo currSource in trackSources) { if (currSource.IsDisabled(DataType.TRACKDETAIL)) continue; // if we have reached the minimum number of possible matches required, we are done if (results.Count >= mvCentralCore.Settings.MinimumMatches && mvCentralCore.Settings.MinimumMatches != 0) { logger.Debug("We have reached the minimum number of possible matches required, we are done."); break; } // search with the current provider List<DBTrackInfo> newResults = currSource.Provider.GetTrackDetail(mvSignature); // tag the results with the current source foreach (DBTrackInfo currMusicVideo in newResults) { currMusicVideo.PrimarySource = currSource; // ****************** Additional Artist Info Processing ****************** // Check and update Artist details from additional providers DBArtistInfo artInfo = new DBArtistInfo(); artInfo = currMusicVideo.ArtistInfo[0]; foreach (DBSourceInfo artistExtraInfo in artistDetailSources) { if (artistExtraInfo != currSource) { logger.Debug("Searching for additional Artist infomation from Provider: " + artistExtraInfo.Provider.Name); artInfo = artistExtraInfo.Provider.GetArtistDetail(currMusicVideo).ArtistInfo[0]; } } artInfo.DisallowBackgroundUpdate = true; currMusicVideo.ArtistInfo[0] = artInfo; // If album support disabled or no associated album then skip album processing if (mvCentralCore.Settings.DisableAlbumSupport || currMusicVideo.AlbumInfo.Count == 0) continue; // ****************** Additional Album Info Processing ****************** // Check and update Album details from additional providers DBAlbumInfo albumInfo = new DBAlbumInfo(); albumInfo = currMusicVideo.AlbumInfo[0]; foreach (DBSourceInfo albumExtraInfo in albumDetailSources) { if (albumExtraInfo != currSource) { logger.Debug("Searching for additional Album infomation from Provider: " + albumExtraInfo.Provider.Name); albumInfo = albumExtraInfo.Provider.GetAlbumDetail(currMusicVideo).AlbumInfo[0]; } } albumInfo.DisallowBackgroundUpdate = true; currMusicVideo.AlbumInfo[0] = albumInfo; } // add results to our total result list and log what we found results.AddRange(newResults); } return results; }
/// <summary> /// Get the track details /// </summary> /// <param name="mvSignature"></param> /// <returns></returns> public List<DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { return null; }
/// <summary> /// Based on the calculated signature retrive data from providers /// </summary> /// <param name="mvSignature"></param> /// <returns></returns> public List <DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { List <DBSourceInfo> trackSources; lock (trackDetailSources) trackSources = new List <DBSourceInfo>(trackDetailSources); List <DBSourceInfo> artistSources; lock (artistDetailSources) artistSources = new List <DBSourceInfo>(artistDetailSources); // Try each datasource (ordered by their priority) to get results List <DBTrackInfo> results = new List <DBTrackInfo>(); foreach (DBSourceInfo currSource in trackSources) { if (currSource.IsDisabled(DataType.TRACKDETAIL)) { continue; } // if we have reached the minimum number of possible matches required, we are done if (results.Count >= mvCentralCore.Settings.MinimumMatches && mvCentralCore.Settings.MinimumMatches != 0) { logger.Debug("We have reached the minimum number of possible matches required, we are done."); break; } // search with the current provider List <DBTrackInfo> newResults = currSource.Provider.GetTrackDetail(mvSignature); // tag the results with the current source foreach (DBTrackInfo currMusicVideo in newResults) { currMusicVideo.PrimarySource = currSource; // ****************** Additional Artist Info Processing ****************** // Check and update Artist details from additional providers DBArtistInfo artInfo = new DBArtistInfo(); artInfo = currMusicVideo.ArtistInfo[0]; foreach (DBSourceInfo artistExtraInfo in artistDetailSources) { if (artistExtraInfo != currSource) { logger.Debug("Searching for additional Artist infomation from Provider: " + artistExtraInfo.Provider.Name); artInfo = artistExtraInfo.Provider.GetArtistDetail(currMusicVideo).ArtistInfo[0]; } } artInfo.DisallowBackgroundUpdate = true; currMusicVideo.ArtistInfo[0] = artInfo; // If album support disabled or no associated album then skip album processing if (mvCentralCore.Settings.DisableAlbumSupport || currMusicVideo.AlbumInfo.Count == 0) { continue; } // ****************** Additional Album Info Processing ****************** // Check and update Album details from additional providers DBAlbumInfo albumInfo = new DBAlbumInfo(); albumInfo = currMusicVideo.AlbumInfo[0]; foreach (DBSourceInfo albumExtraInfo in albumDetailSources) { if (albumExtraInfo != currSource) { logger.Debug("Searching for additional Album infomation from Provider: " + albumExtraInfo.Provider.Name); albumInfo = albumExtraInfo.Provider.GetAlbumDetail(currMusicVideo).AlbumInfo[0]; } } albumInfo.DisallowBackgroundUpdate = true; currMusicVideo.AlbumInfo[0] = albumInfo; } // add results to our total result list and log what we found results.AddRange(newResults); } return(results); }
public List <DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { // Switch off album support if (mvCentralCore.Settings.DisableAlbumSupport) { mvSignature.Album = null; } List <DBTrackInfo> results = new List <DBTrackInfo>(); if (mvSignature == null) { return(results); } logger.Debug("In Method: GetTrackDetail(MusicVideoSignature mvSignature)"); logger.Debug("*** Artist: " + mvSignature.Artist + " - " + mvSignature.ArtistMdId); logger.Debug("*** Album: " + mvSignature.Album + " - " + mvSignature.AlbumMdId); logger.Debug("*** Other: " + mvSignature.Title + " - " + mvSignature.MdId); lock (lockObj) { DBTrackInfo mvTrackData = null; // Artist/Album handling, if the track and artist dont match and the track contains the artist name this would indicate the that track is in the format /<artist>/<album>/<atrist - track>.<ext> // This will throw out the parseing so remove the artist name from the track. // This is not the best fix, need to add code so I know whch expression produced the result or better still have a ignore folder structure when pasring option. if (mvSignature.Track != null && mvSignature.Artist != null) { if ((mvSignature.Track.ToLower().Trim() != mvSignature.Artist.ToLower().Trim()) && mvSignature.Track.ToLower().Contains(mvSignature.Artist.ToLower().Trim())) { mvTrackData = getMusicVideoTrack(mvSignature.Artist, Regex.Replace(mvSignature.Track, mvSignature.Artist, string.Empty, RegexOptions.IgnoreCase)); } else { mvTrackData = getMusicVideoTrack(mvSignature.Artist, mvSignature.Track); } } else { mvTrackData = getMusicVideoTrack(mvSignature.Artist, mvSignature.Track); } if (mvTrackData != null) { if (mvTrackData.ArtistInfo.Count == 0) { DBArtistInfo artistInfo = new DBArtistInfo(); artistInfo.Artist = mvSignature.Artist; mvTrackData.ArtistInfo.Add(artistInfo); } if (mvSignature.Album != null && mvSignature.Artist != null) { if (!mvCentralCore.Settings.UseMDAlbum) { DBAlbumInfo albumInfo = new DBAlbumInfo(); albumInfo.Album = mvSignature.Album; setMusicVideoAlbum(ref albumInfo, mvSignature.Artist, mvSignature.Album, null); mvTrackData.AlbumInfo.Clear(); mvTrackData.AlbumInfo.Add(albumInfo); } } else if (mvTrackData.AlbumInfo.Count > 0 && mvCentralCore.Settings.SetAlbumFromTrackData) { logger.Debug("There are {0} Albums found for Artist: {1} / {2}", mvTrackData.AlbumInfo.Count.ToString(), mvSignature.Artist, mvSignature.Title); DBAlbumInfo albumInfo = new DBAlbumInfo(); albumInfo.Album = mvTrackData.AlbumInfo[0].Album; setMusicVideoAlbum(ref albumInfo, mvSignature.Artist, mvTrackData.AlbumInfo[0].Album, null); mvTrackData.AlbumInfo.Clear(); mvTrackData.ArtistInfo[0].Artist = mvSignature.Artist; mvTrackData.AlbumInfo.Add(albumInfo); } else { mvTrackData.AlbumInfo.Clear(); } results.Add(mvTrackData); } } return(results); }
/// <summary> /// Get the track details /// </summary> /// <param name="mvSignature"></param> /// <returns></returns> public List <DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { return(null); }
/// <summary> /// Get the track details /// </summary> /// <param name="mvSignature"></param> /// <returns></returns> public List<DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { logger.Debug("In Method: GetTrackDetail(MusicVideoSignature mvSignature)"); List<DBTrackInfo> results = new List<DBTrackInfo>(); if (mvSignature == null) return results; lock (lockList) { DBTrackInfo mv = getMusicVideoTrack(mvSignature.Artist, mvSignature.Album, mvSignature.Track); if (mv != null) { if (mv.ArtistInfo.Count == 0) { DBArtistInfo d4 = new DBArtistInfo(); d4.Artist = mvSignature.Artist; mv.ArtistInfo.Add(d4); } results.Add(mv); } } return results; }
public List<DBTrackInfo> GetTrackDetail(MusicVideoSignature mvSignature) { // Switch off album support if (mvCentralCore.Settings.DisableAlbumSupport) mvSignature.Album = null; List<DBTrackInfo> results = new List<DBTrackInfo>(); if (mvSignature == null) return results; logger.Debug("In Method: GetTrackDetail(MusicVideoSignature mvSignature)"); logger.Debug("*** Artist: " + mvSignature.Artist + " - " + mvSignature.ArtistMdId); logger.Debug("*** Album: " + mvSignature.Album + " - " + mvSignature.AlbumMdId); logger.Debug("*** Other: " + mvSignature.Title + " - " + mvSignature.MdId); lock (lockObj) { DBTrackInfo mvTrackData = null; // Artist/Album handling, if the track and artist dont match and the track contains the artist name this would indicate the that track is in the format /<artist>/<album>/<atrist - track>.<ext> // This will throw out the parseing so remove the artist name from the track. // This is not the best fix, need to add code so I know whch expression produced the result or better still have a ignore folder structure when pasring option. if (mvSignature.Track != null && mvSignature.Artist != null) { if ((mvSignature.Track.ToLower().Trim() != mvSignature.Artist.ToLower().Trim()) && mvSignature.Track.ToLower().Contains(mvSignature.Artist.ToLower().Trim())) mvTrackData = getMusicVideoTrack(mvSignature.Artist, Regex.Replace(mvSignature.Track, mvSignature.Artist, string.Empty, RegexOptions.IgnoreCase)); else mvTrackData = getMusicVideoTrack(mvSignature.Artist, mvSignature.Track); } else mvTrackData = getMusicVideoTrack(mvSignature.Artist, mvSignature.Track); if (mvTrackData != null) { if (mvTrackData.ArtistInfo.Count == 0) { DBArtistInfo artistInfo = new DBArtistInfo(); artistInfo.Artist = mvSignature.Artist; mvTrackData.ArtistInfo.Add(artistInfo); } if (mvSignature.Album != null && mvSignature.Artist != null) { if (!mvCentralCore.Settings.UseMDAlbum) { DBAlbumInfo albumInfo = new DBAlbumInfo(); albumInfo.Album = mvSignature.Album; setMusicVideoAlbum(ref albumInfo, mvSignature.Artist, mvSignature.Album, null); mvTrackData.AlbumInfo.Clear(); mvTrackData.AlbumInfo.Add(albumInfo); } } else if (mvTrackData.AlbumInfo.Count > 0 && mvCentralCore.Settings.SetAlbumFromTrackData) { logger.Debug("There are {0} Albums found for Artist: {1} / {2}", mvTrackData.AlbumInfo.Count.ToString(), mvSignature.Artist, mvSignature.Title); DBAlbumInfo albumInfo = new DBAlbumInfo(); albumInfo.Album = mvTrackData.AlbumInfo[0].Album; setMusicVideoAlbum(ref albumInfo, mvSignature.Artist, mvTrackData.AlbumInfo[0].Album, null); mvTrackData.AlbumInfo.Clear(); mvTrackData.ArtistInfo[0].Artist = mvSignature.Artist; mvTrackData.AlbumInfo.Add(albumInfo); } else mvTrackData.AlbumInfo.Clear(); results.Add(mvTrackData); } } return results; }