Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
 public IEnumerable <SubFingerprintData> ReadHashedFingerprintsByTrackReference(IModelReference trackReference)
 {
     using var tx = databaseContext.OpenReadOnlyTransaction();
     return(tx.GetSubFingerprintsForTrack(trackReference.Get <ulong>())
            .Select(subFingerprint => subFingerprint.ToSubFingerprintData())
            .ToList());
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
        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;
            }
        }