From 4a337a1e7b82b9e15aa0904fc7aaeb48b15e15a8 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 16 Dec 2018 19:01:22 +0000
Subject: [PATCH] File number for files of archive added (for specifiing in download).

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java   |    7 +++++--
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java |    6 ++++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java            |    4 +++-
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java
index 7bf10a7..beb3c2b 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java
@@ -97,11 +97,14 @@
             int maxSize = filter != null ? filter.getMaxResultSize() : -1;
             list = new ArrayList<>();
             int counter = 0;
+            int fileNumber = -1;
             for (int i = 0; i < size; i++) {
+                ++fileNumber;
                 obj = inputStream.readObject();
                 if (obj instanceof BorgFilesystemItem) {
-                    if (filter == null || filter.matches(((BorgFilesystemItem) obj))) {
-                        list.add((BorgFilesystemItem) obj);
+                    BorgFilesystemItem item = (BorgFilesystemItem) obj;
+                    if (filter == null || filter.matches(item)) {
+                        list.add(item.setFileNumber(fileNumber));
                         if (maxSize > 0 && counter++ >= maxSize) break;
                     }
                 } else {
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 2e6c6c1..09891b4 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
@@ -238,11 +238,13 @@
                 archiveFilelistCache.save(repoConfig, archive, list);
                 items = new ArrayList<>();
                 int counter = 0;
+                int fileNumber = -1;
                 boolean search = filter != null && StringUtils.isNotBlank(filter.getSearchString());
                 int maxSize = filter != null ? filter.getMaxResultSize() : -1;
                 for (BorgFilesystemItem item : list) {
+                    ++fileNumber;
                     if (filter == null || filter.matches(item)) {
-                        items.add(item);
+                        items.add(item.setFileNumber(fileNumber));
                         if (maxSize > 0 && counter++ >= maxSize) break;
                     }
                 }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
index 789fede..fb6c737 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
@@ -41,6 +41,12 @@
     private String mtime;
     @Getter
     private long size;
+    /**
+     * Represents the number of the file in the archive (for downloading). This field is created and only known by BorgButler.
+     */
+    @Getter
+    @Setter
+    private int fileNumber;
 
     @Override
     public int compareTo(BorgFilesystemItem o) {

--
Gitblit v1.10.0