Skip to content

Commit

Permalink
Fixed process not cleared after download.
Browse files Browse the repository at this point in the history
Closes  #160
  • Loading branch information
marcopeocchi committed Jun 21, 2024
1 parent 38683bf commit 0daf367
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 10 deletions.
7 changes: 6 additions & 1 deletion frontend/src/components/DownloadsGridView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { activeDownloadsState } from '../atoms/downloads'
import { useToast } from '../hooks/toast'
import { useI18n } from '../hooks/useI18n'
import { useRPC } from '../hooks/useRPC'
import { ProcessStatus, RPCResult } from '../types'
import DownloadCard from './DownloadCard'

const DownloadsGridView: React.FC = () => {
Expand All @@ -13,14 +14,18 @@ const DownloadsGridView: React.FC = () => {
const { client } = useRPC()
const { pushMessage } = useToast()

const stop = (r: RPCResult) => r.progress.process_status === ProcessStatus.Completed
? client.clear(r.id)
: client.kill(r.id)

return (
<Grid container spacing={{ xs: 2, md: 2 }} columns={{ xs: 4, sm: 8, md: 12, xl: 12 }} pt={2}>
{
downloads.map(download => (
<Grid item xs={4} sm={8} md={6} xl={4} key={download.id}>
<DownloadCard
download={download}
onStop={() => client.kill(download.id)}
onStop={() => stop(download)}
onCopy={() => pushMessage(i18n.t('clipboardAction'), 'info')}
/>
</Grid>
Expand Down
9 changes: 7 additions & 2 deletions frontend/src/components/DownloadsTableView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import { useRecoilValue } from 'recoil'
import { activeDownloadsState } from '../atoms/downloads'
import { serverURL } from '../atoms/settings'
import { useRPC } from '../hooks/useRPC'
import { RPCResult } from '../types'
import { ProcessStatus, RPCResult } from '../types'
import { base64URLEncode, formatSize, formatSpeedMiB } from "../utils"

const columns = [
Expand Down Expand Up @@ -133,6 +133,11 @@ const DownloadsTableView: React.FC = () => {
window.open(`${serverAddr}/archive/d/${encoded}?token=${localStorage.getItem('token')}`)
}

const stop = (r: RPCResult) => r.progress.process_status === ProcessStatus.Completed
? client.clear(r.id)
: client.kill(r.id)


function rowContent(_index: number, download: RPCResult) {
return (
<>
Expand Down Expand Up @@ -168,7 +173,7 @@ const DownloadsTableView: React.FC = () => {
<ButtonGroup>
<IconButton
size="small"
onClick={() => client.kill(download.id)}
onClick={() => stop(download)}
>
{download.progress.percentage === '-1' ? <DeleteIcon /> : <StopCircleIcon />}

Expand Down
7 changes: 7 additions & 0 deletions frontend/src/lib/rpcClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,13 @@ export class RPCClient {
})
}

public clear(id: string) {
this.sendHTTP({
method: 'Service.Clear',
params: [id],
})
}

public killAll() {
this.sendHTTP({
method: 'Service.KillAll',
Expand Down
9 changes: 8 additions & 1 deletion frontend/src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,18 @@ type DownloadInfo = {
created_at: string
}

export enum ProcessStatus {
Pending = 0,
Downloading,
Completed,
Errored,
}

type DownloadProgress = {
speed: number
eta: number
percentage: string
process_status: number
process_status: ProcessStatus
}

export type RPCResult = Readonly<{
Expand Down
11 changes: 6 additions & 5 deletions frontend/src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { pipe } from 'fp-ts/lib/function'
import type { RPCResponse } from "./types"
import { ProcessStatus } from './types'

export function validateIP(ipAddr: string): boolean {
let ipRegex = /^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/gm
Expand Down Expand Up @@ -53,15 +54,15 @@ export function isRPCResponse(object: any): object is RPCResponse<any> {
return 'result' in object && 'id' in object
}

export function mapProcessStatus(status: number) {
export function mapProcessStatus(status: ProcessStatus) {
switch (status) {
case 0:
case ProcessStatus.Pending:
return 'Pending'
case 1:
case ProcessStatus.Downloading:
return 'Downloading'
case 2:
case ProcessStatus.Completed:
return 'Completed'
case 3:
case ProcessStatus.Errored:
return 'Error'
default:
return 'Pending'
Expand Down
2 changes: 1 addition & 1 deletion server/rpc/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ func (s *Service) Kill(args string, killed *string) error {
}

if err := proc.Kill(); err != nil {
s.logger.Info("failed killing process", slog.String("id", proc.Id))
s.logger.Info("failed killing process", slog.String("id", proc.Id), slog.Any("err", err))
return err
}

Expand Down

0 comments on commit 0daf367

Please sign in to comment.