diff --git a/app/Helpers/UpdateHelper.php b/app/Helpers/UpdateHelper.php index 3b24a160..beadbc87 100644 --- a/app/Helpers/UpdateHelper.php +++ b/app/Helpers/UpdateHelper.php @@ -17,7 +17,15 @@ class UpdateHelper { return false; } - return ((bool)(version_compare($current, $gitVersion['version']))) ? $gitVersion['version'] : false; + if((bool)(version_compare($current, $gitVersion['version']))) { + $changelog = UpdateHelper::getChangelog(); + return [ + 'version' => $gitVersion['version'], + 'changelog' => $changelog[$gitVersion['version']], + ]; + } else { + return false; + } } public static function checkLatestVersion() @@ -26,12 +34,13 @@ class UpdateHelper { $repo = config('speedtest.repo'); $branch = config('speedtest.branch'); - $url = 'https://raw.githubusercontent.com/'.$user - .'/' - .$repo - .'/' - .$branch - .'/config/speedtest.php'; + $url = 'https://raw.githubusercontent.com/' + .$user + .'/' + .$repo + .'/' + .$branch + .'/config/speedtest.php'; try { $gitFile = file_get_contents($url); @@ -50,4 +59,27 @@ class UpdateHelper { 'version' => $version, ]; } + + public static function getChangelog() + { + $user = config('speedtest.user'); + $repo = config('speedtest.repo'); + $branch = config('speedtest.branch'); + + $url = 'https://raw.githubusercontent.com/' + .$user + .'/' + .$repo + .'/' + .$branch + .'/changelog.json'; + + try { + $changelog = json_decode(file_get_contents($url), true); + } catch(Exception $e) { + $changelog = []; + } + + return $changelog; + } } diff --git a/changelog.json b/changelog.json index 404b5ca2..4931325b 100644 --- a/changelog.json +++ b/changelog.json @@ -5,7 +5,7 @@ "link": "" }, { - "description": "Added an backup/restore function", + "description": "Added a backup/restore function", "link": "" } ] diff --git a/resources/js/components/Home/Footer.js b/resources/js/components/Home/Footer.js index c37d05d6..19592489 100644 --- a/resources/js/components/Home/Footer.js +++ b/resources/js/components/Home/Footer.js @@ -2,24 +2,15 @@ import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import { Container, Row } from 'react-bootstrap'; import { Col } from 'react-bootstrap'; +import Version from './Version'; export default class Footer extends Component { - constructor(props) { - super(props) - - this.state = { - version: document.querySelector('meta[name="version"]').content - }; - } - render() { - var version = this.state.version; - return ( -

Speedtest Tracker Version: {version}

+

See the code on GitHub

diff --git a/resources/js/components/Home/Version.js b/resources/js/components/Home/Version.js new file mode 100644 index 00000000..b7f982c8 --- /dev/null +++ b/resources/js/components/Home/Version.js @@ -0,0 +1,97 @@ +import React, { Component } from 'react'; +import ReactDOM from 'react-dom'; +import Axios from 'axios'; +import { toast } from 'react-toastify'; +import { Modal } from 'react-bootstrap'; + +export default class Version extends Component { + constructor(props) { + super(props) + + this.state = { + version: document.querySelector('meta[name="version"]').content, + update: false, + modalShow: false, + changelog: [], + }; + } + + componentDidMount() { + this.checkForUpdates(); + } + + checkForUpdates = () => { + var url = '/api/update/check'; + + Axios.get(url) + .then((resp) => { + var update = resp.data.update; + if(update !== false) { + toast.info('A new version of Speedtest Tracker is available (v' + update.version + '). Go to the bottom of the page to update.'); + this.setState({ + update: update.version, + changelog: update.changelog, + }); + } + }) + .catch((err) => { + console.log(err); + }); + } + + showModal = () => { + this.setState({ + modalShow: true + }); + } + + hideModal = () => { + this.setState({ + modalShow: false + }); + } + + render() { + var version = this.state.version; + var update = this.state.update; + var modalShow = this.state.modalShow; + var changelog = this.state.changelog; + + if(update === false) { + return ( +

Speedtest Tracker Version: {version}

+ ); + } else { + return ( +
+

Speedtest Tracker Version: {version} -

+ New version available - v{update} + + + + Update to v{update} + + +
Changelog:
+
    + {changelog.map((e, i) => { + if(e.link == '') { + return ( +
  • {e.description}
  • + ); + } else { +
  • {e.description}
  • + } + })} +
+
+
+
+ ); + } + } +} + +if (document.getElementById('Version')) { + ReactDOM.render(, document.getElementById('Version')); +}