public void DeleteHashBinsAndSubfingerprintsOnTrackDelete() { const int StaticStride = 5115; const int SecondsToProcess = 20; const int StartAtSecond = 30; DefaultQueryConfiguration defaultQueryConfiguration = new DefaultQueryConfiguration(); TagInfo tagInfo = tagService.GetTagInfo(PathToMp3); int releaseYear = tagInfo.Year; Track track = new Track(tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration); modelService.InsertTrack(track); var subFingerprints = fingerprintUnitBuilder.BuildAudioFingerprintingUnit() .From(PathToMp3, SecondsToProcess, StartAtSecond) .WithCustomAlgorithmConfiguration(config => { config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint); }) .FingerprintIt() .HashIt() .ForTrack(track.Id) .Result; modelService.InsertSubFingerprint(subFingerprints); var hashBins = new List<HashBinMinHash>(); foreach (var subFingerprint in subFingerprints) { long[] groupedSubFingerprint = lshService.Hash(subFingerprint.Signature, defaultQueryConfiguration.NumberOfLSHTables, defaultQueryConfiguration.NumberOfMinHashesPerTable); for (int i = 0; i < groupedSubFingerprint.Length; i++) { int tableNumber = i + 1; hashBins.Add(new HashBinMinHash(groupedSubFingerprint[i], tableNumber, subFingerprint.Id)); } } modelService.InsertHashBin(hashBins); var actualTrack = modelService.ReadTrackByISRC(tagInfo.ISRC); Assert.IsNotNull(actualTrack); AssertTracksAreEqual(track, actualTrack); foreach (var subFingerprint in subFingerprints) { long[] groupedSubFingerprint = lshService.Hash(subFingerprint.Signature, defaultQueryConfiguration.NumberOfLSHTables, defaultQueryConfiguration.NumberOfMinHashesPerTable); var result = modelService.ReadSubFingerprintsByHashBucketsHavingThreshold(groupedSubFingerprint, defaultQueryConfiguration.NumberOfLSHTables); var tupple = result.First(); Assert.AreEqual(defaultQueryConfiguration.NumberOfLSHTables, tupple.Item2); var actualSufingerprint = tupple.Item1; AssertSubFingerprintsAreEqual(subFingerprint, actualSufingerprint); } // Act modelService.DeleteTrack(track); Assert.IsNull(modelService.ReadTrackByISRC(tagInfo.ISRC)); foreach (var subFingerprint in subFingerprints) { long[] groupedSubFingerprint = lshService.Hash(subFingerprint.Signature, defaultQueryConfiguration.NumberOfLSHTables, defaultQueryConfiguration.NumberOfMinHashesPerTable); var result = modelService.ReadSubFingerprintsByHashBucketsHavingThreshold(groupedSubFingerprint, defaultQueryConfiguration.NumberOfLSHTables); Assert.IsTrue(!result.Any()); } }
public void DeleteOneTrackTest() { string name = MethodBase.GetCurrentMethod().Name; Album album = new Album(0, name, 1986); modelService.InsertAlbum(album); Track track = new Track(0, name, name, album.Id); modelService.InsertTrack(track); modelService.DeleteTrack(track); Assert.AreEqual(null, modelService.ReadAlbumById(album.Id)); Assert.AreEqual(null, modelService.ReadTrackById(track.Id)); }
public void DeleteCollectionOfTracksIdTest() { string name = MethodBase.GetCurrentMethod().Name; Album album = new Album(int.MinValue, name, 1986); modelService.InsertAlbum(album); Assert.AreNotEqual(int.MinValue, album.Id); Track track = new Track(int.MinValue, name, name, album.Id); modelService.InsertTrack(track); Assert.AreNotEqual(int.MinValue, track.Id); modelService.DeleteTrack(track.Id); Assert.AreEqual(null, modelService.ReadAlbumById(album.Id)); Assert.AreEqual(null, modelService.ReadTrackById(track.Id)); }
public void InsertReadFingerprintTest() { string name = MethodBase.GetCurrentMethod().Name; Album album = new Album(0, name, 1986); modelService.InsertAlbum(album); Track track = new Track(0, name, name, album.Id, 360); modelService.InsertTrack(track); Fingerprint f = new Fingerprint(0, GenericFingerprint, track.Id, 0); modelService.InsertFingerprint(f); var allFingerprints = modelService.ReadFingerprints(); List<int> fingerprintIds = allFingerprints.Select(temp => temp.Id).ToList(); Assert.AreEqual(true, fingerprintIds.Contains(f.Id)); List<Fingerprint> addList = new List<Fingerprint>(); for (int i = 0; i < 10; i++) { addList.Add(new Fingerprint(0, GenericFingerprint, track.Id, 0)); } modelService.InsertFingerprint(addList); allFingerprints = modelService.ReadFingerprints(); fingerprintIds.Clear(); fingerprintIds.AddRange(allFingerprints.Select(temp => temp.Id)); foreach (Fingerprint finger in addList) { Assert.AreEqual(true, fingerprintIds.Contains(finger.Id)); } }
public int DeleteTrack(Track track) { return DeleteTrack(track.Id); }
private Track InsertTrack() { Track track = new Track("ISRC", "Artist", "Title", "Album", 1986, 360); modelService.InsertTrack(track); return track; }
public void DeleteTrackFalseTest1() { Track track = new Track(); const int Expected = 0; int actual = modelService.DeleteTrack(track); Assert.AreEqual(Expected, actual); }
/// <summary> /// Actual synchronous insert in the database /// </summary> /// <param name = "start">Start index</param> /// <param name = "end">End index</param> private void InsertInDatabase(int start, int end) { int topWavelets = (int)_nudTopWav.Value; IStride stride = null; Invoke( new Action( () => { stride = WinUtils.GetStride( (StrideType)_cmbStrideType.SelectedIndex, // Get stride according to the underlying combo box selection (int)_nudStride.Value, 0, new DefaultFingerprintingConfiguration().SamplesPerFingerprint); }), null); Action actionInterface = () => { _pbTotalSongs.PerformStep(); _nudProcessed.Value = processed; _nudLeft.Value = left; _nudBadFiles.Value = badFiles; _nudDetectedDuplicates.Value = duplicates; }; Action<object[], Color> actionAddItems = (parameters, color) => { int index = _dgvFillDatabase.Rows.Add(parameters); _dgvFillDatabase.FirstDisplayedScrollingRowIndex = index; if (color != Color.Empty) { _dgvFillDatabase.Rows[index].DefaultCellStyle.BackColor = color; } }; for (int i = start; i < end; i++) { // Process the corresponding files if (stopFlag) { return; } TagInfo tags = tagService.GetTagInfo(fileList[i]); // Get Tags from file if (tags == null) { // TAGS are null badFiles++; Invoke(actionAddItems, new object[] { "TAGS ARE NULL", fileList[i], 0, 0 }, Color.Red); continue; } string artist = tags.Artist; // Artist string title = tags.Title; // Title double duration = tags.Duration; // Duration // Check whether the duration is OK if (duration < MinTrackLength || duration > MaxTrackLength) { // Duration too small badFiles++; Invoke(actionAddItems, new object[] { "BAD DURATION", fileList[i], 0, 0 }, Color.Red); continue; } // Check whether the tags are properly defined if (string.IsNullOrEmpty(artist) || string.IsNullOrEmpty(title)) { // Title or Artist tag is null badFiles++; Invoke(actionAddItems, new object[] { "TAGS MISSING", fileList[i], 0, 0 }, Color.Red); continue; } Album album = GetCoresspondingAlbum(tags); // Get Album (whether new or unknown or aborted) if (album == null) { return; } Track track; try { lock (this) { // Check if this file is already in the database if (modelService.ReadTrackByArtistAndTitleName(artist, title) != null) { duplicates++; // There is such file in the database continue; } track = new Track(artist, title, album.Id, (int)duration); modelService.InsertTrack(track); // Insert new Track in the database } } catch (Exception e) { // catch any exception and abort the insertion MessageBox.Show(e.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } int count; try { List<byte[]> subFingerprints = fingerprintUnitBuilder.BuildFingerprints().On(fileList[i]).WithCustomConfiguration( config => { config.TopWavelets = topWavelets; config.Stride = stride; }).RunAlgorithmWithHashing().Result; // Create SubFingerprints List<SubFingerprint> subFingerprintsToTrack = AssociateSubFingerprintsToTrack(subFingerprints, track.Id); modelService.InsertSubFingerprint(subFingerprintsToTrack); count = subFingerprintsToTrack.Count; switch (hashAlgorithm) { // Hash if there is a need in doing so case HashAlgorithm.LSH: // LSH + Min Hash has been chosen HashSubFingerprintsUsingMinHash(subFingerprintsToTrack); break; case HashAlgorithm.NeuralHasher: throw new NotImplementedException(); case HashAlgorithm.None: break; } } catch (Exception e) { // catch any exception and abort the insertion MessageBox.Show(e.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } Invoke(actionAddItems, new object[] { artist, title, album.Name, duration, count }, Color.Empty); left--; processed++; Invoke(actionInterface); } }
public void ReadFingerprintByMultipleTrackIdTest1() { string name = MethodBase.GetCurrentMethod().Name; Album album = new Album(0, name, 1986); modelService.InsertAlbum(album); const int NumberOfTracks = 1153; const int NumberOfFingerprintsPerTrack = 10; List<Track> listTrack = new List<Track>(); List<Fingerprint> listOfFingerprints = new List<Fingerprint>(); for (int i = 0; i < NumberOfTracks; i++) { Track track0 = new Track(0, name, name, album.Id, 360); listTrack.Add(track0); modelService.InsertTrack(track0); for (int j = 0; j < NumberOfFingerprintsPerTrack; j++) { Fingerprint f0 = new Fingerprint(0, GenericFingerprint, track0.Id, 0); listOfFingerprints.Add(f0); } } modelService.InsertFingerprint(listOfFingerprints); var dict = modelService.ReadFingerprintsByMultipleTrackId(listTrack, 0); Assert.AreNotEqual(null, dict); Assert.AreEqual(NumberOfTracks, dict.Keys.Count); foreach (Track track in listTrack) { Assert.AreEqual(true, dict.ContainsKey(track.Id)); Assert.AreEqual(NumberOfFingerprintsPerTrack, dict[track.Id].Count); } }
public void ReadFingerprintByMultipleTrackIdTest() { string name = MethodBase.GetCurrentMethod().Name; Album album = new Album(0, name, 1986); modelService.InsertAlbum(album); Track track0 = new Track(0, name, name, album.Id, 360); modelService.InsertTrack(track0); Track track1 = new Track(0, name, name, album.Id, 360); modelService.InsertTrack(track1); Track track2 = new Track(0, name, name, album.Id, 360); modelService.InsertTrack(track2); Fingerprint f0 = new Fingerprint(0, GenericFingerprint, track0.Id, 0); modelService.InsertFingerprint(f0); Fingerprint f1 = new Fingerprint(0, GenericFingerprint, track0.Id, 1); modelService.InsertFingerprint(f1); Fingerprint f2 = new Fingerprint(0, GenericFingerprint, track1.Id, 2); modelService.InsertFingerprint(f2); Fingerprint f3 = new Fingerprint(0, GenericFingerprint, track1.Id, 3); modelService.InsertFingerprint(f3); Fingerprint f4 = new Fingerprint(0, GenericFingerprint, track2.Id, 4); modelService.InsertFingerprint(f4); Fingerprint f5 = new Fingerprint(0, GenericFingerprint, track2.Id, 5); modelService.InsertFingerprint(f5); Fingerprint f6 = new Fingerprint(0, GenericFingerprint, track0.Id, 6); modelService.InsertFingerprint(f6); Fingerprint f7 = new Fingerprint(0, GenericFingerprint, track1.Id, 7); modelService.InsertFingerprint(f7); Fingerprint f8 = new Fingerprint(0, GenericFingerprint, track2.Id, 8); modelService.InsertFingerprint(f8); var dict = modelService.ReadFingerprintsByMultipleTrackId(new List<Track> { track0, track1, track2 }, 0); Assert.AreNotEqual(null, dict); Assert.AreEqual(3, dict.Keys.Count); foreach (var item in dict) { Assert.AreEqual(3, item.Value.Count); } Assert.AreEqual(true, dict.ContainsKey(track0.Id)); Assert.AreEqual(true, dict.ContainsKey(track1.Id)); Assert.AreEqual(true, dict.ContainsKey(track2.Id)); foreach (var pair in dict) { Assert.AreEqual(3, pair.Value.Count); } }
public void ReadFingerprintByIdTest() { string name = MethodBase.GetCurrentMethod().Name; const int fakeId = int.MinValue; Album album = new Album(fakeId, name, 1986); modelService.InsertAlbum(album); Assert.AreNotEqual(fakeId, album); Track track = new Track(fakeId, name, name, album.Id, 360); modelService.InsertTrack(track); Assert.AreNotEqual(fakeId, track.Id); Fingerprint f = new Fingerprint(fakeId, GenericFingerprint, track.Id, 0); modelService.InsertFingerprint(f); Assert.AreNotEqual(fakeId, f.Id); Fingerprint readF = modelService.ReadFingerprintById(f.Id); Assert.AreEqual(f.Id, readF.Id); Assert.AreEqual(f.Signature.Length, readF.Signature.Length); for (int i = 0; i < f.Signature.Length; i++) { Assert.AreEqual(f.Signature[i], readF.Signature[i]); } Assert.AreEqual(f.TrackId, readF.TrackId); }
public void InsertTrackWithBadAlbumIdForeignKeyReference() { string name = MethodBase.GetCurrentMethod().Name; Album a = new Album(int.MinValue, name, 1990); Track track = new Track(int.MinValue, name, name, a.Id); modelService.InsertTrack(track); }
public void InsertReadTrackTest() { string name = MethodBase.GetCurrentMethod().Name; Album album = new Album(int.MinValue, name, 1986); modelService.InsertAlbum(album); Assert.AreNotEqual(int.MinValue, album.Id); Track track = new Track(int.MinValue, name, name, album.Id, 360); modelService.InsertTrack(track); Assert.AreNotEqual(int.MinValue, track.Id); var listOfTracks = modelService.ReadTracks(); bool found = false; foreach (Track temp in listOfTracks) { Assert.IsTrue(temp.Id > 0); if (temp.Id == track.Id) { found = true; break; } } Assert.AreEqual(true, found); Track t = modelService.ReadTrackById(track.Id); Assert.AreEqual(track.Id, t.Id); Assert.AreEqual(track.AlbumId, t.AlbumId); Assert.AreEqual(track.Artist, t.Artist); Assert.AreEqual(track.Title, t.Title); Assert.AreEqual(track.TrackLengthSec, t.TrackLengthSec); List<Album> listAlbums = new List<Album>(); for (int i = 0; i < 10; i++) { Album a = new Album(int.MinValue, name + i, i + 1986); listAlbums.Add(a); } modelService.InsertAlbum(listAlbums); foreach (Album a in listAlbums) { Assert.AreNotEqual(int.MinValue, a.Id); } List<Track> listTracks = new List<Track>(); List<int> lId = new List<int>(); for (int i = 0; i < 10; i++) { Track a = new Track(int.MinValue, name + i, name + i, listAlbums[i].Id); listTracks.Add(a); } modelService.InsertTrack(listTracks); foreach (Track item in listTracks) { Assert.AreNotEqual(int.MinValue, item.Id); } var readTracks = modelService.ReadTracks(); List<int> readIds = readTracks.Select(a => a.Id).ToList(); foreach (int i in lId) { Assert.AreEqual(true, readIds.Contains(i)); } }
private List<Track> GetRandomListOfTracks(Album album, int count) { var tracks = new List<Track>(); for (int i = 0; i < count; i++) { Track a = new Track(int.MinValue, album.Name, album.Name, album.Id); tracks.Add(a); } return tracks; }
public void ReadFingerprintByTrackIdTest() { string name = MethodBase.GetCurrentMethod().Name; Album album = new Album(0, name, 1986); modelService.InsertAlbum(album); Track track = new Track(0, name, name, album.Id, 360); modelService.InsertTrack(track); Fingerprint f = new Fingerprint(0, GenericFingerprint, track.Id, 0); modelService.InsertFingerprint(f); var list = modelService.ReadFingerprintsByTrackId(track.Id, 0); Fingerprint readF = list.FirstOrDefault(temp => temp.Id == f.Id); Assert.AreNotEqual(null, readF); Assert.AreEqual(f.Id, readF.Id); Assert.AreEqual(f.Signature.Length, readF.Signature.Length); for (int i = 0; i < f.Signature.Length; i++) { Assert.AreEqual(f.Signature[i], readF.Signature[i]); } Assert.AreEqual(f.TrackId, readF.TrackId); }
public void Insert(Track track) { track.Id = PrepareStoredProcedure(SpInsertTrack).WithParametersFromModel(track).Execute().AsScalar<int>(); }
public void ReadFingerprintsByMultipleIdsTest() { string name = MethodBase.GetCurrentMethod().Name; List<Fingerprint> listOfFingers = new List<Fingerprint>(); Album album = modelService.ReadUnknownAlbum(); Track track = new Track(0, name, name, album.Id); modelService.InsertTrack(track); const int Count = 100; List<int> listOfGuids = new List<int>(); const int FakeId = int.MinValue; for (int i = 0; i < Count; i++) { listOfFingers.Add(new Fingerprint(FakeId, GenericFingerprint, track.Id, 0)); } modelService.InsertFingerprint(listOfFingers); listOfGuids.AddRange(listOfFingers.Select((f) => f.Id)); var readFingers = modelService.ReadFingerprintById(listOfGuids); Assert.AreEqual(readFingers.Count, listOfFingers.Count); }
private Track InsertTrack() { Album album = new Album(0, "Track"); modelService.InsertAlbum(album); Track track = new Track(0, "Random", "Random", album.Id); modelService.InsertTrack(track); return track; }
public void ReadFingerprintsTest() { string name = MethodBase.GetCurrentMethod().Name; Album album = modelService.ReadUnknownAlbum(); Track t = new Track(0, name, name, album.Id); modelService.InsertTrack(t); Fingerprint f = new Fingerprint(0, GenericFingerprint, t.Id, 10); modelService.InsertFingerprint(f); var actual = modelService.ReadFingerprints(); Assert.IsTrue(actual.Count >= 1); }
private void AssertTracksAreEqual(Track expectedTrack, Track actualTrack) { Assert.AreEqual(expectedTrack.Id, actualTrack.Id); Assert.AreEqual(expectedTrack.Album, actualTrack.Album); Assert.AreEqual(expectedTrack.Artist, actualTrack.Artist); Assert.AreEqual(expectedTrack.Title, actualTrack.Title); Assert.AreEqual(expectedTrack.TrackLengthSec, actualTrack.TrackLengthSec); Assert.AreEqual(expectedTrack.ISRC, actualTrack.ISRC); }
public void ReadTrackByArtistAndTitle() { string name = MethodBase.GetCurrentMethod().Name; Album album = modelService.ReadUnknownAlbum(); string artistName = name; string titleName = name; const int FakeId = int.MinValue; Track track = new Track(FakeId, artistName, titleName, album.Id); modelService.InsertTrack(track); Assert.AreNotEqual(FakeId, track.Id); Track readTrack = modelService.ReadTrackByArtistAndTitleName(artistName, titleName); Assert.IsNotNull(readTrack); Assert.AreEqual(artistName, readTrack.Artist); Assert.AreEqual(titleName, readTrack.Title); }
public void CreateFingerprintsInsertThenQueryAndGetTheRightResult() { const int StaticStride = 5115; const int SecondsToProcess = 10; const int StartAtSecond = 30; DefaultQueryConfiguration defaultQueryConfiguration = new DefaultQueryConfiguration(); QueryFingerprintService queryFingerprintService = new QueryFingerprintService(new CombinedHashingAlgorithm(), modelService); ITagService tagService = new BassAudioService(); TagInfo info = tagService.GetTagInfo(PathToMp3); int releaseYear = info.Year; Track track = new Track(info.ISRC, info.Artist, info.Title, info.Album, releaseYear, (int)info.Duration); modelService.InsertTrack(track); var fingerprinter = fingerprintUnitBuilderWithBass.BuildAudioFingerprintingUnit() .From(PathToMp3, SecondsToProcess, StartAtSecond) .WithCustomAlgorithmConfiguration(config => { config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint); }) .FingerprintIt(); var fingerprints = fingerprinter.AsIs().Result; var subFingerprints = fingerprinter.HashIt().ForTrack(track.Id).Result; modelService.InsertSubFingerprint(subFingerprints); List<HashBinMinHash> hashBins = new List<HashBinMinHash>(); foreach (SubFingerprint subFingerprint in subFingerprints) { long[] groupedSubFingerprint = lshService.Hash(subFingerprint.Signature, defaultQueryConfiguration.NumberOfLSHTables, defaultQueryConfiguration.NumberOfMinHashesPerTable); for (int i = 0; i < groupedSubFingerprint.Length; i++) { int tableNumber = i + 1; hashBins.Add(new HashBinMinHash(groupedSubFingerprint[i], tableNumber, subFingerprint.Id)); } } modelService.InsertHashBin(hashBins); QueryResult result = queryFingerprintService.Query(fingerprints, defaultQueryConfiguration); Assert.IsTrue(result.IsSuccessful); Assert.AreEqual(track.Id, result.Results[0].Track.Id); }
public void ReadTrackByFingerprintInexistantIdTest() { string name = MethodBase.GetCurrentMethod().Name; Album album = new Album(int.MinValue, name, 1986); modelService.InsertAlbum(album); Track track = new Track(int.MinValue, name, name, album.Id, 360); modelService.InsertTrack(track); Assert.AreEqual(0, modelService.ReadTrackByFingerprint(int.MinValue).Count); }
public void InsertTrack(Track track) { trackDao.Insert(track); }
public void ReadTrackByFingerprintTest() { string name = MethodBase.GetCurrentMethod().Name; Album album = new Album(int.MinValue, name, 1986); modelService.InsertAlbum(album); Track track = new Track(int.MinValue, name, name, album.Id, 360); modelService.InsertTrack(track); const int FakeId = int.MinValue; Fingerprint f = new Fingerprint(FakeId, GenericFingerprint, track.Id, int.MinValue); modelService.InsertFingerprint(f); Assert.AreNotEqual(FakeId, f.Id); var list = modelService.ReadTrackByFingerprint(f.Id); Track readT = list.FirstOrDefault(temp => temp.Id == track.Id); Assert.AreNotEqual(null, readT); Assert.AreEqual(track.Id, readT.Id); Assert.AreEqual(track.AlbumId, readT.AlbumId); Assert.AreEqual(track.Artist, readT.Artist); Assert.AreEqual(track.Title, readT.Title); Assert.AreEqual(track.TrackLengthSec, readT.TrackLengthSec); }
private void InsertInDatabase(int start, int end) { int topWavelets = (int)_nudTopWav.Value; IStride stride = null; Invoke( new Action( () => { stride = WinUtils.GetStride( (StrideType)_cmbStrideType.SelectedIndex, (int)_nudStride.Value, 0, new DefaultFingerprintingConfiguration().SamplesPerFingerprint); }), null); Action actionInterface = () => { _pbTotalSongs.PerformStep(); _nudProcessed.Value = processed; _nudLeft.Value = left; _nudBadFiles.Value = badFiles; _nudDetectedDuplicates.Value = duplicates; }; Action<object[], Color> actionAddItems = (parameters, color) => { int index = _dgvFillDatabase.Rows.Add(parameters); _dgvFillDatabase.FirstDisplayedScrollingRowIndex = index; if (color != Color.Empty) { _dgvFillDatabase.Rows[index].DefaultCellStyle.BackColor = color; } }; for (int i = start; i < end; i++) { // Process the corresponding files if (stopFlag) { return; } TagInfo tags = tagService.GetTagInfo(fileList[i]); // Get Tags from file if (tags == null || tags.IsEmpty) { badFiles++; processed++; left--; Invoke(actionAddItems, new object[] { "TAGS ARE NULL", fileList[i], 0, 0 }, Color.Red); Invoke(actionInterface); continue; } string isrc = tags.ISRC; string artist = tags.Artist; // Artist string title = tags.Title; // Title int releaseYear = tags.Year; string album = tags.Album; double duration = tags.Duration; // Duration // Check whether the duration is OK if (duration < MinTrackLength || duration > MaxTrackLength) { // Duration too small badFiles++; processed++; left--; Invoke(actionAddItems, new object[] { "Bad duration", fileList[i], 0, 0 }, Color.Red); Invoke(actionInterface); continue; } // Check whether the tags are properly defined if (string.IsNullOrEmpty(isrc) && (string.IsNullOrEmpty(artist) || string.IsNullOrEmpty(title))) { badFiles++; processed++; left--; Invoke( actionAddItems, new object[] { "ISRC Tag is missing. Skipping file...", fileList[i], 0, 0 }, Color.Red); Invoke(actionInterface); continue; } Track track; try { lock (this) { // Check if this file is already in the database if (IsDuplicateFile(isrc, artist, title)) { duplicates++; // There is such file in the database processed++; left--; Invoke(actionInterface); continue; } track = new Track(isrc, artist, title, album, releaseYear, (int)duration); modelService.InsertTrack(track); // Insert new Track in the database } } catch (Exception e) { // catch any exception and abort the insertion processed++; left--; badFiles++; MessageBox.Show(e.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); Invoke(actionInterface); return; } int count; try { List<SubFingerprint> subFingerprintsToTrack = fingerprintUnitBuilder .BuildAudioFingerprintingUnit() .From(fileList[i]) .WithCustomAlgorithmConfiguration( config => { config.TopWavelets = topWavelets; config.Stride = stride; }) .FingerprintIt() .HashIt() .ForTrack(track.Id) .Result; // Create SubFingerprints modelService.InsertSubFingerprint(subFingerprintsToTrack); count = subFingerprintsToTrack.Count; HashSubFingerprintsUsingMinHash(subFingerprintsToTrack); } catch (Exception e) { // catch any exception and abort the insertion MessageBox.Show(e.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); badFiles++; processed++; left--; Invoke(actionInterface); return; } Invoke(actionAddItems, new object[] { artist, title, isrc, duration, count }, Color.Empty); left--; processed++; Invoke(actionInterface); } }
public void InsertFingerprintWithBadTrackIdForeignKeyreference() { string name = MethodBase.GetCurrentMethod().Name; Album a = new Album(0, name, 1990); Track track = new Track(0, name, name, a.Id); Fingerprint f = new Fingerprint(0, GenericFingerprint, track.Id, 0); modelService.InsertFingerprint(f); }