From 26f572a3cbdde9855563b5b6ca575e95bc6cb57d Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Tue, 08 Jan 2019 02:03:40 +0000
Subject: [PATCH] Deletes now single cache files on demand.

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java |   10 +++++
 borgbutler-webapp/src/components/views/archives/ArchiveView.jsx                       |   49 ++++++++++++++++--------
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java          |   18 +++++++--
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java |    3 +
 4 files changed, 60 insertions(+), 20 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 f459efa..06c8cfc 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
@@ -256,6 +256,16 @@
         }
     }
 
+    public void deleteCachFile(Repository repository, Archive archive) {
+        File file = getFile(repository, archive);
+        if (file.exists()) {
+            log.info("Deleting cache file: " + file.getAbsolutePath());
+            file.delete();
+        } else {
+            log.info("Can't delete requested file because it doesn't exist (anymore): " + file.getAbsolutePath());
+        }
+    }
+
     File getFile(Repository repository, Archive archive) {
         return getFile(repository.getName(), archive);
     }
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 aa73f03..1aea7e1 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
@@ -195,10 +195,6 @@
         return archive;
     }
 
-    public List<BorgFilesystemItem> getArchiveContent(String archiveId) {
-        return getArchiveContent(archiveId, true, null);
-    }
-
     public Archive getArchive(String archiveId) {
         for (Repository repository : getAllRepositories()) {
             if (repository.getArchives() != null) {
@@ -304,6 +300,20 @@
         return archiveFilelistCache.load(file, null);
     }
 
+    public void deleteCachedArchiveContent(String repoIdOrName, String archiveIdOrName) {
+        Repository repository = getRepository(repoIdOrName);
+        if (repository == null) {
+            log.warn("Can't delete archive content cache file, repository not found: " + repoIdOrName);
+            return;
+        }
+        Archive archive = getArchive(repoIdOrName, archiveIdOrName);
+        if (archive == null) {
+            log.warn("Can't delete archive content cache file, archive not found: " + repoIdOrName);
+            return;
+        }
+        archiveFilelistCache.deleteCachFile(repository, archive);
+    }
+
     public void shutdown() {
         JCS.shutdown();
     }
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 92e5336..b24774b 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
@@ -47,6 +47,9 @@
                              @QueryParam("archiveId") String archiveId, @QueryParam("force") boolean force,
                              @QueryParam("prettyPrinter") boolean prettyPrinter) {
         Archive archive = ButlerCache.getInstance().getArchive(repoName, archiveId, force);
+        if (force) {
+            ButlerCache.getInstance().deleteCachedArchiveContent(repoName, archiveId);
+        }
         return JsonUtils.toJson(archive, prettyPrinter);
     }
 
diff --git a/borgbutler-webapp/src/components/views/archives/ArchiveView.jsx b/borgbutler-webapp/src/components/views/archives/ArchiveView.jsx
index dca627c..437a84c 100644
--- a/borgbutler-webapp/src/components/views/archives/ArchiveView.jsx
+++ b/borgbutler-webapp/src/components/views/archives/ArchiveView.jsx
@@ -1,5 +1,5 @@
 import React from 'react'
-import {CardBody, Nav, NavLink, TabContent, Table, TabPane} from 'reactstrap';
+import {Nav, NavLink, TabContent, Table, TabPane} from 'reactstrap';
 import {PageHeader} from '../../general/BootstrapComponents';
 import {getRestServiceUrl, humanFileSize, humanSeconds} from '../../../utilities/global';
 import ErrorAlert from '../../general/ErrorAlert';
@@ -7,26 +7,17 @@
 import classNames from 'classnames';
 import FileListPanel from './FileListPanel';
 import JobMonitorPanel from '../jobs/JobMonitorPanel';
+import {Link} from "react-router-dom";
+import ConfirmModal from '../../general/modal/ConfirmModal';
 
 class ArchiveView extends React.Component {
 
-    state = {
-        repoId: this.props.match.params.repoId,
-        archiveId: this.props.match.params.archiveId,
-        isFetching: false,
-        activeTab: '1'
-    };
-
     componentDidMount = () => {
         this.fetchArchive();
     };
 
 
     fetchArchive = (force) => {
-        let forceReload = false;
-        if (force && window.confirm('Are you sure you want to reload the archive info? This may take some time...')) {
-            forceReload = true;
-        }
         this.setState({
             isFetching: true,
             failed: false
@@ -34,7 +25,7 @@
         fetch(getRestServiceUrl('archives', {
             repo: this.state.repoId,
             archiveId: this.state.archiveId,
-            force: forceReload
+            force: force
         }), {
             method: 'GET',
             headers: {
@@ -57,13 +48,19 @@
         })
     };
 
+    toggleModal() {
+        this.setState({
+            confirmModal: !this.state.confirmModal
+        })
+    }
+
     render = () => {
         let content = undefined;
         let archive = this.state.archive;
         let pageHeader = '';
 
         if (this.state.isFetching) {
-            content = <JobMonitorPanel repo={this.state.repoId} />;
+            content = <JobMonitorPanel repo={this.state.repoId}/>;
         } else if (this.state.failed) {
             content = <ErrorAlert
                 title={'Cannot load Repositories'}
@@ -75,10 +72,10 @@
             />;
         } else if (this.state.archive) {
             pageHeader = <React.Fragment>
-                {archive.repoDisplayName}
+                <Link to={`/repoArchives/${this.state.repoId}`}> {archive.repoDisplayName}</Link> - {archive.name}
                 <div
                     className={'btn btn-outline-primary refresh-button-right'}
-                    onClick={this.fetchArchive.bind(this, true)}
+                    onClick={this.toggleModal}
                 >
                     <IconRefresh/>
                 </div>
@@ -183,6 +180,16 @@
                         </Table>
                     </TabPane>
                 </TabContent>
+                <ConfirmModal
+                    onConfirm={() => this.fetchArchive(true)}
+                    title={'Are you sure?'}
+                    toggle={this.toggleModal}
+                    open={this.state.confirmModal}
+                >
+                    Are you sure you want to reload the archive info and the file system list (if already cached)?
+                    <br/>
+                    This is a safe option but it may take some time to re-fill the caches (on demand) again.
+                </ConfirmModal>
             </React.Fragment>;
 
         }
@@ -197,7 +204,17 @@
     constructor(props) {
         super(props);
 
+        this.state = {
+            repoId: this.props.match.params.repoId,
+            archiveId: this.props.match.params.archiveId,
+            isFetching: false,
+            activeTab: '1',
+            confirmModal: false
+        };
+
+
         this.fetchArchive = this.fetchArchive.bind(this);
+        this.toggleModal = this.toggleModal.bind(this);
     }
 }
 

--
Gitblit v1.10.0