forked from mystiq/hydrogen-web
allow opening the logs straight in the log viewer from settings
This commit is contained in:
parent
2a729f8969
commit
d85f93fb16
2 changed files with 34 additions and 2 deletions
|
@ -136,9 +136,14 @@ export class SettingsViewModel extends ViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
async exportLogs() {
|
async exportLogs() {
|
||||||
|
const logs = await this.exportLogsBlob();
|
||||||
|
this.platform.saveFileAs(logs, `hydrogen-logs-${this.platform.clock.now()}.json`);
|
||||||
|
}
|
||||||
|
|
||||||
|
async exportLogsBlob() {
|
||||||
const persister = this.logger.reporters.find(r => typeof r.export === "function");
|
const persister = this.logger.reporters.find(r => typeof r.export === "function");
|
||||||
const logExport = await persister.export();
|
const logExport = await persister.export();
|
||||||
this.platform.saveFileAs(logExport.asBlob(), `hydrogen-logs-${this.platform.clock.now()}.json`);
|
return logExport.asBlob();
|
||||||
}
|
}
|
||||||
|
|
||||||
async togglePushNotifications() {
|
async togglePushNotifications() {
|
||||||
|
|
|
@ -98,13 +98,18 @@ export class SettingsView extends TemplateView {
|
||||||
t.h3("Preferences"),
|
t.h3("Preferences"),
|
||||||
row(t, vm.i18n`Scale down images when sending`, this._imageCompressionRange(t, vm)),
|
row(t, vm.i18n`Scale down images when sending`, this._imageCompressionRange(t, vm)),
|
||||||
);
|
);
|
||||||
|
const logButtons = [t.button({onClick: () => vm.exportLogs()}, "Export")];
|
||||||
|
if (import.meta.env.DEV) {
|
||||||
|
logButtons.push(t.button({onClick: () => openLogs(vm)}, "Open logs"));
|
||||||
|
}
|
||||||
settingNodes.push(
|
settingNodes.push(
|
||||||
t.h3("Application"),
|
t.h3("Application"),
|
||||||
row(t, vm.i18n`Version`, version),
|
row(t, vm.i18n`Version`, version),
|
||||||
row(t, vm.i18n`Storage usage`, vm => `${vm.storageUsage} / ${vm.storageQuota}`),
|
row(t, vm.i18n`Storage usage`, vm => `${vm.storageUsage} / ${vm.storageQuota}`),
|
||||||
row(t, vm.i18n`Debug logs`, t.button({onClick: () => vm.exportLogs()}, "Export")),
|
row(t, vm.i18n`Debug logs`, logButtons),
|
||||||
t.p(["Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited, the usernames of other users and the names of files you send. They do not contain messages. For more information, review our ",
|
t.p(["Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited, the usernames of other users and the names of files you send. They do not contain messages. For more information, review our ",
|
||||||
t.a({href: "https://element.io/privacy", target: "_blank", rel: "noopener"}, "privacy policy"), "."]),
|
t.a({href: "https://element.io/privacy", target: "_blank", rel: "noopener"}, "privacy policy"), "."]),
|
||||||
|
t.p([])
|
||||||
);
|
);
|
||||||
|
|
||||||
return t.main({className: "Settings middle"}, [
|
return t.main({className: "Settings middle"}, [
|
||||||
|
@ -136,3 +141,25 @@ export class SettingsView extends TemplateView {
|
||||||
})];
|
})];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function openLogs(vm) {
|
||||||
|
const logviewerUrl = (await import("../../../../../../scripts/logviewer/index.html?url")).default;
|
||||||
|
const win = window.open(logviewerUrl);
|
||||||
|
await new Promise(async r => {
|
||||||
|
let receivedPong = false;
|
||||||
|
const waitForPong = event => {
|
||||||
|
if (event.data.type === "pong") {
|
||||||
|
window.removeEventListener("message", waitForPong);
|
||||||
|
receivedPong = true;
|
||||||
|
r();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
window.addEventListener("message", waitForPong);
|
||||||
|
while (!receivedPong) {
|
||||||
|
win.postMessage({type: "ping"});
|
||||||
|
await new Promise(rr => setTimeout(rr), 100);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const logs = await vm.exportLogsBlob();
|
||||||
|
win.postMessage({type: "open", logs: logs.nativeBlob});
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue