forked from EVOgeek/Vmeda.Online
MOBILE-2825 data: Delete offline files after sync
parent
bd1fb5bd54
commit
6d55c50b01
|
@ -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.
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue