diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js index db5b95cb4c..d1fed21a1f 100644 --- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js @@ -23,6 +23,8 @@ import SettingsStore from "../../../../../settings/SettingsStore"; import Field from "../../../elements/Field"; import * as sdk from "../../../../.."; import PlatformPeg from "../../../../../PlatformPeg"; +import EventIndexPeg from "../../../../../indexing/EventIndexPeg"; +import {formatBytes} from "../../../../../utils/FormattingUtils"; export default class PreferencesUserSettingsTab extends React.Component { static COMPOSER_SETTINGS = [ @@ -70,6 +72,13 @@ export default class PreferencesUserSettingsTab extends React.Component { alwaysShowMenuBarSupported: false, minimizeToTray: true, minimizeToTraySupported: false, + eventIndexSize: 0, + crawlingRooms: 0, + totalCrawlingRooms: 0, + eventIndexingEnabled: + SettingsStore.getValueAt(SettingLevel.DEVICE, 'enableCrawling'), + crawlerSleepTime: + SettingsStore.getValueAt(SettingLevel.DEVICE, 'crawlerSleepTime'), autocompleteDelay: SettingsStore.getValueAt(SettingLevel.DEVICE, 'autocompleteDelay').toString(10), readMarkerInViewThresholdMs: @@ -100,6 +109,19 @@ export default class PreferencesUserSettingsTab extends React.Component { minimizeToTray = await platform.getMinimizeToTrayEnabled(); } + let eventIndexSize = 0; + let crawlingRooms = 0; + let totalCrawlingRooms = 0; + + let eventIndex = EventIndexPeg.get(); + + if (eventIndex !== null) { + eventIndexSize = await eventIndex.indexSize(); + let crawledRooms = eventIndex.currentlyCrawledRooms(); + crawlingRooms = crawledRooms.crawlingRooms.size; + totalCrawlingRooms = crawledRooms.totalRooms.size; + } + this.setState({ autoLaunch, autoLaunchSupported, @@ -107,6 +129,9 @@ export default class PreferencesUserSettingsTab extends React.Component { alwaysShowMenuBar, minimizeToTraySupported, minimizeToTray, + eventIndexSize, + crawlingRooms, + totalCrawlingRooms, }); } @@ -137,6 +162,20 @@ export default class PreferencesUserSettingsTab extends React.Component { SettingsStore.setValue("readMarkerOutOfViewThresholdMs", null, SettingLevel.DEVICE, e.target.value); }; + _onEventIndexingEnabledChange = (checked) => { + SettingsStore.setValue("enableCrawling", null, SettingLevel.DEVICE, checked); + + if (checked) EventIndexPeg.start(); + else EventIndexPeg.stop(); + + this.setState({eventIndexingEnabled: checked}); + } + + _onCrawlerSleepTimeChange = (e) => { + this.setState({crawlerSleepTime: e.target.value}); + SettingsStore.setValue("crawlerSleepTime", null, SettingLevel.DEVICE, e.target.value); + } + _renderGroup(settingIds) { const SettingsFlag = sdk.getComponent("views.elements.SettingsFlag"); return settingIds.map(i => ); @@ -167,9 +206,61 @@ export default class PreferencesUserSettingsTab extends React.Component { label={_t('Show tray icon and minimize window to it on close')} />; } + let eventIndexingSettings = null; + let crawlerState; + + if (!this.state.eventIndexingEnabled) { + crawlerState =
{_t("Message downloader is stopped.")}
; + } + else if (this.state.crawlingRooms === 0) { + crawlerState =
{_t("Message downloader is currently idle.")}
; + } else { + crawlerState = ( +
{_t( + "Currently downloading mesages in %(crawlingRooms)s of %(totalRooms)s rooms.", + { crawlingRooms: this.state.crawlingRooms, + totalRooms: this.state.totalCrawlingRooms, + })} +
+ ); + } + + if (EventIndexPeg.get() !== null) { + eventIndexingSettings = ( +
+ {_t("Encrypted search")} + { + _t( "To enable search in encrypted rooms, Riot needs to run " + + "a background process to download historical messages " + + "from those rooms to your computer." + ) + } +
+ {_t("Message disk usage:")} {formatBytes(this.state.eventIndexSize, 0)}
+ {crawlerState}
+
+ + + + +
+ ); + } + return (
{_t("Preferences")}
+ + {eventIndexingSettings} +
{_t("Composer")} {this._renderGroup(PreferencesUserSettingsTab.COMPOSER_SETTINGS)} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index f8b17db7c5..aa8583cf8d 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -415,6 +415,7 @@ "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)", "Send read receipts for messages (requires compatible homeserver to disable)": "Send read receipts for messages (requires compatible homeserver to disable)", "Show previews/thumbnails for images": "Show previews/thumbnails for images", + "How long should the crawler wait between requests": "How long should the crawler wait between requests", "Collecting app version information": "Collecting app version information", "Collecting logs": "Collecting logs", "Uploading report": "Uploading report", @@ -731,6 +732,14 @@ "Start automatically after system login": "Start automatically after system login", "Always show the window menu bar": "Always show the window menu bar", "Show tray icon and minimize window to it on close": "Show tray icon and minimize window to it on close", + "Message downloader is stopped.": "Message downloader is stopped.", + "Message downloader is currently idle.": "Message downloader is currently idle.", + "Currently downloading mesages in %(crawlingRooms)s of %(totalRooms)s rooms.": "Currently downloading mesages in %(crawlingRooms)s of %(totalRooms)s rooms.", + "Encrypted search": "Encrypted search", + "To enable search in encrypted rooms, Riot needs to run a background process to download historical messages from those rooms to your computer.": "To enable search in encrypted rooms, Riot needs to run a background process to download historical messages from those rooms to your computer.", + "Message disk usage:": "Message disk usage:", + "Enable message downloading": "Enable message downloading", + "Message downloading sleep time(ms)": "Message downloading sleep time(ms)", "Preferences": "Preferences", "Composer": "Composer", "Timeline": "Timeline",