@using hassio_onedrive_backup.Contracts; @using hassio_onedrive_backup.Graph; @using hassio_onedrive_backup.Hass; @using hassio_onedrive_backup; @inject IJSRuntime JS @inject AddonOptions AddonOptions @inject HassOnedriveEntityState HassOnedriveEntityState @inject HassOnedriveFreeSpaceEntityState HassOnedriveFreeSpaceEntityState @inject HassOnedriveFileSyncEntityState HassOnedriveFileSyncEntityState @inject Orchestrator Orchestrator @inject IGraphHelper GraphHelper
Summary @SummaryBadgeText @if (HassOnedriveEntityState.State == HassOnedriveEntityState.BackupState.Syncing) {
Loading...
}
@if (GraphHelper.IsAuthenticated == true) {
@* @UploadSpeed *@
}
OneDrive Storage
@if (HassOnedriveFreeSpaceEntityState.FreeSpaceGB == null) {
Initializing
} else {
Used: @(OneDriveUsedSpacePercentage)%
}
Local Backups
@HassOnedriveEntityState.BackupsInHomeAssistant / @AddonOptions.MaxLocalBackups
@*
*@
OneDrive Backups
@HassOnedriveEntityState.BackupsInOnedrive / @AddonOptions.MaxOnedriveBackups
@*
*@
Last Backup Date
@if (LastBackupDate == null) { None } else { @LastBackupDate }
Backup Upload Progress
@if (HassOnedriveEntityState.UploadPercentage == null) { N/A } else {
@BackupUploadSpeed
}
@if (AddonOptions.FileSyncEnabled) {
File Sync Upload Progress
@if (HassOnedriveFileSyncEntityState.State != HassOnedriveFileSyncEntityState.FileState.Syncing) { N/A } else {
@(FileUploadSpeed)
}
}
@code { private bool onDemandBackup = false; private bool refreshingData = false; private int OneDriveUsedSpacePercentage => (int)((OneDriveUsedSpace / (HassOnedriveFreeSpaceEntityState.TotalSpaceGB ?? 1)) * 100); private int LocalBackupsPercentage => (int)((HassOnedriveEntityState.BackupsInHomeAssistant / (double)AddonOptions.MaxLocalBackups) * 100); private int OneDriveBackupsPercentage => (int)((HassOnedriveEntityState.BackupsInOnedrive / (double)AddonOptions.MaxOnedriveBackups) * 100); private string BackupUploadSpeed => ViewHelpers.GetSpeedDisplayText(HassOnedriveEntityState.UploadSpeed); private string FileUploadSpeed => ViewHelpers.GetSpeedDisplayText(HassOnedriveFileSyncEntityState.UploadSpeed); private double OneDriveUsedSpace => ((HassOnedriveFreeSpaceEntityState.TotalSpaceGB ?? 0) - (HassOnedriveFreeSpaceEntityState.FreeSpaceGB ?? 0)); private DateTime? LastBackupDate => HassOnedriveEntityState.LastLocalBackupDate > HassOnedriveEntityState.LastOnedriveBackupDate ? HassOnedriveEntityState.LastLocalBackupDate : HassOnedriveEntityState.LastOnedriveBackupDate; private string FreeSpaceColor => OneDriveUsedSpacePercentage > 90 ? "bg-danger" : "bg-primary"; private string SummaryBadgeColor { get { switch (HassOnedriveEntityState.State) { case HassOnedriveEntityState.BackupState.Stale: return "bg-warning"; case HassOnedriveEntityState.BackupState.Backed_Up: return "bg-success"; case HassOnedriveEntityState.BackupState.Backed_Up_Local: return "bg-secondary"; case HassOnedriveEntityState.BackupState.Backed_Up_Onedrive: return "bg-primary"; case HassOnedriveEntityState.BackupState.Syncing: return "bg-dark"; default: return "bg-dark"; } } } private string SummaryBadgeText { get { switch (HassOnedriveEntityState.State) { case HassOnedriveEntityState.BackupState.Stale: return "Stale"; case HassOnedriveEntityState.BackupState.Backed_Up: return "Backed Up"; case HassOnedriveEntityState.BackupState.Backed_Up_Local: return "Backed Up Local"; case HassOnedriveEntityState.BackupState.Backed_Up_Onedrive: return "Backed Up OneDrive"; case HassOnedriveEntityState.BackupState.Syncing: return "Syncing"; default: return ""; } } } protected override void OnInitialized() { base.OnInitialized(); HassOnedriveFreeSpaceEntityState.PropertyChanged += TriggerStateChanged; HassOnedriveEntityState.PropertyChanged += TriggerStateChanged; HassOnedriveFileSyncEntityState.PropertyChanged += TriggerStateChanged; Orchestrator.BackupManager.OneDriveBackupsUpdated += TriggerStateChanged; Orchestrator.BackupManager.LocalBackupsUpdated += TriggerStateChanged; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { // await JS.InvokeVoidAsync("addTooltips"); } } private async void TriggerBackup() { onDemandBackup = true; bool ret = await Orchestrator.BackupManager.CreateLocalBackup(); onDemandBackup = false; TriggerStateChanged(); } private async void RefreshData() { refreshingData = true; TriggerStateChanged(); await Orchestrator.BackupManager.RefreshBackupData(); refreshingData = false; TriggerStateChanged(); } private async void TriggerStateChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { await InvokeAsync(() => { StateHasChanged(); }); } private async void TriggerStateChanged() { await InvokeAsync(() => { StateHasChanged(); }); } }