From e7689a1e7108780fdd93dd018fc5b211fd040cdf Mon Sep 17 00:00:00 2001
From: Markus Scheidgen <markus.scheidgen@gmail.com>
Date: Thu, 4 Jul 2019 14:06:58 +0200
Subject: [PATCH] Implemented hard reload on GUI version change #168.

---
 gui/.gitignore              |  1 +
 gui/generateBuildVersion.js | 19 +++++++++++++++++++
 gui/package.json            |  2 ++
 gui/src/components/App.js   | 15 +++++++++++++++
 4 files changed, 37 insertions(+)
 create mode 100644 gui/generateBuildVersion.js

diff --git a/gui/.gitignore b/gui/.gitignore
index 934d6a8981..dfa47e4841 100644
--- a/gui/.gitignore
+++ b/gui/.gitignore
@@ -11,6 +11,7 @@
 
 # generated
 public/metainfo/
+public/meta.json
 
 # misc
 .DS_Store
diff --git a/gui/generateBuildVersion.js b/gui/generateBuildVersion.js
new file mode 100644
index 0000000000..8a5482b958
--- /dev/null
+++ b/gui/generateBuildVersion.js
@@ -0,0 +1,19 @@
+const fs = require('fs')
+const packageJson = require('./package.json')
+
+const appVersion = packageJson.version
+
+const jsonData = {
+  version: appVersion
+}
+
+var jsonContent = JSON.stringify(jsonData)
+
+fs.writeFile('./public/meta.json', jsonContent, 'utf8', function(err) {
+  if (err) {
+    console.log('An error occured while writing JSON Object to meta.json')
+    return console.log(err)
+  }
+
+  console.log('meta.json file has been saved with latest version number')
+})
diff --git a/gui/package.json b/gui/package.json
index 72bfb37240..34f88cf59d 100644
--- a/gui/package.json
+++ b/gui/package.json
@@ -37,6 +37,8 @@
     "url-parse": "^1.4.3"
   },
   "scripts": {
+    "generate-build-version": "node generateBuildVersion",
+    "prebuild": "npm run generate-build-version",
     "start": "react-scripts start",
     "build": "react-scripts build",
     "test": "react-scripts test --env=jsdom",
diff --git a/gui/src/components/App.js b/gui/src/components/App.js
index 77ed919246..e8508f1a2a 100644
--- a/gui/src/components/App.js
+++ b/gui/src/components/App.js
@@ -26,6 +26,7 @@ import LoginLogout from './LoginLogout'
 import { genTheme, repoTheme, archiveTheme } from '../config'
 import { DomainProvider } from './domains'
 import MetaInfoBrowser from './metaInfoBrowser/MetaInfoBrowser'
+import packageJson from '../../package.json'
 
 const drawerWidth = 200
 
@@ -155,6 +156,20 @@ class NavigationUnstyled extends React.Component {
     this.handleDrawerClose = this.handleDrawerClose.bind(this)
   }
 
+  componentDidMount() {
+    fetch('/meta.json')
+      .then((response) => response.json())
+      .then((meta) => {
+        if (meta.version !== packageJson.version) {
+          console.log('Different version, hard reloading...')
+          window.location.reload(true)
+        }
+      })
+      .catch(() => {
+        console.log('Could not validate version, continue...')
+      })
+  }
+
   handleDrawerOpen() {
     this.setState({ open: true })
   }
-- 
GitLab