Increase the maximum number of URLs queued.

The number of URLs queued is restricted to ~60 because the queue is stored as a single item and is therefore is restricted to 8k.
Instead store each URLs as a separate item with a name 'qi'+number and gather them into a single array when loading/storing.
This commit is contained in:
David Welch 2020-11-25 19:38:18 +00:00
parent 792bd26d4f
commit a668da05a1
1 changed files with 24 additions and 6 deletions

View File

@ -24,9 +24,17 @@ const defaultSettings: Settings = {
* Returns the user's settings.
*/
export async function getSettings(): Promise<Settings> {
const syncSettings: any = await browser.storage.sync.get(defaultSettings);
const syncSettings: any = await browser.storage.sync.get();
const queue: QItem[] = syncSettings.queue;
// Append properties with a name matching 'qi'x to queue.
const queue: QItem[] = [];
if (syncSettings !== undefined) {
for (const prop in syncSettings) {
if (prop.startsWith('qi')) {
queue.push(syncSettings[prop]);
}
}
}
// Initialize all the non-JSON values, as they are stringified when saved.
for (const item of queue) {
@ -34,9 +42,10 @@ export async function getSettings(): Promise<Settings> {
}
const settings: Settings = {
latestVersion: syncSettings.latestVersion,
latestVersion: syncSettings.latestVersion ?? defaultSettings.latestVersion,
queue,
versionGotUpdated: syncSettings.versionGotUpdated
versionGotUpdated:
syncSettings.versionGotUpdated ?? defaultSettings.versionGotUpdated
};
return settings;
@ -47,7 +56,15 @@ export async function getSettings(): Promise<Settings> {
* @param settings The settings to save.
*/
export async function saveSettings(settings: Settings): Promise<Settings> {
await browser.storage.sync.set(settings);
const syncSettings: any = {
latestVersion: settings.latestVersion,
versionGotUpdated: settings.versionGotUpdated
};
for (const item of settings.queue) {
syncSettings['qi' + item.id.toString()] = item;
}
await browser.storage.sync.set(syncSettings);
return settings;
}
@ -84,7 +101,8 @@ export async function removeQItem(
}
settings.queue.splice(index, 1);
return saveSettings(settings);
await browser.storage.sync.remove('qi' + id.toString());
return settings;
}
/**