diff options
Diffstat (limited to 'lib/logger.js')
-rw-r--r-- | lib/logger.js | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/lib/logger.js b/lib/logger.js new file mode 100644 index 0000000..4411a72 --- /dev/null +++ b/lib/logger.js @@ -0,0 +1,135 @@ +/ +Released under the MIT/X11 license +// http://www.opensource.org/licenses/mit-license.php +"use strict"; +var urlMod = require("url"); +var utilMod = require("util"); +var fileMod = require("file"); +var tabs = require("tabs"); +var prompts = require("prompts"); +var apiUtils = require("api-utils"); +var xrpc = require("xmlrpc"); +var myStorage = require("simple-storage"); +var libbz = require("libbugzilla"); + +var EmptyLogsColor = "rgb(0, 255, 0)"; +var FullLogsColor = "rgb(0, 40, 103)"; + +var abbsMap = {}; + +exports.initialize = function initialize(aMap) { + if (!myStorage.storage.logs) { + myStorage.storage.logs = {}; + } + abbsMap = aMap; +}; + +exports.addLogRecord = function addLogRecord(rec) { + if (myStorage.storage.logs[rec.key]) { + myStorage.storage.logs[rec.key].comment += "<br/>\n" + comment; + } + else { + myStorage.storage.logs[rec.key] = rec; + } +}; + +function storeSize() { + var size = 0, key; + for (key in myStorage.storage.logs) { + size++; + } + return size; +} + +function isEmpty() { + return (storeSize() === 0); +} + +exports.clearTimeSheet = function clearTimeSheet() { + myStorage.storage.logs = {}; + var size = storeSize(); +}; + +exports.importTimeSheet = function importTimeSheet() { + var filename = prompts.promptFileOpenPicker(); + if (fileMod.exists(filename)) { + var otherTS = JSON.parse(fileMod.read(filename)); + if (otherTS.logs) { + for (var rec in otherTS.logs) { + myStorage.storage.logs[rec] = otherTS.logs[rec]; + } + } + else { + console.error("This is not a log file!"); + } + } + else { + console.error("File " + filename + " doesn't exist!"); + } +}; + +function getBugzillaAbbr(url) { + // for https://bugzilla.redhat.com/show_bug.cgi?id=579123 get RH + // for https://bugzilla.mozilla.org/show_bug.cgi?id=579123 get MoFo + return abbsMap[urlMod.URL(url).host]; +} + +exports.generateTimeSheet = function generateTimeSheet() { + var docHTML = timeSheetRecordsPrinter(myStorage.storage.logs); + libbz.openURLInNewTab("data:text/html;charset=utf-8," + docHTML); +}; + +function timeSheetRecordsPrinter(records) { + var commentBugRE = new RegExp("[bB]ug\\s+([0-9]+)","g"); + // sort the records into temporary array + var tmpArr = []; + var outStr = '<!DOCTYPE html>' + + "<html><head>\n"+ + "<meta charset='utf-8'/>\n"+ + "<title>Status report</title>\n</head>\n<body>\n" + + "<h1>TimeSheet</h1>\n"; + + for (var i in records) { + if (records.hasOwnProperty(i)) { + tmpArr.push( [ i, records[i] ]); + } + } + tmpArr.sort(function(a, b) { + if (a[0] > b[0]) { + return 1; + } + else if (a[0] < b[0]) { + return -1; + } + else { + return 0; + } + }); + + var currentDay = ""; + // now print the array + tmpArr.forEach(function(rec) { + var x = rec[1]; + var dayStr = utilMod.getISODate(x.date); + var host = urlMod.URL(x.url).host; + var BZName = getBugzillaAbbr(x.url); + var bugNo = utilMod.getBugNo(x.url); + if (dayStr != currentDay) { + currentDay = dayStr; + outStr += "<hr/><p><strong>" + currentDay + + "</strong></p>\n"; + } + // replace "bug ####" with a hyperlink to the current bugzilla + var comment = x.comment.replace(commentBugRE, + "<a href='http://"+host+"/show_bug.cgi?id=$1'>$&</a>"); + outStr += "<p><em><a href='" + + x.url + + "'>Bug " + + BZName + "/" + bugNo + ": " + + x.title + + "</a>" + + " </em>\n<br/>" + comment + "</p>\n"; + }); + outStr += "</body></html>"; + return outStr; +} |