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%.
-
-
+
);
}