From e9c74d4f90ae553035ab2edd81e336a8d205b3d2 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 09 Dec 2018 15:47:48 +0000
Subject: [PATCH] ...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java |   30 ++++++++++++++++++++++++------
 1 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
index 1be4dca..00ecb3b 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
@@ -1,8 +1,12 @@
 package de.micromata.borgbutler.cache;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import de.micromata.borgbutler.config.BorgRepoConfig;
 import de.micromata.borgbutler.config.ConfigurationHandler;
+import de.micromata.borgbutler.json.borg.Archive;
+import de.micromata.borgbutler.json.borg.FilesystemItem;
 import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -21,6 +25,7 @@
     private RepoListCache repoListCache;
     private ArchiveListCache archiveListCache;
     private List<AbstractElementsCache> caches;
+    private List<ArchiveFileListCache> archiveFileListCaches;
 
     @JsonIgnore
     private File cacheDir;
@@ -29,18 +34,30 @@
         return instance;
     }
 
-    public void read() {
-        for (AbstractElementsCache cache : caches) {
-            cache.read();
-        }
-    }
-
     public void save() {
         for (AbstractElementsCache cache : caches) {
             cache.save();
         }
     }
 
+    public List<FilesystemItem> getArchiveContent(BorgRepoConfig repoConfig, Archive archive) {
+        if (archive == null || StringUtils.isBlank(archive.getArchive())) {
+            return null;
+        }
+        ArchiveFileListCache cache = null;
+        for (ArchiveFileListCache existingCache : archiveFileListCaches) {
+            if (archive.equals(existingCache.getArchive())) {
+                // Cache is already known:
+                cache = existingCache;
+                break;
+            }
+        }
+        if (cache == null) {
+            cache = new ArchiveFileListCache(cacheDir, repoConfig, archive);
+        }
+        return cache.getContent(repoConfig);
+    }
+
     /**
      * Removes all cache files and clears all caches.
      */
@@ -67,5 +84,6 @@
         caches.add(repoInfoCache = new RepoInfoCache(cacheDir));
         caches.add(repoListCache = new RepoListCache(cacheDir));
         caches.add(archiveListCache = new ArchiveListCache(cacheDir));
+        archiveFileListCaches = new ArrayList<>();
     }
 }

--
Gitblit v1.10.0