From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- comm/mail/modules/FolderTreeProperties.jsm | 84 ++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 comm/mail/modules/FolderTreeProperties.jsm (limited to 'comm/mail/modules/FolderTreeProperties.jsm') diff --git a/comm/mail/modules/FolderTreeProperties.jsm b/comm/mail/modules/FolderTreeProperties.jsm new file mode 100644 index 0000000000..6931c2794a --- /dev/null +++ b/comm/mail/modules/FolderTreeProperties.jsm @@ -0,0 +1,84 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * Persistent storage for various properties of items on the folder tree. + * Data is serialised to the file folderTree.json in the profile directory. + */ + +const EXPORTED_SYMBOLS = ["FolderTreeProperties"]; + +const { JSONFile } = ChromeUtils.importESModule( + "resource://gre/modules/JSONFile.sys.mjs" +); + +var jsonFile = new JSONFile({ + path: PathUtils.join(PathUtils.profileDir, "folderTree.json"), +}); +var readyPromise = jsonFile.load(); + +function ensureReady() { + if (!jsonFile.dataReady) { + throw new Error("Folder tree properties cache not ready."); + } +} + +var FolderTreeProperties = { + get ready() { + return readyPromise; + }, + + /** + * Get the colour associated with a folder. + * + * @param {string} folderURI + * @returns {?string} + */ + getColor(folderURI) { + ensureReady(); + return jsonFile.data.colors?.[folderURI]; + }, + + /** + * Set the colour associated with a folder. + * + * @param {string} folderURI + * @param {string} color + */ + setColor(folderURI, color) { + ensureReady(); + jsonFile.data.colors = jsonFile.data.colors ?? {}; + jsonFile.data.colors[folderURI] = color; + jsonFile.saveSoon(); + }, + + resetColors() { + ensureReady(); + delete jsonFile.data.colors; + jsonFile.saveSoon(); + }, + + getIsExpanded(folderURI, mode) { + ensureReady(); + if (!Array.isArray(jsonFile.data.open?.[mode])) { + return false; + } + return jsonFile.data.open[mode].includes(folderURI); + }, + + setIsExpanded(folderURI, mode, isExpanded) { + ensureReady(); + jsonFile.data.open = jsonFile.data.open ?? {}; + jsonFile.data.open[mode] = jsonFile.data.open[mode] ?? []; + let index = jsonFile.data.open[mode].indexOf(folderURI); + if (isExpanded) { + if (index < 0) { + jsonFile.data.open[mode].push(folderURI); + } + } else if (index >= 0) { + jsonFile.data.open[mode].splice(index, 1); + } + jsonFile.saveSoon(); + }, +}; -- cgit v1.2.3