MOBILE-4081 user: Fix offline preference not synchronized

main
Dani Palou 2022-12-13 08:09:20 +01:00
parent 6a11ea5d55
commit efca5aa61c
1 changed files with 16 additions and 1 deletions

View File

@ -15,6 +15,7 @@
import { Injectable } from '@angular/core';
import { CoreSites } from '@services/sites';
import { CoreUtils } from '@services/utils/utils';
import { makeSingleton } from '@singletons';
import { PREFERENCES_TABLE_NAME, CoreUserPreferenceDBRecord } from './database/user';
@ -33,7 +34,10 @@ export class CoreUserOfflineProvider {
async getChangedPreferences(siteId?: string): Promise<CoreUserPreferenceDBRecord[]> {
const site = await CoreSites.getSite(siteId);
return site.getDb().getRecordsSelect(PREFERENCES_TABLE_NAME, 'value != onlineValue');
return site.getDb().getRecordsSelect(
PREFERENCES_TABLE_NAME,
'value != onlinevalue OR onlinevalue IS NULL',
);
}
/**
@ -64,8 +68,19 @@ export class CoreUserOfflineProvider {
const record: Partial<CoreUserPreferenceDBRecord> = {
name,
value,
onlinevalue: onlineValue,
};
if (onlineValue === undefined) {
// Keep online value already stored (if any).
const entry = await CoreUtils.ignoreErrors(
site.getDb().getRecord<CoreUserPreferenceDBRecord>(PREFERENCES_TABLE_NAME, { name }),
null,
);
record.onlinevalue = entry?.onlinevalue;
}
await site.getDb().insertRecord(PREFERENCES_TABLE_NAME, record);
}