Add chart item component, StateType and getStateType to determine state from Folder

This commit is contained in:
Jesse Lucas
2020-03-29 16:51:12 -04:00
parent 32c849e18c
commit 02d14c7e9b
4 changed files with 105 additions and 29 deletions
+89 -16
View File
@@ -9,27 +9,99 @@ interface Folder {
}
namespace Folder {
export enum stateType {
export enum StateType {
Paused = 1,
Unknown,
Unshared,
WaitingToScan,
Stopped,
Scanning,
Idle,
LocalAdditions,
WaitingToSync,
PreparingToSync,
Syncing,
OutOfSync,
FailedItems,
}
export function statusToString(f: Folder): string {
const fs: Folder.Status = f.status;
const state: string = fs.state;
/**
* stateTypeToString returns a string representation of
* the StateType enum
* @param s StateType
*/
export function stateTypeToString(s: StateType): string {
switch (s) {
case StateType.Paused:
return 'Paused';
case StateType.Unknown:
return 'Unknown';
case StateType.Unshared:
return 'Unshared';
case StateType.WaitingToSync:
return 'Waiting to Sync';
case StateType.Stopped:
return 'Stopped';
case StateType.Scanning:
return 'Scanning';
case StateType.Idle:
return 'Up to Date';
case StateType.LocalAdditions:
return 'Local Additions';
case StateType.WaitingToScan:
return 'Waiting to Scan';
case StateType.PreparingToSync:
return 'Preparing to Sync';
case StateType.Syncing:
return 'Syncing';
case StateType.OutOfSync:
return 'Out of Sync';
case StateType.FailedItems:
return 'Failed Items';
}
}
/**
* getStatusType looks at a folder and determines the correct
* StateType to return
*
* Possible state values from API
* "idle", "scanning", "scan-waiting", "sync-waiting", "sync-preparing"
* "syncing", "error", "unknown"
*
* @param f Folder
*/
export function getStateType(f: Folder): StateType {
if (f.paused) {
return 'paused';
return StateType.Paused;
}
if (!f.status || (Object.keys(f.status).length === 0)) {
return 'unknown';
return StateType.Unknown;
}
if (state === 'error') {
return 'stopped'; // legacy, the state is called "stopped" in the GUI
}
const fs: Folder.Status = f.status;
const state: string = fs.state;
if (state !== 'idle') {
return state;
// Match API string to StateType
switch (state) {
case "idle":
return StateType.Idle;
case "scanning":
return StateType.Scanning;
case "scan-waiting":
return StateType.WaitingToScan;
case "sync-waiting":
return StateType.WaitingToSync;
case "sync-preparing":
return StateType.PreparingToSync;
case "syncing":
return StateType.Syncing;
case "error":
// legacy, the state is called "stopped" in the gui
return StateType.Stopped;
case "unknown":
return StateType.Unknown;
}
const needTotalItems = fs.needDeletes + fs.needDirectories +
@@ -38,21 +110,22 @@ namespace Folder {
fs.receiveOnlyChangedFiles + fs.receiveOnlyChangedSymlinks;
if (needTotalItems > 0) {
return 'outofsync';
return StateType.OutOfSync;
}
if (f.status.pullErrors > 0) {
return 'faileditems';
return StateType.FailedItems;
}
if (receiveOnlyTotalItems > 0) {
return 'localadditions';
return StateType.LocalAdditions;
}
if (f.devices.length <= 1) {
return 'unshared';
return StateType.Unshared;
}
return state;
return StateType.Unknown;
}
export interface Status {
globalBytes: number;
globalDeleted: number;