예제 #1
0
        private static IEnumerable <IEnumerable <VideoFingerPrintDatabaseMetaTableEntryWrapper> > DetermineGroups(IEnumerable <VideoFingerPrintDatabaseMetaTableEntryWrapper> entries)
        {
            var unusedEntries  = new HashSet <VideoFingerPrintDatabaseMetaTableEntryWrapper>(entries);
            var groupedEntries = new HashSet <IEnumerable <VideoFingerPrintDatabaseMetaTableEntryWrapper> >();

            while (unusedEntries.Any())
            {
                ulong currentGroupSize = 0;
                var   currentGroup     = new HashSet <VideoFingerPrintDatabaseMetaTableEntryWrapper>();
                while (currentGroupSize < FileSizeLimit)
                {
                    VideoFingerPrintDatabaseMetaTableEntryWrapper currentEntry = unusedEntries.FirstOrDefault();
                    if (currentEntry == null)
                    {
                        // We didn't hit the limit before exhausting all available entries
                        break;
                    }
                    unusedEntries.Remove(currentEntry);
                    currentGroup.Add(currentEntry);
                    currentGroupSize += currentEntry.FileSize;
                }
                groupedEntries.Add(currentGroup);
            }

            return(groupedEntries);
        }
        public void TestDatabaseMetaTableSerialization()
        {
            var entry = new VideoFingerPrintDatabaseMetaTableEntryWrapper
            {
                FileName = "test",
                FileSize = 1,
            };

            var entry2 = new VideoFingerPrintDatabaseMetaTableEntryWrapper
            {
                FileName = "test 2",
                FileSize = 2,
            };

            var database = new VideoFingerPrintDatabaseMetaTableWrapper
            {
                DatabaseMetaTableEntries = new[] { entry, entry2 },
            };

            using (var memoryStream = new MemoryStream())
            {
                VideoFingerPrintDatabaseMetaTableSaver.Save(database, memoryStream);
                byte[] savedDatabase = memoryStream.ToArray();
                VideoFingerPrintDatabaseMetaTableWrapper reloadedDatabase = VideoFingerPrintDatabaseMetaTableLoader.Load(savedDatabase);

                Assert.AreEqual(database, reloadedDatabase);
            }
        }
예제 #3
0
        private void UpdateMetatable(string databasePath, ulong fileSize)
        {
            VideoFingerPrintDatabaseMetaTableWrapper metatable = CreateOrLoadMetatable(_metatablePath);

            // Get matching database entry
            VideoFingerPrintDatabaseMetaTableEntryWrapper databaseEntry = (from entry in metatable.DatabaseMetaTableEntries
                                                                           where string.Equals(entry.FileName, databasePath, StringComparison.Ordinal)
                                                                           select entry).SingleOrDefault();

            databaseEntry.FileSize = fileSize;

            VideoFingerPrintDatabaseMetaTableSaver.Save(metatable, _metatablePath);
        }