mirror of
https://github.com/abraunegg/onedrive
synced 2024-05-18 13:46:41 +02:00
Implement --display-quota
* Implement --display-quota
This commit is contained in:
parent
d7ea79773f
commit
77c294ba0c
|
@ -68,6 +68,7 @@ Before reading this document, please ensure you are running application version
|
|||
- [CLI Option: --destination-directory](#cli-option---destination-directory)
|
||||
- [CLI Option: --display-config](#cli-option---display-config)
|
||||
- [CLI Option: --display-sync-status](#cli-option---display-sync-status)
|
||||
- [CLI Option: --display-quota](#cli-option---display-quota)
|
||||
- [CLI Option: --force](#cli-option---force)
|
||||
- [CLI Option: --force-sync](#cli-option---force-sync)
|
||||
- [CLI Option: --get-file-link](#cli-option---get-file-link)
|
||||
|
@ -947,6 +948,11 @@ _**Usage Example:**_ `onedrive --display-sync-status`
|
|||
|
||||
_**Additional Usage Notes:**_ This option can also use the `--single-directory` option to determine the sync status of a specific directory within the configured 'sync_dir'
|
||||
|
||||
### CLI Option: ---display-quota
|
||||
_**Description:**_ This CLI option will display the quota status of the account drive id or the configured 'drive_id' value
|
||||
|
||||
_**Usage Example:**_ `onedrive --display-quota`
|
||||
|
||||
### CLI Option: --force
|
||||
_**Description:**_ This CLI option enables the force the deletion of data when a 'big delete' is detected.
|
||||
|
||||
|
|
16
src/config.d
16
src/config.d
|
@ -975,6 +975,7 @@ class ApplicationConfig {
|
|||
stringValues["auth_response"] = "";
|
||||
boolValues["display_config"] = false;
|
||||
boolValues["display_sync_status"] = false;
|
||||
boolValues["display_quota"] = false;
|
||||
boolValues["print_token"] = false;
|
||||
boolValues["logout"] = false;
|
||||
boolValues["reauth"] = false;
|
||||
|
@ -1044,6 +1045,9 @@ class ApplicationConfig {
|
|||
"display-sync-status",
|
||||
"Display the sync status of the client - no sync will be performed.",
|
||||
&boolValues["display_sync_status"],
|
||||
"display-quota",
|
||||
"Display the quota status of the client - no sync will be performed.",
|
||||
&boolValues["display_quota"],
|
||||
"download-only",
|
||||
"Replicate the OneDrive online state locally, by only downloading changes from OneDrive. Do not upload local changes to OneDrive.",
|
||||
&boolValues["download_only"],
|
||||
|
@ -2006,6 +2010,18 @@ class ApplicationConfig {
|
|||
operationalConflictDetected = true;
|
||||
}
|
||||
|
||||
// --monitor and --display-quota cannot be used together
|
||||
if ((getValueBool("monitor")) && (getValueBool("display_quota"))) {
|
||||
log.error("ERROR: --monitor and --display-quota cannot be used together");
|
||||
operationalConflictDetected = true;
|
||||
}
|
||||
|
||||
// --sync and and --display-quota cannot be used together
|
||||
if ((getValueBool("synchronize")) && (getValueBool("display_quota"))) {
|
||||
log.error("ERROR: --sync and and --display-quota cannot be used together");
|
||||
operationalConflictDetected = true;
|
||||
}
|
||||
|
||||
// --force-sync can only be used when using --sync --single-directory
|
||||
if (getValueBool("force_sync")) {
|
||||
|
||||
|
|
10
src/main.d
10
src/main.d
|
@ -401,6 +401,7 @@ int main(string[] cliArgs) {
|
|||
// - Are we just creating a directory online, without any sync being performed?
|
||||
// - Are we just deleting a directory online, without any sync being performed?
|
||||
// - Are we renaming or moving a directory?
|
||||
// - Are we displaying the quota information?
|
||||
|
||||
// --get-sharepoint-drive-id - Get the SharePoint Library drive_id
|
||||
if (appConfig.getValueString("sharepoint_library_name") != "") {
|
||||
|
@ -488,6 +489,15 @@ int main(string[] cliArgs) {
|
|||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
// Are we displaying the quota information?
|
||||
if (appConfig.getValueBool("display_quota")) {
|
||||
// Query and respond with the quota details
|
||||
syncEngineInstance.queryOneDriveForQuotaDetails();
|
||||
// Exit application
|
||||
// Use exit scopes to shutdown API
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
// If we get to this point, we have not performed a 'no-sync' task ..
|
||||
log.error("\nYour command line input is missing either the '--sync' or '--monitor' switches. Please include one (but not both) of these switches in your command line, or refer to 'onedrive --help' for additional guidance.\n");
|
||||
log.error("It is important to note that you must include one of these two arguments in your command line for the application to perform a synchronisation with Microsoft OneDrive\n");
|
||||
|
|
81
src/sync.d
81
src/sync.d
|
@ -7017,4 +7017,85 @@ class SyncEngine {
|
|||
log.error("Selected path not found on local system: ", inputFilePath);
|
||||
}
|
||||
}
|
||||
|
||||
// Query OneDrive for the quota details
|
||||
void queryOneDriveForQuotaDetails() {
|
||||
// This function is similar to getRemainingFreeSpace() but is different in data being analysed and output method
|
||||
|
||||
JSONValue currentDriveQuota;
|
||||
string driveId;
|
||||
|
||||
if (appConfig.getValueString("drive_id").length) {
|
||||
driveId = appConfig.getValueString("drive_id");
|
||||
} else {
|
||||
driveId = appConfig.defaultDriveId;
|
||||
}
|
||||
|
||||
try {
|
||||
// Create a new OneDrive API instance
|
||||
OneDriveApi getCurrentDriveQuotaApiInstance;
|
||||
getCurrentDriveQuotaApiInstance = new OneDriveApi(appConfig);
|
||||
getCurrentDriveQuotaApiInstance.initialise();
|
||||
log.vdebug("Seeking available quota for this drive id: ", driveId);
|
||||
currentDriveQuota = getCurrentDriveQuotaApiInstance.getDriveQuota(driveId);
|
||||
// Shut this API instance down
|
||||
getCurrentDriveQuotaApiInstance.shutdown();
|
||||
// Free object and memory
|
||||
object.destroy(getCurrentDriveQuotaApiInstance);
|
||||
} catch (OneDriveException e) {
|
||||
log.vdebug("currentDriveQuota = onedrive.getDriveQuota(driveId) generated a OneDriveException");
|
||||
}
|
||||
|
||||
// validate that currentDriveQuota is a JSON value
|
||||
if (currentDriveQuota.type() == JSONType.object) {
|
||||
// was 'quota' in response?
|
||||
if ("quota" in currentDriveQuota) {
|
||||
|
||||
// debug output of response
|
||||
log.vdebug("currentDriveQuota: ", currentDriveQuota);
|
||||
|
||||
// human readable output of response
|
||||
string deletedValue = "Not Provided";
|
||||
string remainingValue = "Not Provided";
|
||||
string stateValue = "Not Provided";
|
||||
string totalValue = "Not Provided";
|
||||
string usedValue = "Not Provided";
|
||||
|
||||
// Update values
|
||||
if ("deleted" in currentDriveQuota["quota"]) {
|
||||
deletedValue = to!string(currentDriveQuota["quota"]["deleted"].integer);
|
||||
}
|
||||
|
||||
if ("remaining" in currentDriveQuota["quota"]) {
|
||||
remainingValue = to!string(currentDriveQuota["quota"]["remaining"].integer);
|
||||
}
|
||||
|
||||
if ("state" in currentDriveQuota["quota"]) {
|
||||
stateValue = currentDriveQuota["quota"]["state"].str;
|
||||
}
|
||||
|
||||
if ("total" in currentDriveQuota["quota"]) {
|
||||
totalValue = to!string(currentDriveQuota["quota"]["total"].integer);
|
||||
}
|
||||
|
||||
if ("used" in currentDriveQuota["quota"]) {
|
||||
usedValue = to!string(currentDriveQuota["quota"]["used"].integer);
|
||||
}
|
||||
|
||||
writeln("Microsoft OneDrive quota information as reported for this Drive ID: ", driveId);
|
||||
writeln();
|
||||
writeln("Deleted: ", deletedValue);
|
||||
writeln("Remaining: ", remainingValue);
|
||||
writeln("State: ", stateValue);
|
||||
writeln("Total: ", totalValue);
|
||||
writeln("Used: ", usedValue);
|
||||
writeln();
|
||||
writeln("The numeric values above are expressed in bytes");
|
||||
|
||||
} else {
|
||||
writeln("Microsoft OneDrive quota information is being restricted for this Drive ID: ", driveId);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue