import React, { Fragment } from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Box, Link, LinearProgress, Typography } from '@material-ui/core'; import { FormButton } from '../components'; import { withSnackbar, WithSnackbarProps } from 'notistack'; export const VERSIONCHECK_ENDPOINT = 'https://api.github.com/repos/emsesp/EMS-ESP32/releases/latest'; export const VERSIONCHECK_DEV_ENDPOINT = 'https://api.github.com/repos/emsesp/EMS-ESP32/releases/tags/latest'; export const uploadURL = window.location.origin + '/system/upload'; interface VersionCheckProps extends WithSnackbarProps { currentVersion: string; onClose: () => void; } interface VersionCheckState { latestVersion?: string; latestVersionUrl?: string; latestVersionChangelog?: string; latestDevVersion?: string; latestDevVersionUrl?: string; latestDevVersionChangelog?: string; } class VersionCheck extends React.Component< VersionCheckProps, VersionCheckState > { state: VersionCheckState = {}; componentDidMount() { fetch(VERSIONCHECK_ENDPOINT) .then((response) => { if (response.status === 200) { return response.json(); } else { throw Error( 'Unable to get version information. Check internet connection. (' + response.status + ')' ); } }) .then((data) => { this.setState({ latestVersion: data.name, latestVersionUrl: data.assets[1].browser_download_url, latestVersionChangelog: data.html_url }); }) .catch((error) => { this.props.enqueueSnackbar( error.message || 'Problem getting response', { variant: 'error' } ); this.setState({ latestVersion: undefined }); this.props.onClose(); }); fetch(VERSIONCHECK_DEV_ENDPOINT) .then((response) => { if (response.status === 200) { return response.json(); } else { throw Error( 'Unable to get version information. Check internet connection. (' + response.status + ')' ); } }) .then((data) => { this.setState({ latestDevVersion: data.name.split(/\s+/).splice(-1), latestDevVersionUrl: data.assets[1].browser_download_url, latestDevVersionChangelog: data.assets[0].browser_download_url }); }) .catch((error) => { this.props.enqueueSnackbar( error.message || 'Problem getting response', { variant: 'error' } ); this.setState({ latestDevVersion: undefined }); this.props.onClose(); }); } render() { const { onClose, currentVersion } = this.props; const { latestVersion, latestVersionUrl, latestDevVersion, latestDevVersionUrl, latestVersionChangelog, latestDevVersionChangelog } = this.state; return ( Firmware Update Check {latestVersion ? ( You are currently running EMS-ESP version{' '} v{currentVersion} The latest stable version is {latestVersion}  ( {'release notes'} ) ( {'download'} ) The latest development version is  {latestDevVersion}  ( {'release notes'} ) ( {'download'} ) Use  {'UPLOAD FIRMWARE'}  to install any new firmware versions. ) : ( Fetching version details… )} Close ); } } export default withSnackbar(VersionCheck);