From a70359d36b926f497148abd065d1cc49efb94a0c Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Fri, 21 Feb 2020 12:33:01 -0600 Subject: [PATCH] #38: Enhance new repertory release available notification - partial --- .../NewReleases/NewRelease/NewRelease.js | 31 +++++++++++-- src/utils.js | 46 ++++++++++++++++++- 2 files changed, 72 insertions(+), 5 deletions(-) diff --git a/src/components/NewReleases/NewRelease/NewRelease.js b/src/components/NewReleases/NewRelease/NewRelease.js index a8b5de3..4aafd30 100644 --- a/src/components/NewReleases/NewRelease/NewRelease.js +++ b/src/components/NewReleases/NewRelease/NewRelease.js @@ -1,17 +1,40 @@ import React from 'react'; +import {connect} from 'react-redux'; import * as Constants from '../../../constants'; import Button from '../../UI/Button/Button'; +import {formatLinesForDisplay, getChangesForRepertoryVersion} from '../../../utils'; +import { + notifyError, + notifyInfo +} from '../../../redux/actions/error_actions'; + +const mapDispatchToProps = dispatch => { + return { + notifyError: msg => dispatch(notifyError(msg)), + notifyInfo: (title, msg) => dispatch(notifyInfo(title, msg)), + }; +}; + +export default connect(null, mapDispatchToProps)(({release, lastItem, notifyError, notifyInfo}) => { + const title = '[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display; + const displayChanges = async () => { + try { + const lines = await getChangesForRepertoryVersion(release.VersionString); + notifyInfo(title, formatLinesForDisplay(lines)); + } catch (e) { + notifyError(e); + } + }; -export default ({release, lastItem}) => { return (
-

{'[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display }

+

{title}

- +
@@ -25,4 +48,4 @@ export default ({release, lastItem}) => {
); -}; +}); diff --git a/src/utils.js b/src/utils.js index 47d29de..0c33989 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,6 +1,7 @@ import React from 'react'; import * as Constants from './constants'; import Modal from './components/UI/Modal/Modal'; +import axios from 'axios'; const ipcRenderer = (!process.versions.hasOwnProperty('electron') && window && window.require) ? window.require('electron').ipcRenderer : @@ -16,6 +17,47 @@ export const extractFileNameFromURL = url => { return parts[parts.length - 1]; }; +export const formatLinesForDisplay = lines => { + let msg = ''; + for (let i = 1; i < lines.length; i++) { + if (i > 1) { + msg += '\n'; + } + msg += (lines[i].replace(/(\\#)/gm, '#') + '\n'); + } + return msg; +}; + +export const getChangesForRepertoryVersion = version => { + return new Promise((resolve, reject) => { + const url = `https://bitbucket.org/blockstorage/repertory/raw/${version}/CHANGELOG.md`; + axios + .get(url, { + responseType: 'text', + }) + .then(response => { + try { + let found = false; + let ended = false; + let lines = response.data + .replace(/(\r\n)/gm, '\n') + .split('\n') + .filter(l => { + return !ended && (l.length > 0) && (found + ? !(ended = l.startsWith('## ')) + : (found = l.startsWith(`## ${version}`))); + }); + resolve(lines); + } catch (e) { + reject(e); + } + }) + .catch(error => { + reject(error); + }); + }); +}; + export const getIPCRenderer = () => { return ipcRenderer; }; @@ -37,15 +79,17 @@ export const getNewReleases = (existingReleases, newReleases) => { Display: version, Release: Constants.RELEASE_TYPES.indexOf(release), Version: newReleases[release].indexOf(version), + VersionString: version, }); }); }); } ret.push({ - Display: '1.1.1', + Display: '1.2.2-release', Release: 1, Version: 2, + VersionString: '1.2.2-release', }); return ret;