From ac12b5093906e3a09724f96fee0c1a5141e52d3b Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Tue, 7 Sep 2021 11:12:58 -0400 Subject: [PATCH] Dictionary import count details (#1935) * Store count information when importing a dictionary * Add importDate * Update property ordering * Update tests * Update importDate --- ext/js/language/dictionary-importer.js | 28 ++++++++++++++++++++++++-- test/test-database.js | 12 ++++++++++- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/ext/js/language/dictionary-importer.js b/ext/js/language/dictionary-importer.js index 5629e197..4144de66 100644 --- a/ext/js/language/dictionary-importer.js +++ b/ext/js/language/dictionary-importer.js @@ -128,7 +128,15 @@ class DictionaryImporter { // Add dictionary descriptor this._progressNextStep(termList.length + termMetaList.length + kanjiList.length + kanjiMetaList.length + tagList.length + media.length); - const summary = this._createSummary(dictionaryTitle, version, index, {prefixWildcardsSupported}); + const counts = { + terms: {total: termList.length}, + termMeta: this._getMetaCounts(termMetaList), + kanji: {total: kanjiList.length}, + kanjiMeta: this._getMetaCounts(kanjiMetaList), + tagMeta: {total: tagList.length}, + media: {total: media.length} + }; + const summary = this._createSummary(dictionaryTitle, version, index, {prefixWildcardsSupported, counts}); dictionaryDatabase.bulkAdd('dictionaries', [summary], 0, 1); // Add data @@ -189,7 +197,8 @@ class DictionaryImporter { title: dictionaryTitle, revision: index.revision, sequenced: index.sequenced, - version + version, + importDate: Date.now() }; const {author, url, description, attribution} = index; @@ -556,4 +565,19 @@ class DictionaryImporter { } return results; } + + _getMetaCounts(metaList) { + const countsMap = new Map(); + for (const {mode} of metaList) { + let count = countsMap.get(mode); + count = typeof count !== 'undefined' ? count + 1 : 1; + countsMap.set(mode, count); + } + const counts = {total: metaList.length}; + for (const [key, value] of countsMap.entries()) { + if (Object.prototype.hasOwnProperty.call(counts, key)) { continue; } + counts[key] = value; + } + return counts; + } } diff --git a/test/test-database.js b/test/test-database.js index a87a3f72..c24dedbd 100644 --- a/test/test-database.js +++ b/test/test-database.js @@ -147,7 +147,16 @@ async function testDatabase1() { revision: 'test', sequenced: true, version: 3, - prefixWildcardsSupported: true + importDate: 0, + prefixWildcardsSupported: true, + counts: { + kanji: {total: 2}, + kanjiMeta: {total: 2, freq: 2}, + media: {total: 4}, + tagMeta: {total: 15}, + termMeta: {total: 16, freq: 9, pitch: 7}, + terms: {total: 20} + } }; // Import data @@ -158,6 +167,7 @@ async function testDatabase1() { testDictionarySource, {prefixWildcardsSupported: true} ); + expectedSummary.importDate = result.importDate; vm.assert.deepStrictEqual(errors, []); vm.assert.deepStrictEqual(result, expectedSummary); assert.ok(progressEvent);