2
0
Fork 0

MOBILE-2825 data: Delete offline files after sync

main
Albert Gasset 2019-02-04 10:51:42 +01:00
parent bd1fb5bd54
commit 6d55c50b01
1 changed files with 47 additions and 2 deletions

View File

@ -17,6 +17,7 @@ import { CoreLoggerProvider } from '@providers/logger';
import { CoreSitesProvider } from '@providers/sites';
import { CoreTextUtilsProvider } from '@providers/utils/text';
import { CoreFileProvider } from '@providers/file';
import { CoreFileUploaderProvider } from '@core/fileuploader/providers/fileuploader';
/**
* Service to handle Offline data.
@ -66,7 +67,7 @@ export class AddonModDataOfflineProvider {
];
constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private textUtils: CoreTextUtilsProvider,
private fileProvider: CoreFileProvider) {
private fileProvider: CoreFileProvider, private fileUploaderProvider: CoreFileUploaderProvider) {
this.logger = logger.getInstance('AddonModDataOfflineProvider');
this.sitesProvider.createTablesFromSchema(this.tablesSchema);
}
@ -102,8 +103,52 @@ export class AddonModDataOfflineProvider {
*/
deleteEntry(dataId: number, entryId: number, action: string, siteId?: string): Promise<any> {
return this.sitesProvider.getSite(siteId).then((site) => {
return site.getDb().deleteRecords(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId, entryid: entryId,
return this.deleteEntryFiles(dataId, entryId, action, site.id).then(() => {
return site.getDb().deleteRecords(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId, entryid: entryId,
action: action});
});
});
}
/**
* Delete entry offline files.
*
* @param {number} dataId Database ID.
* @param {number} entryId Database entry ID.
* @param {string} action Action to be done.
* @param {string} [siteId] Site ID. If not defined, current site.
* @return {Promise<any>} Promise resolved if deleted, rejected if failure.
*/
protected deleteEntryFiles(dataId: number, entryId: number, action: string, siteId?: string): Promise<any> {
return this.sitesProvider.getSite(siteId).then((site) => {
return this.getEntry(dataId, entryId, action, site.id).then((entry) => {
if (!entry.fields) {
return;
}
const promises = [];
entry.fields.forEach((field) => {
const value = this.textUtils.parseJSON(field.value);
if (!value.offline) {
return;
}
const promise = this.getEntryFieldFolder(dataId, entryId, field.fieldid, site.id).then((folderPath) => {
return this.fileUploaderProvider.getStoredFiles(folderPath);
}).then((files) => {
return this.fileUploaderProvider.clearTmpFiles(files);
}).catch(() => {
// Files not found, ignore.
});
promises.push(promise);
});
return Promise.all(promises);
}).catch(() => {
// Entry not found, ignore.
});
});
}