Improvements to download menu

This commit is contained in:
2025-11-05 11:52:04 -07:00
parent 8c00a3e553
commit 6677e22ab6
4 changed files with 51 additions and 9 deletions

View File

@@ -150,12 +150,12 @@ async fn download(
downloaded += chunk.len() as u64;
let progress = if total_size > 0 {
(downloaded * 100 / total_size) as u8
(downloaded as f64 / total_size as f64) * 100.0
} else {
0
0.0
};
app.emit("download-progress", format!("{}:{}", &name, progress))
app.emit("download-progress", format!("{}:{:.8}:{}", &name, progress, downloaded))
.unwrap();
}

View File

@@ -0,0 +1,17 @@
type ProgressBarProps = {
progress: number
className?: string
}
export default function ProgressBar ({ progress, className }: ProgressBarProps) {
return (
<div
className={`w-full bg-(--col1) border border-(--col5) rounded-full h-4 overflow-hidden ${className}`}
>
<div
className='bg-(--col8) border-r border-r-(--col5) h-full'
style={{ width: `${progress}%` }}
/>
</div>
)
}

View File

@@ -42,6 +42,8 @@ import { listen } from '@tauri-apps/api/event'
import { usePathname } from 'next/navigation'
import { arch, platform } from '@tauri-apps/plugin-os'
import VersionInfo from './componets/VersionInfo'
import prettyBytes from 'pretty-bytes'
import ProgressBar from './componets/ProgressBar'
const roboto = Roboto({
subsets: ['latin']
@@ -113,13 +115,14 @@ export default function RootLayout ({
let unlistenUninstalled: (() => void) | null = null
listen<string>('download-progress', event => {
const [versionName, progStr] = event.payload.split(':')
const [versionName, progStr, totalSizeStr] = event.payload.split(':')
const prog = Number(progStr)
const progBytes = Number(totalSizeStr)
setDownloadProgress(prev => {
const i = prev.findIndex(d => d.version === versionName)
if (i === -1) return prev
const copy = [...prev]
copy[i] = { ...copy[i], progress: prog }
copy[i] = { ...copy[i], progress: prog, progressBytes: progBytes }
return copy
})
}).then(f => (unlistenProgress = f))
@@ -268,7 +271,7 @@ export default function RootLayout ({
setSelectedVersionList([])
const newDownloads = list.map(
version => new DownloadProgress(version, 0, false, true, false, false)
version => new DownloadProgress(version, 0, 0, false, true, false, false)
)
setDownloadProgress(newDownloads)
@@ -655,9 +658,30 @@ export default function RootLayout ({
Finishing...
</span>
) : (
<span>
Downloading: {v.progress}% done
</span>
<div className='flex flex-col gap-1 w-full'>
<span>
Downloading: {Math.floor(v.progress)}%
of (
{prettyBytes(v.progressBytes, {
minimumFractionDigits: 1,
maximumFractionDigits: 1
})}
/
{prettyBytes(
getVersionInfo(v.version)?.size ??
0,
{
minimumFractionDigits: 1,
maximumFractionDigits: 1
}
)}
)
</span>
<ProgressBar
progress={v.progress}
className='w-full'
/>
</div>
)}
</div>
</div>

View File

@@ -2,6 +2,7 @@ export class DownloadProgress {
constructor(
public version: string,
public progress: number,
public progressBytes: number,
public failed: boolean,
public queued: boolean,
public hash_checking: boolean,