From d6663074e37a47b22e8e227c113ba010c038219f Mon Sep 17 00:00:00 2001 From: Franco Montenegro Date: Mon, 1 Feb 2021 19:59:34 -0300 Subject: [PATCH] Fetch and display last release changes from GitHub in modal upgrade & modal auto update downloaded --- static/app-strings.json | 2 +- ui/component/lastReleaseChanges/index.js | 3 + ui/component/lastReleaseChanges/view.jsx | 88 +++++++++++++++++++++ ui/modal/modalAutoUpdateDownloaded/view.jsx | 87 ++++++++------------ ui/modal/modalUpgrade/view.jsx | 19 +---- 5 files changed, 125 insertions(+), 74 deletions(-) create mode 100644 ui/component/lastReleaseChanges/index.js create mode 100644 ui/component/lastReleaseChanges/view.jsx diff --git a/static/app-strings.json b/static/app-strings.json index bbb73a59e..2bca68dff 100644 --- a/static/app-strings.json +++ b/static/app-strings.json @@ -214,7 +214,7 @@ "Skip": "Skip", "An updated version of LBRY is now available.": "An updated version of LBRY is now available.", "Your version is out of date and may be unreliable or insecure.": "Your version is out of date and may be unreliable or insecure.", - "A new version of LBRY is ready for you.": "A new version of LBRY is ready for you.", + "A new version %release_tag% of LBRY is ready for you.": "A new version %release_tag% of LBRY is ready for you.", "Want to know what has changed? See the %release_notes%.": "Want to know what has changed? See the %release_notes%.", "release notes": "release notes", "Read the FAQ": "Read the FAQ", diff --git a/ui/component/lastReleaseChanges/index.js b/ui/component/lastReleaseChanges/index.js new file mode 100644 index 000000000..2784fe4d6 --- /dev/null +++ b/ui/component/lastReleaseChanges/index.js @@ -0,0 +1,3 @@ +import LastReleaseChanges from './view'; + +export default LastReleaseChanges; diff --git a/ui/component/lastReleaseChanges/view.jsx b/ui/component/lastReleaseChanges/view.jsx new file mode 100644 index 000000000..82b99fbad --- /dev/null +++ b/ui/component/lastReleaseChanges/view.jsx @@ -0,0 +1,88 @@ +// @flow +import React, { useState, useEffect } from 'react'; +import remark from 'remark'; +import reactRenderer from 'remark-react'; +import Button from 'component/button'; +import I18nMessage from 'component/i18nMessage'; + +type Props = { + hideReleaseVersion?: boolean, +}; + +const LastReleaseChanges = (props: Props) => { + const { hideReleaseVersion } = props; + const [releaseTag, setReleaseTag] = useState(''); + const [releaseChanges, setReleaseChanges] = useState(''); + const [fetchingReleaseChanges, setFetchingReleaseChanges] = useState(false); + const [fetchReleaseFailed, setFetchReleaseFailed] = useState(false); + + const releaseVersionTitle = ( +

+ {!hideReleaseVersion && __('A new version %release_tag% of LBRY is ready for you.', { release_tag: releaseTag })} +

+ ); + const seeReleaseNotes = ( +

+ + ), + }} + > + Want to know what has changed? See the %release_notes%. + +

+ ); + + useEffect(() => { + const lastReleaseUrl = 'https://api.github.com/repos/lbryio/lbry-desktop/releases/latest'; + const options = { + method: 'GET', + headers: { Accept: 'application/vnd.github.v3+json' }, + }; + + setFetchingReleaseChanges(true); + fetch(lastReleaseUrl, options) + .then(response => response.json()) + .then(response => { + setReleaseTag(response.tag_name); + setReleaseChanges(response.body); + setFetchingReleaseChanges(false); + setFetchReleaseFailed(false); + }) + .catch(() => { + setFetchingReleaseChanges(false); + setFetchReleaseFailed(true); + }); + }, []); + + if (fetchingReleaseChanges) { + return

{__('Loading...')}

; + } + + if (fetchReleaseFailed) { + return ( +
+ {releaseVersionTitle} + {seeReleaseNotes} +
+ ); + } + + return ( +
+ {releaseVersionTitle} +

+ { + remark() + .use(reactRenderer) + .processSync(releaseChanges).contents + } +

+ {seeReleaseNotes} +
+ ); +}; + +export default LastReleaseChanges; diff --git a/ui/modal/modalAutoUpdateDownloaded/view.jsx b/ui/modal/modalAutoUpdateDownloaded/view.jsx index 6f3cddfb8..aecb049b4 100644 --- a/ui/modal/modalAutoUpdateDownloaded/view.jsx +++ b/ui/modal/modalAutoUpdateDownloaded/view.jsx @@ -1,70 +1,45 @@ // @flow -import React from 'react'; +import React, { useState } from 'react'; // @if TARGET='app' import { ipcRenderer } from 'electron'; // @endif import { Modal } from 'modal/modal'; -import Button from 'component/button'; -import I18nMessage from 'component/i18nMessage'; +import LastReleaseChanges from 'component/lastReleaseChanges'; type Props = { closeModal: any => any, declineAutoUpdate: () => any, }; -type State = { - disabled: boolean, +const ModalAutoUpdateDownloaded = (props: Props) => { + const { closeModal, declineAutoUpdate } = props; + const [disabled, setDisabled] = useState(false); + + const handleConfirm = () => { + setDisabled(true); + ipcRenderer.send('autoUpdateAccepted'); + }; + + const handleAbort = () => { + declineAutoUpdate(); + closeModal(); + }; + + return ( + + + + ); }; -class ModalAutoUpdateDownloaded extends React.PureComponent { - constructor(props: Props) { - super(props); - - this.state = { - disabled: false, - }; - } - - render() { - const { closeModal, declineAutoUpdate } = this.props; - - return ( - { - this.setState({ disabled: true }); - ipcRenderer.send('autoUpdateAccepted'); - }} - onAborted={() => { - declineAutoUpdate(); - closeModal(); - }} - > -

{__('A new version of LBRY is ready for you.')}

-

- - ), - }} - > - Want to know what has changed? See the %release_notes%. - -

-
- ); - } -} - export default ModalAutoUpdateDownloaded; diff --git a/ui/modal/modalUpgrade/view.jsx b/ui/modal/modalUpgrade/view.jsx index 93de3670c..0d2a4bd7e 100644 --- a/ui/modal/modalUpgrade/view.jsx +++ b/ui/modal/modalUpgrade/view.jsx @@ -1,8 +1,7 @@ // @flow import React from 'react'; import { Modal } from 'modal/modal'; -import Button from 'component/button'; -import I18nMessage from 'component/i18nMessage'; +import LastReleaseChanges from 'component/lastReleaseChanges'; type Props = { downloadUpgrade: () => void, @@ -28,21 +27,7 @@ class ModalUpgrade extends React.PureComponent { {__('An updated version of LBRY is now available.')}{' '} {__('Your version is out of date and may be unreliable or insecure.')}

-

- - ), - }} - > - Want to know what has changed? See the %release_notes%. - -

+ ); }