Recalculate completion for devices and update total properties

This commit is contained in:
Jesse Lucas
2020-04-06 14:30:44 -04:00
parent 1e33cc9720
commit 5a6d79a66e
8 changed files with 94 additions and 31 deletions
+35 -2
View File
@@ -1,4 +1,6 @@
import { colors } from './style';
import Folder from './folder';
import { Completion } from './completion';
interface Device {
deviceID: string;
@@ -7,8 +9,9 @@ interface Device {
state: string;
paused: boolean;
connected: boolean;
completion: number;
completion: Completion;
used: boolean; // indicates if a folder is using the device
folders: Folder[];
}
namespace Device {
@@ -80,7 +83,7 @@ namespace Device {
}
if (d.connected) {
if (d.completion === 100) {
if (d.completion.completion === 100) {
return d.used ? StateType.Insync : StateType.UnusedInsync;
} else {
return StateType.Syncing;
@@ -89,5 +92,35 @@ namespace Device {
return d.used ? StateType.Disconnected : StateType.UnusedDisconnected;
}
export function recalcCompletion(d: Device) {
if (!d || !d.completion || !d.folders) {
return
}
var total = 0, needed = 0, deletes = 0, items = 0;
d.folders.forEach(folder => {
if (!folder || !folder.completion)
return
needed += folder.completion.needBytes;
items += folder.completion.needItems;
deletes += folder.completion.needDeletes;
});
if (total == 0) {
d.completion.completion = 100;
d.completion.needBytes = 0;
d.completion.needItems = 0;
} else {
d.completion.completion = Math.floor(100 * (1 - needed / total));
d.completion.needBytes = needed;
d.completion.needItems = items + deletes;
}
if (needed == 0 && deletes > 0) {
// We don't need any data, but we have deletes that we need
// to do. Drop down the completion percentage to indicate
// that we have stuff to do.
d.completion.completion = 95;
}
}
}
export default Device;