Recalculate completion for devices and update total properties
This commit is contained in:
+35
-2
@@ -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;
|
||||
Reference in New Issue
Block a user