summaryrefslogtreecommitdiffstats
path: root/content/manager/eventlog/eventlog.js
diff options
context:
space:
mode:
Diffstat (limited to 'content/manager/eventlog/eventlog.js')
-rw-r--r--content/manager/eventlog/eventlog.js158
1 files changed, 158 insertions, 0 deletions
diff --git a/content/manager/eventlog/eventlog.js b/content/manager/eventlog/eventlog.js
new file mode 100644
index 0000000..eaa0b47
--- /dev/null
+++ b/content/manager/eventlog/eventlog.js
@@ -0,0 +1,158 @@
+/*
+ * This file is part of TbSync.
+ *
+ * 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/.
+ */
+
+ "use strict";
+
+var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+var { TbSync } = ChromeUtils.import("chrome://tbsync/content/tbsync.jsm");
+
+var tbSyncEventLog = {
+
+ onload: function () {
+ Services.obs.addObserver(tbSyncEventLog.updateEventLog, "tbsync.observer.eventlog.update", false);
+
+ let eventlog = document.getElementById('tbsync.eventlog');
+ eventlog.hidden = true;
+
+ //init list
+ let events = TbSync.eventlog.get();
+ for (let i=0; i < events.length; i++) {
+ let item = tbSyncEventLog.addLogEntry(events[i]);
+ eventlog.appendChild(item);
+ }
+ eventlog.hidden = false;
+ eventlog.ensureIndexIsVisible(eventlog.getRowCount()-1);
+ document.getElementById("tbsync.eventlog.clear").addEventListener("click", tbSyncEventLog.onclear);
+ document.getElementById("tbsync.eventlog.close").addEventListener("click", () => window.close());
+ },
+
+ onclear: function () {
+ TbSync.eventlog.clear();
+
+ let eventlog = document.getElementById('tbsync.eventlog');
+ eventlog.hidden = true;
+
+ for (let i=eventlog.getRowCount()-1; i>=0; i--) {
+ eventlog.getItemAtIndex(i).remove();
+ }
+
+ eventlog.hidden = false;
+ },
+
+ onunload: function () {
+ Services.obs.removeObserver(tbSyncEventLog.updateEventLog, "tbsync.observer.eventlog.update");
+ },
+
+ updateEventLog: {
+ observe: function (aSubject, aTopic, aData) {
+ let events = TbSync.eventlog.get();
+ if (events.length > 0) {
+ let eventlog = document.getElementById('tbsync.eventlog');
+ eventlog.hidden = true;
+
+ let item = tbSyncEventLog.addLogEntry(events[events.length-1]);
+ eventlog.appendChild(item);
+
+ eventlog.hidden = false;
+ eventlog.ensureIndexIsVisible(eventlog.getRowCount()-1);
+ }
+ }
+ },
+
+
+ addLogEntry: function (entry) {
+
+ //left column
+ let leftColumn = document.createXULElement("vbox");
+ //leftColumn.setAttribute("width", "24");
+ leftColumn.setAttribute("style", "width: 24px;");
+
+ let image = document.createXULElement("image");
+ let src = entry.type.endsWith("_rerun") ? "sync" : entry.type;
+ image.setAttribute("src", "chrome://tbsync/content/skin/" + src + "16.png");
+ image.setAttribute("style", "margin:4px 4px 4px 4px;");
+ leftColumn.appendChild(image);
+
+ //right column
+ let rightColumn = document.createXULElement("vbox");
+ rightColumn.setAttribute("flex","1");
+
+ let d = new Date(entry.timestamp);
+ let timestamp = document.createXULElement("description");
+ timestamp.setAttribute("flex", "1");
+ timestamp.setAttribute("class", "header");
+ timestamp.textContent = d.toLocaleTimeString();
+ rightColumn.appendChild(timestamp);
+
+ let hBox = document.createXULElement("hbox");
+ hBox.flex = "1";
+ let vBoxLeft = document.createXULElement("vbox");
+ vBoxLeft.flex = "1";
+ let vBoxRight = document.createXULElement("vbox");
+
+ let msg = document.createXULElement("description");
+ msg.setAttribute("flex", "1");
+ msg.setAttribute("class", "header");
+ msg.textContent = entry.message;
+ vBoxLeft.appendChild(msg);
+
+ if (entry.link) {
+ let link = document.createXULElement("button");
+ link.setAttribute("label", TbSync.getString("manager.help"));
+ link.setAttribute("oncommand", "TbSync.manager.openLink('" + entry.link + "')");
+ vBoxRight.appendChild(link);
+ }
+
+ hBox.appendChild(vBoxLeft);
+ hBox.appendChild(vBoxRight);
+ rightColumn.appendChild(hBox);
+
+ if (entry.accountname || entry.provider) {
+ let account = document.createXULElement("label");
+ if (entry.accountname) account.setAttribute("value", "Account: " + entry.accountname + (entry.provider ? " (" + entry.provider.toUpperCase() + ")" : ""));
+ else account.setAttribute("value", "Provider: " + entry.provider.toUpperCase());
+ rightColumn.appendChild(account);
+ }
+
+ if (entry.foldername) {
+ let folder = document.createXULElement("label");
+ folder.setAttribute("value", "Resource: " + entry.foldername);
+ rightColumn.appendChild(folder);
+ }
+
+ if (entry.details) {
+ let lines = entry.details.split("\n");
+ let line = document.createElementNS("http://www.w3.org/1999/xhtml", "textarea");
+ line.setAttribute("readonly", "true");
+ line.setAttribute("wrap", "off");
+ line.setAttribute("rows", lines.length);
+ line.setAttribute("style", "font-family: monospace; font-size: 10px;");
+ line.setAttribute("class", "plain");
+ line.value = entry.details.trim();
+
+ let container = document.createXULElement("vbox");
+ container.setAttribute("style", "margin-left:1ex;margin-top:1ex;");
+ container.appendChild(line);
+
+ rightColumn.appendChild(container);
+ }
+
+ //columns
+ let columns = document.createXULElement("hbox");
+ columns.setAttribute("flex", "1");
+ columns.appendChild(leftColumn);
+ columns.appendChild(rightColumn);
+
+ //richlistitem
+ let richlistitem = document.createXULElement("richlistitem");
+ richlistitem.setAttribute("style", "padding:4px; border-bottom: 1px solid lightgrey;");
+ richlistitem.appendChild(columns);
+
+ return richlistitem;
+ },
+};