From 056160edd629372ff93619be7e130a26e2377f9b Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 16 Dec 2018 15:25:17 +0000
Subject: [PATCH] file lists...
---
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java | 9 +++-
borgbutler-webapp/src/components/views/archives/FileListEntry.jsx | 2 +
borgbutler-webapp/src/components/views/archives/FileListPanel.jsx | 14 ++++---
borgbutler-webapp/src/components/views/archives/FileListTable.jsx | 5 +-
borgbutler-server/src/main/java/de/micromata/borgbutler/server/Main.java | 5 +-
borgbutler-webapp/src/components/views/archives/ArchiveView.jsx | 2
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java | 2 +
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java | 33 +++++++++++++++-
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java | 21 +++++++---
9 files changed, 68 insertions(+), 25 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 483f9a8..9d066c0 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
@@ -58,15 +58,15 @@
* @param archive
* @return
*/
- public List<BorgFilesystemItem> load(BorgRepoConfig repoConfig, Archive archive) {
+ public List<BorgFilesystemItem> load(BorgRepoConfig repoConfig, Archive archive, int maxSize) {
File file = getFile(repoConfig, archive);
if (!file.exists()) {
return null;
}
- return load(file);
+ return load(file, maxSize);
}
- public List<BorgFilesystemItem> load(File file) {
+ public List<BorgFilesystemItem> load(File file, int maxSize) {
if (file.exists() == false) {
log.error("File '" + file.getAbsolutePath() + "' doesn't exist. Can't get archive content files.");
return null;
@@ -86,6 +86,9 @@
return null;
}
int size = (Integer) obj;
+ if (maxSize > 0 && maxSize < size) {
+ size = maxSize;
+ }
list = new ArrayList<>();
for (int i = 0; i < size; i++) {
obj = inputStream.readObject();
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 314a262..adcae64 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
@@ -7,6 +7,7 @@
import de.micromata.borgbutler.data.Archive;
import de.micromata.borgbutler.data.Repository;
import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
+import de.micromata.borgbutler.utils.DateUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.jcs.JCS;
import org.apache.commons.jcs.access.CacheAccess;
@@ -180,6 +181,10 @@
}
public List<BorgFilesystemItem> getArchiveContent(String archiveId) {
+ return getArchiveContent(archiveId, -1);
+ }
+
+ public List<BorgFilesystemItem> getArchiveContent(String archiveId, int maxSize) {
Archive archive = null;
outerLoop:
for (Repository repository : getAllRepositories()) {
@@ -197,19 +202,41 @@
return null;
}
BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(archive.getRepoId());
- return getArchiveContent(repoConfig, archive);
+ return getArchiveContent(repoConfig, archive, maxSize);
}
+ /**
+ *
+ * @param repoConfig
+ * @param archive
+ * @return
+ */
public List<BorgFilesystemItem> getArchiveContent(BorgRepoConfig repoConfig, Archive archive) {
+ return getArchiveContent(repoConfig, archive, -1);
+ }
+
+ /**
+ *
+ * @param repoConfig
+ * @param archive
+ * @param maxSize Max result size (default is -1 meaning all).
+ * @return
+ */
+ public List<BorgFilesystemItem> getArchiveContent(BorgRepoConfig repoConfig, Archive archive, int maxSize) {
if (archive == null || StringUtils.isBlank(archive.getName())) {
return null;
}
- List<BorgFilesystemItem> items = archiveFilelistCache.load(repoConfig, archive);
+ List<BorgFilesystemItem> items = archiveFilelistCache.load(repoConfig, archive, maxSize);
if (items == null) {
List<BorgFilesystemItem> list = BorgCommands.listArchiveContent(repoConfig, archive.getName());
if (CollectionUtils.isNotEmpty(list)) {
archiveFilelistCache.save(repoConfig, archive, list);
items = new ArrayList<>();
+ int i = 0;
+ for (BorgFilesystemItem item : list) {
+ if (++i > maxSize) break;
+ items.add(item);
+ }
}
}
if (items == null) {
@@ -219,7 +246,7 @@
}
public List<BorgFilesystemItem> getArchiveContent(File file) {
- return archiveFilelistCache.load(file);
+ return archiveFilelistCache.load(file, -1);
}
public void shutdown() {
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 7a196bd..2677b99 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
@@ -1,6 +1,7 @@
package de.micromata.borgbutler.json.borg;
import lombok.Getter;
+import lombok.Setter;
import java.io.Serializable;
@@ -35,6 +36,7 @@
@Getter
private String flags;
@Getter
+ @Setter
private String mtime;
@Getter
private long size;
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Main.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Main.java
index 0be23d8..df1e636 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Main.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Main.java
@@ -17,6 +17,7 @@
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.List;
import java.util.TimeZone;
public class Main {
@@ -132,9 +133,9 @@
private static void printArchiveContent(String fileName) {
File file = new File(fileName);
- BorgFilesystemItem[] fileList = ButlerCache.getInstance().getArchiveContent(file);
+ List<BorgFilesystemItem> fileList = ButlerCache.getInstance().getArchiveContent(file);
boolean parseFormatExceptionPrinted = false;
- if (fileList != null && fileList.length > 0) {
+ if (fileList != null && fileList.size() > 0) {
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat iso = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'Z'"); // Quoted "Z" to indicate UTC, no timezone offset
iso.setTimeZone(tz);
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java
index 8f3e88d..902848c 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java
@@ -4,6 +4,7 @@
import de.micromata.borgbutler.data.Archive;
import de.micromata.borgbutler.data.Repository;
import de.micromata.borgbutler.json.JsonUtils;
+import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -12,6 +13,7 @@
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
+import java.util.List;
@Path("/archives")
public class ArchivesRest {
@@ -39,16 +41,21 @@
@Produces(MediaType.APPLICATION_JSON)
/**
*
- * @param repo Name of repository ({@link Repository#getName()}.
- * @param archive Id or name of archive.
+ * @param archiveId Id or name of archive.
+ * @param maxResultSize maximum number of file items to return (default is 50).
* @param prettyPrinter If true then the json output will be in pretty format.
* @return Repository (including list of archives) as json string.
* @see JsonUtils#toJson(Object, boolean)
*/
- public String getArchiveFileLIst(@QueryParam("repo") String repoName,
- @QueryParam("archive") String archiveIdOrName, @QueryParam("force") boolean force,
- @QueryParam("prettyPrinter") boolean prettyPrinter) {
- Archive archive = ButlerCache.getInstance().getArchive(repoName, archiveIdOrName, force);
- return JsonUtils.toJson(archive, prettyPrinter);
+ public String getArchiveFileLIst(@QueryParam("archiveId") String archiveId,
+ @QueryParam("maxResultSize") Integer maxResultSize,
+ @QueryParam("force") boolean force,
+ @QueryParam("prettyPrinter") boolean prettyPrinter) {
+ int maxSize = maxResultSize != null ? maxResultSize : 50;
+ List<BorgFilesystemItem> items = ButlerCache.getInstance().getArchiveContent(archiveId, maxSize);
+ if (items == null) {
+ return "";
+ }
+ return JsonUtils.toJson(items, prettyPrinter);
}
}
diff --git a/borgbutler-webapp/src/components/views/archives/ArchiveView.jsx b/borgbutler-webapp/src/components/views/archives/ArchiveView.jsx
index 979cf28..2ffe1d0 100644
--- a/borgbutler-webapp/src/components/views/archives/ArchiveView.jsx
+++ b/borgbutler-webapp/src/components/views/archives/ArchiveView.jsx
@@ -131,7 +131,7 @@
<td>{humanFileSize(archive.stats.original_size)}</td>
</tr>
<tr>
- <td>Nfiles</td>
+ <td>Number of files</td>
<td>{Number(archive.stats.nfiles).toLocaleString()}</td>
</tr>
</tbody>
diff --git a/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx b/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx
index 3a1a3f3..a58e1bf 100644
--- a/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx
+++ b/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx
@@ -6,6 +6,8 @@
return (
<tr>
<td className={'tt'}>{entry.mode}</td>
+ <td className={'tt'}>{entry.mtime}</td>
+ <td className={'tt'}>{entry.size}</td>
<td className={'tt'}><Highlight search={search}>{entry.path}</Highlight></td>
</tr>
);
diff --git a/borgbutler-webapp/src/components/views/archives/FileListPanel.jsx b/borgbutler-webapp/src/components/views/archives/FileListPanel.jsx
index f4842c3..355ec89 100644
--- a/borgbutler-webapp/src/components/views/archives/FileListPanel.jsx
+++ b/borgbutler-webapp/src/components/views/archives/FileListPanel.jsx
@@ -1,11 +1,13 @@
import React from 'react'
-import {getRestServiceUrl, humanFileSize} from '../../../utilities/global';
+import {getRestServiceUrl} from '../../../utilities/global';
import ErrorAlert from '../../general/ErrorAlert';
+import FileListTable from "./FileListTable";
class ArchiveView extends React.Component {
state = {
isFetching: false, activeTab: '1',
+ fileList : undefined
};
componentDidMount = () => {
@@ -23,7 +25,7 @@
failed: false
});
fetch(getRestServiceUrl('archives/filelist', {
- archive: this.props.archiveId,
+ archiveId: this.props.archiveId,
force: forceReload
}), {
method: 'GET',
@@ -35,7 +37,7 @@
.then(json => {
this.setState({
isFetching: false,
- archive: json
+ fileList: json
})
})
.catch(() => this.setState({isFetching: false, failed: true}));
@@ -43,7 +45,6 @@
render = () => {
let content = undefined;
- let archive = this.state.archive;
if (this.state.isFetching) {
content = <i>Loading...</i>;
@@ -56,9 +57,10 @@
title: 'Try again'
}}
/>;
- } else if (this.state.archive) {
+ } else if (this.state.fileList) {
content = <React.Fragment>
- Hurzel;
+ <FileListTable
+ entries={this.state.fileList}/>
</React.Fragment>;
}
return <React.Fragment>
diff --git a/borgbutler-webapp/src/components/views/archives/FileListTable.jsx b/borgbutler-webapp/src/components/views/archives/FileListTable.jsx
index 05fbd7b..e0d581d 100644
--- a/borgbutler-webapp/src/components/views/archives/FileListTable.jsx
+++ b/borgbutler-webapp/src/components/views/archives/FileListTable.jsx
@@ -10,9 +10,8 @@
<thead>
<tr>
<th>Mode</th>
- <th style={{whiteSpace: 'nowrap'}}>
- Date
- </th>
+ <th>Date</th>
+ <th>Size</th>
<th>Path</th>
</tr>
</thead>
--
Gitblit v1.10.0