Refactor AppListPage

This commit is contained in:
waterplea
2021-11-22 16:33:41 +03:00
committed by Aiden McClelland
parent b546eb2504
commit ee81ca111b
29 changed files with 719 additions and 17510 deletions

View File

@@ -142,7 +142,7 @@ export module RR {
export type GetPackageMetricsReq = { id: string } // package.metrics
export type GetPackageMetricsRes = Metric
export type InstallPackageReq = WithExpire<{ id: string, 'version-spec'?: string }> // package.install
export type InstallPackageReq = WithExpire<{ id: string, version?: string }> // package.install
export type InstallPackageRes = WithRevision<null>
export type DryUpdatePackageReq = { id: string, version: string } // package.update.dry

View File

@@ -0,0 +1,13 @@
import { Injectable, OnDestroy } from "@angular/core";
import { ReplaySubject } from "rxjs";
/**
* Observable abstraction over ngOnDestroy to use with takeUntil
*/
@Injectable()
export class DestroyService extends ReplaySubject<void> implements OnDestroy {
ngOnDestroy() {
this.next();
this.complete();
}
}

View File

@@ -1,45 +0,0 @@
import { Injectable } from '@angular/core'
import { InstallProgress } from './patch-db/data-model'
@Injectable({
providedIn: 'root',
})
export class PackageLoadingService {
constructor () { }
transform (loadData: InstallProgress): ProgressData {
let { downloaded, validated, unpacked, size, 'download-complete': downloadComplete, 'validation-complete': validationComplete, 'unpack-complete': unpackComplete } = loadData
// only permit 100% when "complete" == true
downloaded = downloadComplete ? size : Math.max(downloaded - 1, 0)
validated = validationComplete ? size : Math.max(validated - 1, 0)
unpacked = unpackComplete ? size : Math.max(unpacked - 1, 0)
const downloadWeight = 1
const validateWeight = .2
const unpackWeight = .7
const numerator = Math.floor(
downloadWeight * downloaded +
validateWeight * validated +
unpackWeight * unpacked)
const denominator = Math.floor(size * (downloadWeight + validateWeight + unpackWeight))
return {
totalProgress: Math.floor(100 * numerator / denominator),
downloadProgress: Math.floor(100 * downloaded / size),
validateProgress: Math.floor(100 * validated / size),
unpackProgress: Math.floor(100 * unpacked / size),
isComplete: downloadComplete && validationComplete && unpackComplete,
}
}
}
export interface ProgressData {
totalProgress: number
downloadProgress: number
validateProgress: number
unpackProgress: number
isComplete: boolean
}