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); } }
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); }