From ff2c9bf56c4d781c569794c05e720e14b3833475 Mon Sep 17 00:00:00 2001 From: bluerabbit001 Date: Fri, 1 Oct 2021 13:00:57 -0700 Subject: [PATCH 1/7] Implement Download Progress --- ui/component/downloadProgress/index.js | 16 ++ ui/component/downloadProgress/view.jsx | 200 ++++++++++++++++++++++ ui/component/page/view.jsx | 2 + ui/redux/actions/content.js | 25 ++- ui/scss/all.scss | 2 +- ui/scss/component/_download-progress.scss | 160 +++++++++++++++++ web/scss/odysee.scss | 1 + 7 files changed, 403 insertions(+), 3 deletions(-) create mode 100755 ui/component/downloadProgress/index.js create mode 100644 ui/component/downloadProgress/view.jsx create mode 100644 ui/scss/component/_download-progress.scss diff --git a/ui/component/downloadProgress/index.js b/ui/component/downloadProgress/index.js new file mode 100755 index 000000000..bd08a8942 --- /dev/null +++ b/ui/component/downloadProgress/index.js @@ -0,0 +1,16 @@ +import { connect } from 'react-redux'; +import DownloadProgress from './view'; +import { doSetPlayingUri, doStopDownload } from 'redux/actions/content'; +const select = (state) => { + // console.log('DownloadProgress select state', state.fileInfo); + + return { + downloadList: state.fileInfo.byOutpoint, + }; +}; + +const perform = (dispatch) => ({ + pause: () => dispatch(doSetPlayingUri({ uri: null })), + stopDownload: (outpoint, sd_hash) => dispatch(doStopDownload(outpoint, sd_hash)), +}); +export default connect(select, perform)(DownloadProgress); diff --git a/ui/component/downloadProgress/view.jsx b/ui/component/downloadProgress/view.jsx new file mode 100644 index 000000000..8be744532 --- /dev/null +++ b/ui/component/downloadProgress/view.jsx @@ -0,0 +1,200 @@ +// @flow +import React, { useState } from 'react'; +import { shell } from 'electron'; +import Icon from 'component/common/icon'; +import * as ICONS from 'constants/icons'; + +type Props = { + downloadList: any, + stopDownload: (outpoint: string, sd_hash: string) => void, +}; + +function DownloadProgress(props: Props) { + const [isShow, setIsShow] = useState(true); + const [cancelHash] = useState({}); + + const handleCancel = (hash, value) => { + cancelHash[hash] = value; + }; + // return ( + //
+ // + // + //
+ // ); + + // console.log('DownloadProgress', props.downloadList); + if (!props.downloadList) return null; + + const downloadList = []; + Object.keys(props.downloadList).map((key) => { + const item = props.downloadList[key]; + if (item.status === 'running') downloadList.push(item); + }); + + if (downloadList.length === 0) return null; + + if (!isShow) { + return ( + + ); + } + + return ( +
+ + + {downloadList.map((item, index) => { + let releaseTime = ''; + if (item.metadata && item.metadata.release_time) { + releaseTime = new Date(parseInt(item.metadata.release_time) * 1000).toISOString().split('T')[0]; + } + return ( + <> + {index !== 0 &&
} + + + ); + })} +
+ ); +} + +type DownloadStateProps = { + fileName: string, + writtenBytes: number, + totalBytes: number, + addedOn: number, + title: string, + releaseTime: string, + directory: string, + outpoint: string, + sd_hash: string, + isCancel: boolean, + stopDownload: (outpoint: string, sd_hash: string) => void, + handleCancel: (hash: string, value: boolean) => void, +}; + +function DownloadState({ + fileName, + writtenBytes, + totalBytes, + addedOn, + title, + releaseTime, + directory, + outpoint, + sd_hash, + isCancel, + stopDownload, + handleCancel, +}: DownloadStateProps) { + const processStopDownload = () => { + handleCancel(sd_hash, false); + stopDownload(outpoint, sd_hash); + }; + + const percent = ((writtenBytes / totalBytes) * 100).toFixed(0); + + const sizeTypeText = ['Bytes', 'KB', 'MB', 'GB']; + const getSizeType = (size) => Math.floor(Math.log(size) / Math.log(1024)); + const convertSizeUnit = (size, sizeType) => { + const unitSize = size / Math.pow(1024, sizeType); + if (unitSize > 100) return unitSize.toFixed(0); + if (unitSize > 10) return unitSize.toFixed(1); + return unitSize.toFixed(2); + }; + const openDownloadFolder = () => { + shell.openPath(directory); + }; + + let text = ''; + + const downloadSpeed = Math.ceil(writtenBytes / (Date.now() / 1000 - addedOn)); + const remainingSecond = Math.ceil((totalBytes - writtenBytes) / downloadSpeed); + const remainingMinutes = Math.floor(remainingSecond / 60); + + if (remainingMinutes > 0) text += `${remainingMinutes} minutes `; + + text += `${remainingSecond - 60 * remainingMinutes} seconds remaining`; + text += ' -- '; + + let sizeType = getSizeType(totalBytes); + text += ` ${convertSizeUnit(writtenBytes, sizeType)} of ${convertSizeUnit(totalBytes, sizeType)} ${ + sizeTypeText[sizeType] + }`; + + sizeType = getSizeType(downloadSpeed); + text += ` (${convertSizeUnit(downloadSpeed, sizeType)} ${sizeTypeText[sizeType]}/sec)`; + + return ( +
+
+

{title}

+
{ + handleCancel(sd_hash, true); + }} + > + × +
+
+
+ + {fileName} + +

{releaseTime}

+
+ +
+
+
+
+
+ +

{text}

+ {isCancel && ( +
+

Do you cancel download this file?

+
+ + +
+
+ )} +
+ ); +} + +export default DownloadProgress; diff --git a/ui/component/page/view.jsx b/ui/component/page/view.jsx index 6d288c3bc..af92be6dc 100644 --- a/ui/component/page/view.jsx +++ b/ui/component/page/view.jsx @@ -6,6 +6,7 @@ import { lazyImport } from 'util/lazyImport'; import SideNavigation from 'component/sideNavigation'; import SettingsSideNavigation from 'component/settingsSideNavigation'; import Header from 'component/header'; +import DownloadProgress from '../downloadProgress'; /* @if TARGET='app' */ import StatusBar from 'component/common/status-bar'; /* @endif */ @@ -150,6 +151,7 @@ function Page(props: Props) { )} {/* @endif */} + ); } diff --git a/ui/redux/actions/content.js b/ui/redux/actions/content.js index 7e76e3962..2cd6b8f12 100644 --- a/ui/redux/actions/content.js +++ b/ui/redux/actions/content.js @@ -23,22 +23,24 @@ import { makeSelectCostInfoForUri, Lbryio } from 'lbryinc'; import { makeSelectClientSetting, selectosNotificationsEnabled, selectDaemonSettings } from 'redux/selectors/settings'; const DOWNLOAD_POLL_INTERVAL = 1000; +var timeOutHash = {}; export function doUpdateLoadStatus(uri: string, outpoint: string) { // Updates the loading status for a uri as it's downloading // Calls file_list and checks the written_bytes value to see if the number has increased // Not needed on web as users aren't actually downloading the file // @if TARGET='app' + return (dispatch: Dispatch, getState: GetState) => { const setNextStatusUpdate = () => - setTimeout(() => { + (timeOutHash[outpoint] = setTimeout(() => { // We need to check if outpoint still exists first because user are able to delete file (outpoint) while downloading. // If a file is already deleted, no point to still try update load status const byOutpoint = selectFileInfosByOutpoint(getState()); if (byOutpoint[outpoint]) { dispatch(doUpdateLoadStatus(uri, outpoint)); } - }, DOWNLOAD_POLL_INTERVAL); + }, DOWNLOAD_POLL_INTERVAL)); Lbry.file_list({ outpoint, @@ -98,6 +100,25 @@ export function doUpdateLoadStatus(uri: string, outpoint: string) { // @endif } +export function doStopDownload(outpoint: string, sd_hash: string) { + return (dispatch: Dispatch) => { + if (timeOutHash[outpoint]) { + clearInterval(timeOutHash[outpoint]); + timeOutHash[outpoint] = undefined; + } + Lbry.file_delete({ + sd_hash, + }); + + dispatch({ + type: ACTIONS.FILE_DELETE, + data: { + outpoint, + }, + }); + }; +} + export function doSetPrimaryUri(uri: ?string) { return (dispatch: Dispatch) => { dispatch({ diff --git a/ui/scss/all.scss b/ui/scss/all.scss index 70e7aa195..be400bea6 100644 --- a/ui/scss/all.scss +++ b/ui/scss/all.scss @@ -67,4 +67,4 @@ @import 'component/empty'; @import 'component/stripe-card'; @import 'component/wallet-tip-send'; - +@import 'component/download-progress'; diff --git a/ui/scss/component/_download-progress.scss b/ui/scss/component/_download-progress.scss new file mode 100644 index 000000000..ea766f910 --- /dev/null +++ b/ui/scss/component/_download-progress.scss @@ -0,0 +1,160 @@ +.download--header { + padding: 15px; + position: fixed; + bottom: 0; + right: 0; + width: 400px; + display: flex; + flex-direction: column; + background-color: #f2f2f2; + border-radius: 10px; + border: 1px solid #c5c4c3; +} +.download--top-close-button { + position: absolute; + top: 7px; + right: 15px; + font-size: 35px; + background-color: transparent; + width: 15px; + height: 15px; + div { + height: 2px; + width: 13px; + background-color: #979696; + border-radius: 3px; + } +} +.download--state-container { + margin-top: 10px; + padding-bottom: 10px; + display: flex; + flex-direction: column; + width: 100%; +} +.download--file-name { + margin: 0; + font-weight: 800; + font-size: 13px; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin-right: 10px; +} +.download--file-name-link { + margin: 0; + font-weight: 800; + font-size: 13px; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin-right: 10px; + text-decoration: underline; + cursor: pointer; +} +.download--release-Time { + margin: 0; + font-weight: 800; + font-size: 12px; + margin-left: auto; + font-style: italic; + color: blue; +} +.download--state-bar { + display: flex; + flex-direction: row; + width: 100%; + align-items: center; + margin-bottom: 2px; +} +.download--bar-container { + width: 100%; + background-color: gray; + height: 6px; + border-radius: 10px; +} +.download--bar-content { + border-radius: 10px; + height: 100%; + background-color: #ff9933; +} +.download--close-button { + flex-shrink: 0; + margin-left: auto; + font-size: 20px; + cursor: pointer; +} +.download-count-time { + font-size: 11px; + color: gray; +} +.download--divider { + border-top: 1px solid #bbb; + margin-left: -15px; + width: 110%; +} +.download-cancel { + margin-top: 7px; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; +} +.download-cancel p { + margin: 0; + color: black; + font-size: 12px; + margin: 0; + white-space: nowrap; + width: 285px; + overflow: hidden; + text-overflow: ellipsis; +} +.download-cancel b { + font-size: 13px; +} +.download-cancel-confirm { + width: 90px; + display: flex; + justify-content: space-around; + align-items: center; +} +.download-cancel-ok { + border: none; + color: blue; + background-color: transparent; + font-size: 14px; +} +.download-cancel-ok:hover { + color: #1ca5d2; +} +.download__container { + position: fixed; + bottom: 10px; + right: 10px; + width: 400px; + height: 300px; + border-radius: 10px; + box-shadow: 2px 2px 5px grey; + background-color: white; + transition: width 2s; +} +.download__toggle-button { + position: fixed; + bottom: 10px; + right: 10px; + border: none; + background: white; + color: #4f4f4fbf; + width: 60px; + height: 60px; + border-radius: 30px; + box-shadow: 2px 2px 4px grey; +} +.download_close_modal { + float: right; + margin-right: 10px; + font-size: 25px; +} diff --git a/web/scss/odysee.scss b/web/scss/odysee.scss index fe9b4f2ed..f005f13f3 100644 --- a/web/scss/odysee.scss +++ b/web/scss/odysee.scss @@ -68,3 +68,4 @@ @import '../../ui/scss/component/empty'; @import '../../ui/scss/component/stripe-card'; @import '../../ui/scss/component/wallet-tip-send'; +@import '../../ui/scss/component/download-progress'; -- 2.45.3 From 3ec129b037b9c20a30c0c81ef1601dbfa179e35c Mon Sep 17 00:00:00 2001 From: bluerabbit001 Date: Fri, 1 Oct 2021 13:49:19 -0700 Subject: [PATCH 2/7] Implement Download Progress --- ui/component/claimMenuList/view.jsx | 18 ++++++++++++++++++ ui/component/downloadProgress/view.jsx | 12 +++++++++--- ui/scss/component/_download-progress.scss | 9 ++++----- ui/scss/component/menu-button.scss | 5 +++++ ui/scss/init/_base-theme.scss | 1 + 5 files changed, 37 insertions(+), 8 deletions(-) diff --git a/ui/component/claimMenuList/view.jsx b/ui/component/claimMenuList/view.jsx index 3d9b95d0b..8b75127e7 100644 --- a/ui/component/claimMenuList/view.jsx +++ b/ui/component/claimMenuList/view.jsx @@ -263,6 +263,10 @@ function ClaimMenuList(props: Props) { push(`/$/${PAGES.REPORT_CONTENT}?claimId=${contentClaim && contentClaim.claim_id}`); } + function handleDownload() { + console.log('handleDownload', fileInfo, props); + } + const shouldShow = !IS_WEB || (IS_WEB && isAuthenticated); return ( @@ -467,6 +471,20 @@ function ClaimMenuList(props: Props) {
)} + {/*
+ +
+ + {__('Download')} +
+
+ + console.log('download')}> +
+ + {__('Downloading')} +
+
*/} ); diff --git a/ui/component/downloadProgress/view.jsx b/ui/component/downloadProgress/view.jsx index 8be744532..324908941 100644 --- a/ui/component/downloadProgress/view.jsx +++ b/ui/component/downloadProgress/view.jsx @@ -28,6 +28,12 @@ function DownloadProgress(props: Props) { // writtenBytes={100000} // totalBytes={500000} // addedOn={1632388934} + // directory={''} + // stopDownload={props.stopDownload} + // outpoint={'asdfasdfsa'} + // sd_hash={'asdfsadfsadfsd'} + // isCancel + // handleCancel={handleCancel} // /> // // ); @@ -63,7 +69,7 @@ function DownloadProgress(props: Props) { releaseTime = new Date(parseInt(item.metadata.release_time) * 1000).toISOString().split('T')[0]; } return ( - <> +
{index !== 0 &&
} - +
); })} @@ -182,7 +188,7 @@ function DownloadState({

{text}

{isCancel && (
-

Do you cancel download this file?

+

Do you want to cancel download this file?

)} - {/*
- -
- - {__('Download')} -
-
- - console.log('download')}> -
- - {__('Downloading')} -
-
*/} ); diff --git a/ui/component/viewers/videoViewer/view.jsx b/ui/component/viewers/videoViewer/view.jsx index 5619065f9..fc2c9e8e2 100644 --- a/ui/component/viewers/videoViewer/view.jsx +++ b/ui/component/viewers/videoViewer/view.jsx @@ -178,7 +178,15 @@ function VideoViewer(props: Props) { fetch(source, { method: 'HEAD', cache: 'no-store' }).then((response) => { let playerPoweredBy = response.headers.get('x-powered-by') || ''; - analytics.videoStartEvent(claimId, timeToStart, playerPoweredBy, userId, claim.canonical_url, this, bitrateAsBitsPerSecond); + analytics.videoStartEvent( + claimId, + timeToStart, + playerPoweredBy, + userId, + claim.canonical_url, + this, + bitrateAsBitsPerSecond + ); }); doAnalyticsView(uri, timeToStart).then(() => { diff --git a/ui/redux/actions/content.js b/ui/redux/actions/content.js index f19109360..19396c09e 100644 --- a/ui/redux/actions/content.js +++ b/ui/redux/actions/content.js @@ -5,7 +5,6 @@ import * as MODALS from 'constants/modal_types'; import { ipcRenderer } from 'electron'; // @endif import { doOpenModal } from 'redux/actions/app'; -import { doDeleteFile } from 'redux/actions/file'; import { Lbry, SETTINGS, @@ -19,7 +18,7 @@ import { doToast, makeSelectUrlsForCollectionId, } from 'lbry-redux'; -import { doPurchaseUri } from 'redux/actions/file'; +import { doPurchaseUri, doDeleteFile } from 'redux/actions/file'; import { makeSelectCostInfoForUri, Lbryio } from 'lbryinc'; import { makeSelectClientSetting, selectosNotificationsEnabled, selectDaemonSettings } from 'redux/selectors/settings'; diff --git a/ui/scss/component/_download-progress.scss b/ui/scss/component/_download-progress.scss index 192a5275d..1bea0e01a 100644 --- a/ui/scss/component/_download-progress.scss +++ b/ui/scss/component/_download-progress.scss @@ -9,6 +9,7 @@ background-color: var(--color-header-background); //var(--color-gray-9):dark-mode border-radius: 10px; border: 1px solid var(--color-gray-3); + z-index: 9999; } .download-progress__top-close-button { position: absolute; diff --git a/ui/scss/component/menu-button.scss b/ui/scss/component/menu-button.scss index 895e33dec..ef1a3bf83 100644 --- a/ui/scss/component/menu-button.scss +++ b/ui/scss/component/menu-button.scss @@ -120,6 +120,7 @@ text-overflow: ellipsis; overflow-x: hidden; } + .menu__link-disable { @extend .menu__link; color: var(--color-text-subtitle) !important; diff --git a/ui/scss/init/_base-theme.scss b/ui/scss/init/_base-theme.scss index f88ca8702..58ca7b7a5 100644 --- a/ui/scss/init/_base-theme.scss +++ b/ui/scss/init/_base-theme.scss @@ -49,7 +49,6 @@ --color-text-selection: var(--color-secondary); --color-text-empty: #999999; --color-text-help: #999999; - --color-text-subtitle: #767676; --color-text-warning: #212529; --color-help-warning-bg: #fef3c7; diff --git a/ui/util/detect-user-bandwidth.js b/ui/util/detect-user-bandwidth.js index fd3f0d187..7e8e8d57b 100644 --- a/ui/util/detect-user-bandwidth.js +++ b/ui/util/detect-user-bandwidth.js @@ -3,14 +3,14 @@ const downloadSize = 1093957; // this must match with the image above let startTime, endTime; async function measureConnectionSpeed() { - startTime = (new Date()).getTime(); + startTime = new Date().getTime(); const cacheBuster = '?nnn=' + startTime; const download = new Image(); download.src = imageAddr + cacheBuster; // this returns when the image is finished downloading await download.decode(); - endTime = (new Date()).getTime(); + endTime = new Date().getTime(); const duration = (endTime - startTime) / 1000; const bitsLoaded = downloadSize * 8; const speedBps = (bitsLoaded / duration).toFixed(2); -- 2.45.3 From a6cac05a669a28b3db29d549aea58f9bb2d91afb Mon Sep 17 00:00:00 2001 From: bluerabbit001 Date: Fri, 8 Oct 2021 10:21:18 -0700 Subject: [PATCH 6/7] Update Download Progress --- static/img/dark_loading.gif | Bin 0 -> 80100 bytes static/img/white_loading.gif | Bin 0 -> 80537 bytes ui/component/downloadProgress/index.js | 32 +++-- ui/component/downloadProgress/view.jsx | 138 ++++++++++++++++++---- ui/redux/actions/content.js | 6 +- ui/scss/component/_download-progress.scss | 34 +++++- ui/util/array.js | 18 +++ 7 files changed, 189 insertions(+), 39 deletions(-) create mode 100644 static/img/dark_loading.gif create mode 100644 static/img/white_loading.gif mode change 100755 => 100644 ui/component/downloadProgress/index.js mode change 100755 => 100644 ui/component/downloadProgress/view.jsx create mode 100644 ui/util/array.js diff --git a/static/img/dark_loading.gif b/static/img/dark_loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..edb99a6ebcba4b2d5c45cae0b26795f85a23680d GIT binary patch literal 80100 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 IFtkGe0MV;UEdT%j literal 0 HcmV?d00001 diff --git a/static/img/white_loading.gif b/static/img/white_loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..b65b4c25aa3fa63190a27aedefce185d93534628 GIT binary patch literal 80537 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 Y3mZ1l>zU@8A6Y76bM&2CwkpStN)#lAnW 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

NK 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 literal 0 HcmV?d00001 diff --git a/ui/component/downloadProgress/index.js b/ui/component/downloadProgress/index.js old mode 100755 new mode 100644 index 9e901d93d..d5a4fa943 --- a/ui/component/downloadProgress/index.js +++ b/ui/component/downloadProgress/index.js @@ -1,36 +1,48 @@ import { connect } from 'react-redux'; import DownloadProgress from './view'; -import { doSetPlayingUri, doStopDownload, doUpdateDownloadingStatus } from 'redux/actions/content'; -import { selectFileInfosByOutpoint } from 'lbry-redux'; +import { doSetPlayingUri, doStopDownload, doContinueDownloading, doPurchaseUriWrapper } from 'redux/actions/content'; +import { selectFileInfosByOutpoint, SETTINGS } from 'lbry-redux'; import { selectPrimaryUri, selectPlayingUri } from 'redux/selectors/content'; +import { makeSelectClientSetting } from 'redux/selectors/settings'; + const select = (state) => { const byOutpoint = selectFileInfosByOutpoint(state); const runningByOutpoint = []; const primaryUri = selectPrimaryUri(state); const playingUri = selectPlayingUri(state); const uri = playingUri ? playingUri.uri : null; + let primaryOutpoint = null; + let playingOutpoint = null; for (const key in byOutpoint) { const item = byOutpoint[key]; + if (item && primaryUri && primaryUri.includes(`/${item.claim_name}`)) primaryOutpoint = item.outpoint; + if (item && uri && uri.includes(`/${item.claim_name}`)) playingOutpoint = item.outpoint; + if (item && item.status === 'running') { - if ( - (!primaryUri || !primaryUri.includes(`/${item.claim_name}`)) && - (!uri || !uri.includes(`/${item.claim_name}`)) - ) { - runningByOutpoint.push(item); - } + runningByOutpoint.push(item); } } return { - downloadList: runningByOutpoint, + byOutpoint: selectFileInfosByOutpoint(state), + primary: { + uri: primaryUri, + outpoint: primaryOutpoint, + }, + playing: { + uri, + outpoint: playingOutpoint, + }, + currentTheme: makeSelectClientSetting(SETTINGS.THEME)(state), }; }; const perform = (dispatch) => ({ pause: () => dispatch(doSetPlayingUri({ uri: null })), - updateDownloadingStatus: (outpoint) => dispatch(doUpdateDownloadingStatus(outpoint)), + doContinueDownloading: (outpoint, force) => dispatch(doContinueDownloading(outpoint, force)), stopDownload: (outpoint) => dispatch(doStopDownload(outpoint)), + download: (uri) => dispatch(doPurchaseUriWrapper(uri, false, true)), }); export default connect(select, perform)(DownloadProgress); diff --git a/ui/component/downloadProgress/view.jsx b/ui/component/downloadProgress/view.jsx old mode 100755 new mode 100644 index f7958567e..48e850539 --- a/ui/component/downloadProgress/view.jsx +++ b/ui/component/downloadProgress/view.jsx @@ -5,40 +5,108 @@ import Button from 'component/button'; import * as ICONS from 'constants/icons'; import { buildURI } from 'lbry-redux'; import { formatBytes } from 'util/format-bytes'; +import { areEqual, removeItem } from 'util/array'; +import loadingIcon from '../../../static/img/white_loading.gif'; +import darkLoadingIcon from '../../../static/img/dark_loading.gif'; import usePersistedState from 'effects/use-persisted-state'; type Props = { - downloadList: any[], + byOutpoint: any, + primary: any, + playing: any, + currentTheme: string, stopDownload: (outpoint: string) => void, - updateDownloadingStatus: (outpoint: string) => void, + doContinueDownloading: (outpoint: string, force: boolean) => void, + download: (uri: string) => void, }; -function DownloadProgress({ downloadList, stopDownload, updateDownloadingStatus }: Props) { +function DownloadProgress({ byOutpoint, primary, playing, currentTheme, stopDownload, doContinueDownloading }: Props) { const [isShow, setIsShow] = usePersistedState('download-progress', true); + const [downloading, setDownloading] = usePersistedState('download-progress-downloading', []); const [cancelHash] = useState({}); - const [checkDownloadingHash] = useState({}); + const [initDownloadingHash] = useState({}); + const [prevPlaying, setPrevPlaying] = useState({}); + const [prevPrimary, setPrevPrimary] = useState({}); const handleCancel = (hash, value) => { cancelHash[hash] = value; }; - if (downloadList.length === 0) return null; + useEffect(() => {}, []); - downloadList.map((item) => { - if (item && !checkDownloadingHash[item.outpoint]) { - updateDownloadingStatus(item.outpoint); - checkDownloadingHash[item.outpoint] = true; + const handleStopDownload = (outpoint) => { + const updated = [...downloading]; + removeItem(updated, outpoint); + setDownloading(updated); + stopDownload(outpoint); + }; + + const runningByOutpoint = {}; + const updateDownloading = [...downloading]; + + for (const key in byOutpoint) { + const item = byOutpoint[key]; + if (item && item.status === 'running') runningByOutpoint[item.outpoint] = item; + } + + Object.keys(runningByOutpoint) + .filter((outpoint) => downloading.indexOf(outpoint) === -1) + .map((outpoint) => { + if (primary.outpoint !== outpoint && playing.outpoint !== outpoint) { + updateDownloading.push(outpoint); + } + }); + + downloading + .filter((outpoint) => (byOutpoint[outpoint] && byOutpoint[outpoint].status !== 'running') || !byOutpoint[outpoint]) + .map((outpoint) => { + removeItem(updateDownloading, outpoint); + }); + if (!areEqual(downloading, updateDownloading)) setDownloading(updateDownloading); + + if (updateDownloading.length === 0) return null; + + if (playing.outpoint !== prevPlaying.outpoint) { + if (downloading.includes(prevPlaying.outpoint)) { + setTimeout(() => { + doContinueDownloading(prevPlaying.outpoint, true); + }, 1000); + } + setPrevPlaying(playing); + } + + if (primary.outpoint !== prevPrimary.outpoint) { + if (downloading.includes(prevPrimary.outpoint)) { + setTimeout(() => { + doContinueDownloading(prevPrimary.outpoint, true); + }, 1000); + } + setPrevPrimary(primary); + } + + updateDownloading.map((outpoint) => { + if (!initDownloadingHash[outpoint]) { + initDownloadingHash[outpoint] = true; + doContinueDownloading(outpoint, false); } }); if (!isShow) { return ( - + ); } @@ -48,11 +116,16 @@ function DownloadProgress({ downloadList, stopDownload, updateDownloadingStatus

- {downloadList.map((item, index) => { + {updateDownloading.map((outpoint, index) => { + const item = runningByOutpoint[outpoint]; let releaseTime = ''; + let isPlaying = false; if (item.metadata && item.metadata.release_time) { releaseTime = new Date(parseInt(item.metadata.release_time) * 1000).toISOString().split('T')[0]; } + if (outpoint === primary.outpoint || outpoint === playing.outpoint) { + isPlaying = true; + } return (
{index !== 0 &&
} @@ -64,12 +137,14 @@ function DownloadProgress({ downloadList, stopDownload, updateDownloadingStatus totalBytes={item.total_bytes} addedOn={item.added_on} directory={item.download_directory} - stopDownload={stopDownload} + stopDownload={handleStopDownload} outpoint={item.outpoint} isCancel={cancelHash[item.outpoint]} claimID={item.claim_id} + playing={isPlaying} claimName={item.claim_name} handleCancel={handleCancel} + currentTheme={currentTheme} />
); @@ -90,6 +165,8 @@ type DownloadProgressItemProps = { isCancel: boolean, claimID: string, claimName: string, + playing: boolean, + currentTheme: string, stopDownload: (outpoint: string) => void, handleCancel: (hash: string, value: boolean) => void, }; @@ -106,6 +183,8 @@ function DownloadProgressItem({ isCancel, claimID, claimName, + playing, + currentTheme, stopDownload, handleCancel, }: DownloadProgressItemProps) { @@ -152,7 +231,6 @@ function DownloadProgressItem({ const openDownloadFolder = () => { shell.openPath(directory); }; - return (
@@ -161,14 +239,22 @@ function DownloadProgressItem({ className="download-progress__state-filename" navigate={buildURI({ claimName, claimID })} /> -
{ - handleCancel(outpoint, true); - }} - > - × -
+ {playing ? ( + currentTheme === 'light' ? ( + + ) : ( + + ) + ) : ( +
{ + handleCancel(outpoint, true); + }} + > + × +
+ )}
diff --git a/ui/redux/actions/content.js b/ui/redux/actions/content.js index 19396c09e..d2625658b 100644 --- a/ui/redux/actions/content.js +++ b/ui/redux/actions/content.js @@ -54,6 +54,7 @@ export function doUpdateLoadStatus(uri: any, outpoint: string) { setNextStatusUpdate(); } else if (fileInfo.completed) { // TODO this isn't going to get called if they reload the client before + // the download finished dispatch({ type: ACTIONS.DOWNLOADING_COMPLETED, @@ -99,9 +100,9 @@ export function doUpdateLoadStatus(uri: any, outpoint: string) { // @endif } -export function doUpdateDownloadingStatus(outpoint: string) { +export function doContinueDownloading(outpoint: string, force: boolean) { return (dispatch: Dispatch) => { - if (!timeOutHash[outpoint]) { + if (!timeOutHash[outpoint] || force) { dispatch(doUpdateLoadStatus(null, outpoint)); } }; @@ -113,6 +114,7 @@ export function doStopDownload(outpoint: string) { clearInterval(timeOutHash[outpoint]); timeOutHash[outpoint] = undefined; } + dispatch(doDeleteFile(outpoint, false, false, null)); }; } diff --git a/ui/scss/component/_download-progress.scss b/ui/scss/component/_download-progress.scss index 1bea0e01a..9927c0802 100644 --- a/ui/scss/component/_download-progress.scss +++ b/ui/scss/component/_download-progress.scss @@ -89,6 +89,12 @@ font-size: 20px; cursor: pointer; } +.download-progress__playing-button { + flex-shrink: 0; + margin-left: auto; + width: 25px; + height: 25px; +} .download-progress__count-time { font-size: 11px; letter-spacing: -0.6px; @@ -148,7 +154,7 @@ bottom: 10px; right: 10px; border: none; - background: var(--color-white); + background: var(--color-header-background); color: var(--color-gray-6); width: 50px; height: 50px; @@ -163,3 +169,29 @@ margin-right: 10px; font-size: 25px; } +.download-progress__current-downloading { + position: fixed; + bottom: 25px; + right: 15px; + border: none; + width: 30px; + height: 30px; + display: flex; + justify-content: center; + align-items: center; + margin: 0; + animation-name: downloadcount; + animation-duration: 1.3s; + animation-iteration-count: infinite; +} +@keyframes downloadcount { + 0% { + transform: translateY(-10px); + } + 50% { + transform: translateY(-3px); + } + 100% { + transform: translateY(-10px); + } +} diff --git a/ui/util/array.js b/ui/util/array.js new file mode 100644 index 000000000..4badb3006 --- /dev/null +++ b/ui/util/array.js @@ -0,0 +1,18 @@ +export function areEqual(first, second) { + if (first.length !== second.length) { + return false; + } + for (let i = 0; i < first.length; i++) { + if (!second.includes(first[i])) { + return false; + } + } + return true; +} + +export function removeItem(array, item) { + const index = array.indexOf(item); + if (index > -1) { + array.splice(index, 1); + } +} -- 2.45.3 From 542253c8a0a1987c374326ab3626ff37677a5372 Mon Sep 17 00:00:00 2001 From: bluerabbit001 Date: Fri, 8 Oct 2021 13:27:12 -0700 Subject: [PATCH 7/7] Update CSS --- ui/component/downloadProgress/view.jsx | 18 ++++----- ui/scss/component/_download-progress.scss | 45 ++++++++++++++++++----- 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/ui/component/downloadProgress/view.jsx b/ui/component/downloadProgress/view.jsx index 48e850539..dd95b5c7c 100644 --- a/ui/component/downloadProgress/view.jsx +++ b/ui/component/downloadProgress/view.jsx @@ -32,8 +32,6 @@ function DownloadProgress({ byOutpoint, primary, playing, currentTheme, stopDown cancelHash[hash] = value; }; - useEffect(() => {}, []); - const handleStopDownload = (outpoint) => { const updated = [...downloading]; removeItem(updated, outpoint); @@ -42,7 +40,7 @@ function DownloadProgress({ byOutpoint, primary, playing, currentTheme, stopDown }; const runningByOutpoint = {}; - const updateDownloading = [...downloading]; + const currentDownloading = [...downloading]; for (const key in byOutpoint) { const item = byOutpoint[key]; @@ -53,18 +51,18 @@ function DownloadProgress({ byOutpoint, primary, playing, currentTheme, stopDown .filter((outpoint) => downloading.indexOf(outpoint) === -1) .map((outpoint) => { if (primary.outpoint !== outpoint && playing.outpoint !== outpoint) { - updateDownloading.push(outpoint); + currentDownloading.push(outpoint); } }); downloading .filter((outpoint) => (byOutpoint[outpoint] && byOutpoint[outpoint].status !== 'running') || !byOutpoint[outpoint]) .map((outpoint) => { - removeItem(updateDownloading, outpoint); + removeItem(currentDownloading, outpoint); }); - if (!areEqual(downloading, updateDownloading)) setDownloading(updateDownloading); + if (!areEqual(downloading, currentDownloading)) setDownloading(currentDownloading); - if (updateDownloading.length === 0) return null; + if (currentDownloading.length === 0) return null; if (playing.outpoint !== prevPlaying.outpoint) { if (downloading.includes(prevPlaying.outpoint)) { @@ -84,7 +82,7 @@ function DownloadProgress({ byOutpoint, primary, playing, currentTheme, stopDown setPrevPrimary(primary); } - updateDownloading.map((outpoint) => { + currentDownloading.map((outpoint) => { if (!initDownloadingHash[outpoint]) { initDownloadingHash[outpoint] = true; doContinueDownloading(outpoint, false); @@ -102,7 +100,7 @@ function DownloadProgress({ byOutpoint, primary, playing, currentTheme, stopDown >
- {updateDownloading.length} + {currentDownloading.length}
@@ -116,7 +114,7 @@ function DownloadProgress({ byOutpoint, primary, playing, currentTheme, stopDown
- {updateDownloading.map((outpoint, index) => { + {currentDownloading.map((outpoint, index) => { const item = runningByOutpoint[outpoint]; let releaseTime = ''; let isPlaying = false; diff --git a/ui/scss/component/_download-progress.scss b/ui/scss/component/_download-progress.scss index 9927c0802..5b0f29346 100644 --- a/ui/scss/component/_download-progress.scss +++ b/ui/scss/component/_download-progress.scss @@ -7,8 +7,8 @@ display: flex; flex-direction: column; background-color: var(--color-header-background); //var(--color-gray-9):dark-mode - border-radius: 10px; - border: 1px solid var(--color-gray-3); + border-radius: var(--border-radius); + // border: 1px solid var(--color-gray-3); z-index: 9999; } .download-progress__top-close-button { @@ -23,7 +23,7 @@ height: 2px; width: 13px; background-color: var(--color-gray-4); - border-radius: 3px; + border-radius: var(--border-radius); } } .download-progress__state-container { @@ -76,10 +76,10 @@ width: 100%; background-color: var(--color-gray-5); height: 6px; - border-radius: 10px; + border-radius: var(--border-radius); } .download-progress__bar-content { - border-radius: 10px; + border-radius: var(--border-radius); height: 100%; background-color: var(--color-primary); } @@ -92,8 +92,8 @@ .download-progress__playing-button { flex-shrink: 0; margin-left: auto; - width: 25px; - height: 25px; + width: 29.6px; + height: 29.6px; } .download-progress__count-time { font-size: 11px; @@ -144,7 +144,7 @@ right: 10px; width: 400px; height: 300px; - border-radius: 10px; + border-radius: var(--border-radius); box-shadow: 2px 2px 5px var(--color-gray-4); background-color: var(--color-white); transition: width 2s; @@ -158,7 +158,7 @@ color: var(--color-gray-6); width: 50px; height: 50px; - border-radius: 10px; + border-radius: var(--border-radius); box-shadow: 0px 5px 4px var(--color-gray-4); display: flex; justify-content: center; @@ -183,6 +183,33 @@ animation-name: downloadcount; animation-duration: 1.3s; animation-iteration-count: infinite; + + .notification__bubble { + height: 1.5rem; + width: 1.5rem; + border-radius: 50%; + background-color: var(--color-editor-tag); + position: absolute; + top: -0.5rem; + right: -0.5rem; + color: white; + font-size: var(--font-small); + font-weight: bold; + line-height: 1; + display: flex; + align-items: center; + justify-content: center; + } + + .notification__bubble--small { + font-size: var(--font-xsmall); + } + + .notification__bubble--inline { + @extend .notification__bubble; + top: 0.75rem; + right: 1rem; + } } @keyframes downloadcount { 0% { -- 2.45.3