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 => { 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 (