import React, { useEffect, useRef } from 'react' import Typography from '@material-ui/core/Typography' import { getPeerString, humanizeSize } from '../utils/Utils' import DialogTitle from '@material-ui/core/DialogTitle' import DialogContent from '@material-ui/core/DialogContent' import { cacheHost } from '../utils/Hosts' const style = { cache: { paddingLeft: "6px", paddingRight: "2px", lineHeight: "11px", }, piece: { width: "12px", height: "12px", backgroundColor: "#eef2f4", border: "1px solid #eef2f4", display: "inline-block", marginRight: "1px", }, pieceComplete: { backgroundColor: "#3fb57a", borderColor: "#3fb57a", }, pieceLoading: { backgroundColor: "#00d0d0", borderColor: "#00d0d0", }, readerRange: { borderColor: "#9a9aff !important", }, pieceReader: { borderColor: "#000000 !important", }, pieceProgress: { position: "relative", zIndex: "1", backgroundColor: "#009090", left: "-1px", top: "-1px", width: "12px", }, } export default function DialogCacheInfo(props) { const [hash] = React.useState(props.hash) const [cache, setCache] = React.useState({}) const timerID = useRef(-1) const [pMap, setPMap] = React.useState([]) useEffect(() => { if (hash) timerID.current = setInterval(() => { getCache(hash, (cache) => { setCache(cache) }) }, 100) else clearInterval(timerID.current) return () => { clearInterval(timerID.current) } }, [hash, props.open]) useEffect(()=>{ if (cache && cache.PiecesCount && cache.Pieces){ var map = []; for (let i = 0; i < cache.PiecesCount; i++) { var reader = 0 var cls = "piece" var prc = 0 if (cache.Pieces[i]) { if (cache.Pieces[i].Completed && cache.Pieces[i].Size >= cache.Pieces[i].Length) cls += " piece-complete" else cls += " piece-loading" prc = (cache.Pieces[i].Size / cache.Pieces[i].Length * 100).toFixed(2) } cache.Readers.forEach((r, k) => { if (i >= r.Start && i <= r.End && i !== r.Reader) cls += " reader-range" if (i === r.Reader) { cls += " piece-reader" } }) map.push({ prc: prc, class: cls, info: i, reader: reader, }) } setPMap(map) } },[cache.Pieces]) return (