Finished UI for updater

This commit is contained in:
Henry Whitaker
2020-04-10 18:45:15 +01:00
parent d276cb7383
commit 7b43187c8d
6 changed files with 116 additions and 16 deletions

View File

@@ -146,6 +146,7 @@ class UpdateHelper {
$this->deleteExcluded($dir);
$this->backupCurrent();
$this->moveFiles();
$this->clearup();
Log::info('Successfully applied update');
}
@@ -282,4 +283,15 @@ class UpdateHelper {
}
}
}
private function clearup()
{
try {
File::deleteDirectory('/tmp/'.$this->repo.'-update/');
Log::info('Deleted download directory');
} catch(Exception $e) {
Log::error('Failed cleaning up update');
Log::error($e);
}
}
}

View File

@@ -53,16 +53,9 @@ class UpdateController extends Controller
{
$cp = Updater::updateFiles();
if($cp) {
return response()->json([
'method' => 'copy latest version',
'success' => $cp,
], 200);
} else {
return response()->json([
'method' => 'copy latest version',
'success' => false,
], 500);
}
return response()->json([
'method' => 'copy latest version',
'success' => $cp,
], 200);
}
}

View File

@@ -1,7 +1,7 @@
{
"1.2.0": [
{
"description": "Added an updating mechainism within the app.",
"description": "Added an updating mechainism within the app to keep code up to date.",
"link": ""
}
],

View File

@@ -7,7 +7,7 @@ return [
|--------------------------------------------------------------------------
*/
'version' => '1.1.0',
'version' => '1.2.0',
/*
|--------------------------------------------------------------------------

50
public/js/app.js vendored
View File

@@ -127865,6 +127865,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
var Version = /*#__PURE__*/function (_Component) {
_inherits(Version, _Component);
@@ -127907,11 +127908,48 @@ var Version = /*#__PURE__*/function (_Component) {
});
});
_defineProperty(_assertThisInitialized(_this), "updateApp", function () {
_this.setState({
showProgress: true,
updateProgress: 0
});
react_toastify__WEBPACK_IMPORTED_MODULE_3__["toast"].info('Downloading update');
axios__WEBPACK_IMPORTED_MODULE_2___default.a.get('/api/update/download').then(function (resp) {
_this.setState({
updateProgress: 50
});
react_toastify__WEBPACK_IMPORTED_MODULE_3__["toast"].info('Extracting update');
axios__WEBPACK_IMPORTED_MODULE_2___default.a.get('/api/speedtest/extract').then(function (resp) {
_this.setState({
updateProgress: 75
});
react_toastify__WEBPACK_IMPORTED_MODULE_3__["toast"].info('Applying update');
axios__WEBPACK_IMPORTED_MODULE_2___default.a.get('/api/update/move').then(function (resp) {
_this.setState({
updateProgress: 100
});
react_toastify__WEBPACK_IMPORTED_MODULE_3__["toast"].success('Update successful. Refreshing your page...');
setTimeout(function () {
location.reload(true);
}, 5000);
});
});
})["catch"](function (err) {
react_toastify__WEBPACK_IMPORTED_MODULE_3__["toast"].error('Something went wrong...');
});
});
_this.state = {
version: document.querySelector('meta[name="version"]').content,
update: false,
modalShow: false,
changelog: []
changelog: [],
showProgress: false,
updateProgress: 0
};
return _this;
}
@@ -127928,6 +127966,8 @@ var Version = /*#__PURE__*/function (_Component) {
var update = this.state.update;
var modalShow = this.state.modalShow;
var changelog = this.state.changelog;
var showProgress = this.state.showProgress;
var updateProgress = this.state.updateProgress;
if (update === false) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
@@ -127961,7 +128001,13 @@ var Version = /*#__PURE__*/function (_Component) {
rel: "noopener noreferer"
}, e.description));
}
})))));
})), showProgress && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, "Update progress:"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_bootstrap__WEBPACK_IMPORTED_MODULE_4__["ProgressBar"], {
animated: true,
now: updateProgress
})), !showProgress && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_bootstrap__WEBPACK_IMPORTED_MODULE_4__["Button"], {
variant: "primary",
onClick: this.updateApp
}, "Update"))));
}
}
}]);

View File

@@ -2,7 +2,8 @@ import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import Axios from 'axios';
import { toast } from 'react-toastify';
import { Modal } from 'react-bootstrap';
import { Modal, ProgressBar } from 'react-bootstrap';
import { Button } from 'react-bootstrap';
export default class Version extends Component {
constructor(props) {
@@ -13,6 +14,8 @@ export default class Version extends Component {
update: false,
modalShow: false,
changelog: [],
showProgress: false,
updateProgress: 0,
};
}
@@ -51,11 +54,48 @@ export default class Version extends Component {
});
}
updateApp = () => {
this.setState({
showProgress: true,
updateProgress: 0,
});
toast.info('Downloading update');
Axios.get('/api/update/download')
.then((resp) => {
this.setState({
updateProgress: 50,
});
toast.info('Extracting update');
Axios.get('/api/speedtest/extract')
.then((resp) => {
this.setState({
updateProgress: 75,
});
toast.info('Applying update');
Axios.get('/api/update/move')
.then((resp) => {
this.setState({
updateProgress: 100,
});
toast.success('Update successful. Refreshing your page...');
setTimeout(function() {
location.reload(true);
}, 5000);
})
})
})
.catch((err) => {
toast.error('Something went wrong...');
})
}
render() {
var version = this.state.version;
var update = this.state.update;
var modalShow = this.state.modalShow;
var changelog = this.state.changelog;
var showProgress = this.state.showProgress;
var updateProgress = this.state.updateProgress;
if(update === false) {
return (
@@ -84,6 +124,15 @@ export default class Version extends Component {
}
})}
</ul>
{showProgress &&
<div>
<p>Update progress:</p>
<ProgressBar animated now={updateProgress} />
</div>
}
{!showProgress &&
<Button variant="primary" onClick={this.updateApp}>Update</Button>
}
</Modal.Body>
</Modal>
</div>