forked from EVOgeek/Vmeda.Online
MOBILE-3954 storage: Move space usage from preferences
parent
9caa1f06d5
commit
e97f70d1fb
|
@ -10,12 +10,31 @@
|
||||||
</ion-header>
|
</ion-header>
|
||||||
<ion-content>
|
<ion-content>
|
||||||
<core-loading [hideUntil]="loaded">
|
<core-loading [hideUntil]="loaded">
|
||||||
|
|
||||||
|
<ion-card>
|
||||||
|
<ion-item class="ion-text-wrap">
|
||||||
|
<ion-label>{{ 'addon.storagemanager.info' | translate }}</ion-label>
|
||||||
|
</ion-item>
|
||||||
|
<ion-item class="ion-text-wrap" *ngIf="spaceUsage">
|
||||||
|
<ion-label>
|
||||||
|
<p class="item-heading ion-text-wrap">{{ 'core.settings.spaceusage' | translate }}</p>
|
||||||
|
<ion-badge color="light" *ngIf="spaceUsage.spaceUsage">{{ spaceUsage.spaceUsage | coreBytesToSize }}</ion-badge>
|
||||||
|
<p>
|
||||||
|
{{ 'core.settings.spaceusagehelp' | translate }}
|
||||||
|
</p>
|
||||||
|
</ion-label>
|
||||||
|
<ion-button fill="clear" color="danger" slot="end" (click)="deleteSiteStorage()"
|
||||||
|
[hidden]="spaceUsage.spaceUsage! + spaceUsage.cacheEntries! <= 0"
|
||||||
|
[attr.aria-label]="'core.settings.deletesitefilestitle' | translate">
|
||||||
|
<ion-icon name="fas-trash" slot="icon-only" aria-hidden="true"></ion-icon>
|
||||||
|
</ion-button>
|
||||||
|
</ion-item>
|
||||||
|
</ion-card>
|
||||||
|
|
||||||
<ion-card>
|
<ion-card>
|
||||||
<ion-card-header>
|
<ion-card-header>
|
||||||
<p class="ion-text-wrap">{{ 'addon.storagemanager.info' | translate }}</p>
|
|
||||||
<ion-card-title class="ion-text-wrap">{{ 'core.courses.courses' | translate }}</ion-card-title>
|
<ion-card-title class="ion-text-wrap">{{ 'core.courses.courses' | translate }}</ion-card-title>
|
||||||
<ion-item class="size ion-text-wrap ion-no-padding" lines="none">
|
<ion-item class="size ion-text-wrap ion-no-padding" lines="none">
|
||||||
<ion-icon name="fas-archive" slot="start" aria-hidden="true"></ion-icon>
|
|
||||||
<ion-label>
|
<ion-label>
|
||||||
<h2 class="ion-text-wrap">{{ 'addon.storagemanager.storageused' | translate }}</h2>
|
<h2 class="ion-text-wrap">{{ 'addon.storagemanager.storageused' | translate }}</h2>
|
||||||
<ion-badge color="light">{{ totalSize | coreBytesToSize }}</ion-badge>
|
<ion-badge color="light">{{ totalSize | coreBytesToSize }}</ion-badge>
|
||||||
|
@ -28,10 +47,11 @@
|
||||||
</ion-item>
|
</ion-item>
|
||||||
</ion-card-header>
|
</ion-card-header>
|
||||||
</ion-card>
|
</ion-card>
|
||||||
|
|
||||||
<ion-card *ngIf="downloadedCourses.length">
|
<ion-card *ngIf="downloadedCourses.length">
|
||||||
<ion-card-content class="ion-no-padding">
|
<ion-card-content class="ion-no-padding">
|
||||||
<ion-list>
|
<ion-list>
|
||||||
<ion-item *ngFor="let course of downloadedCourses" class="course" (click)="openCourse(course.id)" button>
|
<ion-item *ngFor="let course of downloadedCourses" class="course" (click)="openCourse(course.id, course.title)" button>
|
||||||
<ion-label class="ion-text-wrap">
|
<ion-label class="ion-text-wrap">
|
||||||
<p class="item-heading">{{ course.title }}</p>
|
<p class="item-heading">{{ course.title }}</p>
|
||||||
<p class="item-heading item-heading-secondary" *ngIf="course.isDownloading">
|
<p class="item-heading item-heading-secondary" *ngIf="course.isDownloading">
|
||||||
|
|
|
@ -18,6 +18,7 @@ import { CoreCourse, CoreCourseProvider } from '@features/course/services/course
|
||||||
import { CoreCourseHelper } from '@features/course/services/course-helper';
|
import { CoreCourseHelper } from '@features/course/services/course-helper';
|
||||||
import { CoreCourseModulePrefetchDelegate } from '@features/course/services/module-prefetch-delegate';
|
import { CoreCourseModulePrefetchDelegate } from '@features/course/services/module-prefetch-delegate';
|
||||||
import { CoreCourses, CoreEnrolledCourseData } from '@features/courses/services/courses';
|
import { CoreCourses, CoreEnrolledCourseData } from '@features/courses/services/courses';
|
||||||
|
import { CoreSettingsHelper, CoreSiteSpaceUsage } from '@features/settings/services/settings-helper';
|
||||||
import { CoreSiteHome } from '@features/sitehome/services/sitehome';
|
import { CoreSiteHome } from '@features/sitehome/services/sitehome';
|
||||||
import { CoreNavigator } from '@services/navigator';
|
import { CoreNavigator } from '@services/navigator';
|
||||||
import { CoreSites } from '@services/sites';
|
import { CoreSites } from '@services/sites';
|
||||||
|
@ -41,8 +42,17 @@ export class AddonStorageManagerCoursesStoragePage implements OnInit, OnDestroy
|
||||||
completelyDownloadedCourses: DownloadedCourse[] = [];
|
completelyDownloadedCourses: DownloadedCourse[] = [];
|
||||||
totalSize = 0;
|
totalSize = 0;
|
||||||
loaded = false;
|
loaded = false;
|
||||||
|
spaceUsage: CoreSiteSpaceUsage = {
|
||||||
|
cacheEntries: 0,
|
||||||
|
spaceUsage: 0,
|
||||||
|
};
|
||||||
|
|
||||||
courseStatusObserver?: CoreEventObserver;
|
courseStatusObserver?: CoreEventObserver;
|
||||||
|
siteId: string;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.siteId = CoreSites.getCurrentSiteId();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
|
@ -77,6 +87,8 @@ export class AddonStorageManagerCoursesStoragePage implements OnInit, OnDestroy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.spaceUsage = await CoreSettingsHelper.getSiteSpaceUsage(this.siteId);
|
||||||
|
|
||||||
this.setDownloadedCourses(downloadedCourses);
|
this.setDownloadedCourses(downloadedCourses);
|
||||||
|
|
||||||
this.loaded = true;
|
this.loaded = true;
|
||||||
|
@ -227,6 +239,21 @@ export class AddonStorageManagerCoursesStoragePage implements OnInit, OnDestroy
|
||||||
CoreNavigator.navigateToSitePath('/storage/' + courseId, { params: { title } });
|
CoreNavigator.navigateToSitePath('/storage/' + courseId, { params: { title } });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes files of a site and the tables that can be cleared.
|
||||||
|
*
|
||||||
|
* @param siteData Site object with space usage.
|
||||||
|
*/
|
||||||
|
async deleteSiteStorage(): Promise<void> {
|
||||||
|
try {
|
||||||
|
const siteName = CoreSites.getRequiredCurrentSite().getSiteName();
|
||||||
|
|
||||||
|
this.spaceUsage = await CoreSettingsHelper.deleteSiteStorage(siteName, this.siteId);
|
||||||
|
} catch {
|
||||||
|
// Ignore cancelled confirmation modal.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -27,28 +27,15 @@
|
||||||
</ion-label>
|
</ion-label>
|
||||||
</ion-item>
|
</ion-item>
|
||||||
</ion-list>
|
</ion-list>
|
||||||
|
|
||||||
<ion-card>
|
<ion-card>
|
||||||
<ion-item class="ion-text-wrap" *ngIf="spaceUsage">
|
|
||||||
<ion-label>
|
|
||||||
<p class="item-heading ion-text-wrap">{{ 'core.settings.spaceusage' | translate }}</p>
|
|
||||||
<p *ngIf="spaceUsage.spaceUsage">{{ spaceUsage.spaceUsage | coreBytesToSize }}</p>
|
|
||||||
</ion-label>
|
|
||||||
<ion-button fill="clear" [attr.aria-label]="'core.info' | translate" (click)="showSpaceInfo()" slot="end">
|
|
||||||
<ion-icon name="fas-info-circle" color="info" slot="icon-only"></ion-icon>
|
|
||||||
</ion-button>
|
|
||||||
<ion-button fill="clear" color="danger" slot="end" (click)="deleteSiteStorage()"
|
|
||||||
[hidden]="spaceUsage.spaceUsage! + spaceUsage.cacheEntries! <= 0"
|
|
||||||
[attr.aria-label]="'core.settings.deletesitefilestitle' | translate">
|
|
||||||
<ion-icon name="fas-trash" slot="icon-only" aria-hidden="true"></ion-icon>
|
|
||||||
</ion-button>
|
|
||||||
</ion-item>
|
|
||||||
<ion-item class="ion-text-wrap">
|
<ion-item class="ion-text-wrap">
|
||||||
<ion-label>
|
<ion-label>
|
||||||
<p class="item-heading">{{ 'core.settings.synchronizenow' | translate }}</p>
|
<p class="item-heading">{{ 'core.settings.synchronizenow' | translate }}</p>
|
||||||
|
<p>
|
||||||
|
{{ 'core.settings.synchronizenowhelp' | translate }}
|
||||||
|
</p>
|
||||||
</ion-label>
|
</ion-label>
|
||||||
<ion-button fill="clear" [attr.aria-label]="'core.info' | translate" (click)="showSyncInfo()" slot="end">
|
|
||||||
<ion-icon name="fas-info-circle" color="info" slot="icon-only"></ion-icon>
|
|
||||||
</ion-button>
|
|
||||||
<core-button-with-spinner [loading]="isSynchronizing()" slot="end">
|
<core-button-with-spinner [loading]="isSynchronizing()" slot="end">
|
||||||
<ion-button fill="clear" (click)="synchronize()" [attr.aria-label]="'core.settings.synchronizenow' | translate">
|
<ion-button fill="clear" (click)="synchronize()" [attr.aria-label]="'core.settings.synchronizenow' | translate">
|
||||||
<ion-icon name="fas-sync-alt" slot="icon-only" aria-hidden="true"></ion-icon>
|
<ion-icon name="fas-sync-alt" slot="icon-only" aria-hidden="true"></ion-icon>
|
||||||
|
|
|
@ -18,15 +18,13 @@ import { IonRefresher } from '@ionic/angular';
|
||||||
import { CoreSettingsHandlerToDisplay } from '../../services/settings-delegate';
|
import { CoreSettingsHandlerToDisplay } from '../../services/settings-delegate';
|
||||||
import { CoreEventObserver, CoreEvents } from '@singletons/events';
|
import { CoreEventObserver, CoreEvents } from '@singletons/events';
|
||||||
import { CoreSites } from '@services/sites';
|
import { CoreSites } from '@services/sites';
|
||||||
import { CoreDomUtils } from '@services/utils/dom';
|
|
||||||
import { CoreSettingsHelper, CoreSiteSpaceUsage } from '../../services/settings-helper';
|
|
||||||
import { CoreApp } from '@services/app';
|
|
||||||
import { Translate } from '@singletons';
|
|
||||||
import { CoreNavigator } from '@services/navigator';
|
import { CoreNavigator } from '@services/navigator';
|
||||||
import { CoreSplitViewComponent } from '@components/split-view/split-view';
|
import { CoreSplitViewComponent } from '@components/split-view/split-view';
|
||||||
import { CoreListItemsManager } from '@classes/items-management/list-items-manager';
|
import { CoreListItemsManager } from '@classes/items-management/list-items-manager';
|
||||||
import { CoreRoutedItemsManagerSourcesTracker } from '@classes/items-management/routed-items-manager-sources-tracker';
|
import { CoreRoutedItemsManagerSourcesTracker } from '@classes/items-management/routed-items-manager-sources-tracker';
|
||||||
import { CoreSettingsHandlersSource } from '@features/settings/classes/settings-handlers-source';
|
import { CoreSettingsHandlersSource } from '@features/settings/classes/settings-handlers-source';
|
||||||
|
import { CoreSettingsHelper } from '@features/settings/services/settings-helper';
|
||||||
|
import { CoreDomUtils } from '@services/utils/dom';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Page that displays the list of site settings pages.
|
* Page that displays the list of site settings pages.
|
||||||
|
@ -41,18 +39,11 @@ export class CoreSitePreferencesPage implements AfterViewInit, OnDestroy {
|
||||||
|
|
||||||
handlers: CoreListItemsManager<CoreSettingsHandlerToDisplay>;
|
handlers: CoreListItemsManager<CoreSettingsHandlerToDisplay>;
|
||||||
|
|
||||||
isIOS: boolean;
|
protected siteId: string;
|
||||||
siteId: string;
|
|
||||||
spaceUsage: CoreSiteSpaceUsage = {
|
|
||||||
cacheEntries: 0,
|
|
||||||
spaceUsage: 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
protected sitesObserver: CoreEventObserver;
|
protected sitesObserver: CoreEventObserver;
|
||||||
protected isDestroyed = false;
|
protected isDestroyed = false;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.isIOS = CoreApp.isIOS();
|
|
||||||
this.siteId = CoreSites.getCurrentSiteId();
|
this.siteId = CoreSites.getCurrentSiteId();
|
||||||
|
|
||||||
const source = CoreRoutedItemsManagerSourcesTracker.getOrCreateSource(CoreSettingsHandlersSource, []);
|
const source = CoreRoutedItemsManagerSourcesTracker.getOrCreateSource(CoreSettingsHandlersSource, []);
|
||||||
|
@ -90,8 +81,6 @@ export class CoreSitePreferencesPage implements AfterViewInit, OnDestroy {
|
||||||
*/
|
*/
|
||||||
protected async fetchData(): Promise<void> {
|
protected async fetchData(): Promise<void> {
|
||||||
await this.handlers.load();
|
await this.handlers.load();
|
||||||
|
|
||||||
this.spaceUsage = await CoreSettingsHelper.getSiteSpaceUsage(this.siteId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -131,41 +120,6 @@ export class CoreSitePreferencesPage implements AfterViewInit, OnDestroy {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Deletes files of a site and the tables that can be cleared.
|
|
||||||
*
|
|
||||||
* @param siteData Site object with space usage.
|
|
||||||
*/
|
|
||||||
async deleteSiteStorage(): Promise<void> {
|
|
||||||
try {
|
|
||||||
const siteName = CoreSites.getRequiredCurrentSite().getSiteName();
|
|
||||||
|
|
||||||
this.spaceUsage = await CoreSettingsHelper.deleteSiteStorage(siteName, this.siteId);
|
|
||||||
} catch {
|
|
||||||
// Ignore cancelled confirmation modal.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show information about space usage actions.
|
|
||||||
*/
|
|
||||||
showSpaceInfo(): void {
|
|
||||||
CoreDomUtils.showAlert(
|
|
||||||
Translate.instant('core.help'),
|
|
||||||
Translate.instant('core.settings.spaceusagehelp'),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show information about sync actions.
|
|
||||||
*/
|
|
||||||
showSyncInfo(): void {
|
|
||||||
CoreDomUtils.showAlert(
|
|
||||||
Translate.instant('core.help'),
|
|
||||||
Translate.instant('core.settings.synchronizenowhelp'),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Page destroyed.
|
* Page destroyed.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue