Brian Gough 5 лет назад
Родитель
Сommit
d493238eaf
1 измененных файлов с 40 добавлено и 0 удалено
  1. 40 0
      services/clsi/app/js/ContentCacheManager.js

+ 40 - 0
services/clsi/app/js/ContentCacheManager.js

@@ -26,6 +26,10 @@ async function update(contentDir, filePath) {
   const ranges = []
   const newRanges = []
   const seenHashes = new Set()
+  // keep track of hashes expire old ones when they reach a generation > N.
+  const tracker = new HashFileTracker()
+  await loadState(contentDir, tracker)
+  
   for await (const chunk of stream) {
     const pdfStreams = extractor.consume(chunk)
     for (const pdfStream of pdfStreams) {
@@ -44,9 +48,45 @@ async function update(contentDir, filePath) {
       }
     }
   }
+  const expiredHashes = tracker.update(ranges).findStale(5)
+  await deleteHashFiles(expiredHashes)
   return [ranges, newRanges]
 }
 
+class HashFileTracker {
+  constructor(contentDir) {
+    this.hashAge = new Map()
+  }
+
+  update(ranges) {
+    for (const [hash, age] of this.hashAge) {
+      this.hashAge.set(hash, age + 1)
+    }
+    for (const range in ranges) {
+      this.hashAge.set(range.hash, 0)
+    }
+  }
+
+  findStale(maxAge) {
+    var stale = []
+    for (const [hash, age] of this.hashAge) {
+      if (age > maxAge) {
+        stale.push(hash)
+        this.hashAge.delete(hash)
+      }
+    }
+    return stale
+  }
+}
+
+async function loadState(contentDir, tracker) {
+
+}
+
+async function deleteHashFiles(n) {
+  // delete any hash file older than N generations
+}
+
 class PdfStreamsExtractor {
   constructor() {
     this.fileIndex = 0