public int DeleteSubFingerprintsByTrackReference(IModelReference trackReference) { using var tx = databaseContext.OpenReadWriteTransaction(); try { var count = 0; var trackId = trackReference.Get <ulong>(); foreach (var subFingerprint in tx.GetSubFingerprintsForTrack(trackId)) { // Remove hashes from hashTable var table = 0; foreach (var hash in subFingerprint.Hashes) { tx.RemoveSubFingerprintsByHashTableAndHash(table, hash, subFingerprint.SubFingerprintReference); count++; table++; } tx.RemoveSubFingerprint(subFingerprint); count++; } tx.Commit(); return(count); } catch (Exception) { tx.Abort(); throw; } }
public IEnumerable <SubFingerprintData> ReadHashedFingerprintsByTrackReference(IModelReference trackReference) { using var tx = databaseContext.OpenReadOnlyTransaction(); return(tx.GetSubFingerprintsForTrack(trackReference.Get <ulong>()) .Select(subFingerprint => subFingerprint.ToSubFingerprintData()) .ToList()); }
internal TrackDataDTO(TrackInfo trackInfo, double duration, IModelReference modelReference) { Id = trackInfo.Id; Artist = trackInfo.Artist; Title = trackInfo.Title; Length = duration; TrackReference = modelReference.Get <ulong>(); MetaFields = trackInfo.MetaFields; }
internal SubFingerprintDataDTO(int[] hashes, uint sequenceNumber, float sequenceAt, IModelReference subFingerprintReference, IModelReference trackReference) : this() { Hashes = hashes; SubFingerprintReference = subFingerprintReference.Get <ulong>(); TrackReference = trackReference.Get <ulong>(); SequenceNumber = sequenceNumber; SequenceAt = sequenceAt; }
public IEnumerable <SubFingerprintData> InsertHashDataForTrack(IEnumerable <HashedFingerprint> hashedFingerprints, IModelReference trackReference) { using var tx = databaseContext.OpenReadWriteTransaction(); var trackId = trackReference.Get <ulong>(); var trackData = tx.GetTrackById(trackId); if (trackData == null) { throw new TrackNotFoundException(trackId); } var newSubFingerprintId = tx.GetLastSubFingerprintId(); var result = new List <SubFingerprintData>(); foreach (var hashedFingerprint in hashedFingerprints) { newSubFingerprintId++; var subFingerprintReference = new ModelReference <ulong>(newSubFingerprintId); var subFingerprint = new SubFingerprintDataDTO(hashedFingerprint.HashBins, hashedFingerprint.SequenceNumber, hashedFingerprint.StartsAt, subFingerprintReference, trackReference); tx.PutSubFingerprint(subFingerprint); // Insert hashes to hashTable var table = 0; foreach (var hash in hashedFingerprint.HashBins) { tx.PutSubFingerprintsByHashTableAndHash(table, hash, newSubFingerprintId); table++; } result.Add(subFingerprint.ToSubFingerprintData()); } tx.Commit(); return(result); }
public int DeleteTrack(IModelReference trackReference) { using var tx = databaseContext.OpenReadWriteTransaction(); try { var trackId = trackReference.Get <ulong>(); var trackData = tx.GetTrackById(trackId); if (trackData == null) { throw new TrackNotFoundException(trackId); } tx.RemoveTrack(trackData); tx.Commit(); return(1); } catch (Exception) { tx.Abort(); throw; } }