From acb0416c416c8ecc236c077af186709cb3cb75eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tadeusz=20So=C5=9Bnierz?= Date: Mon, 13 Jul 2020 16:02:10 +0200 Subject: [PATCH] feat(folder): Speed up folder size calculations --- src/app/rmmapi/messagelist.service.ts | 5 ++++- src/app/xapian/rmmxapianapi.ts | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/app/rmmapi/messagelist.service.ts b/src/app/rmmapi/messagelist.service.ts index bf77919c8..4732343e1 100644 --- a/src/app/rmmapi/messagelist.service.ts +++ b/src/app/rmmapi/messagelist.service.ts @@ -121,8 +121,11 @@ export class MessageListService { const folderCounts = {}; for (const folder of folders) { const path = folder.folderPath; + if (xapianFolders.has(path)) { - folderCounts[path] = this.searchservice.getMessageCountsForFolder(path); + const res = this.searchservice.api.getFolderMessageCounts(folder.folderName); + + folderCounts[path] = new FolderMessageCountEntry(res[1], res[0]); } else { folderCounts[path] = FolderMessageCountEntry.of(folder); } diff --git a/src/app/xapian/rmmxapianapi.ts b/src/app/xapian/rmmxapianapi.ts index 2d6cd5c0e..8c42a1905 100644 --- a/src/app/xapian/rmmxapianapi.ts +++ b/src/app/xapian/rmmxapianapi.ts @@ -125,6 +125,25 @@ export class XapianAPI { } + public getFolderMessageCounts(folder: string): number[] { + const $folderString = emAllocateString(folder); + const $results = Module._malloc(4 * 2); + Module.HEAP8.set(new Uint8Array(4 * 2), $results); + + const ret = Module._getFolderMessageCounts($folderString, $results); + let results: number[]; + + if (ret !== 0) { + results = new Array(2); + results[0] = Module.getValue($results, 'i32'); + results[1] = Module.getValue($results + 4, 'i32'); + } + + Module._free($folderString); + Module._free($results); + return results; + } + public sortedXapianQuery(querystring: string, sortcol: number, reverse: number,