Changeset 18a879


Ignore:
Timestamp:
Oct 15, 2014, 12:07:29 AM (6 years ago)
Author:
rene <rene@…>
Branches:
ng_0.9
Children:
9d70ec
Parents:
f4283b
Message:

added debug-to-file option

Files:
11 edited

Legend:

Unmodified
Added
Removed
  • content/prefDialog/vI_prefDialog.js

    rf4283b r18a879  
    6060                .createInstance(Components.interfaces.nsIScriptableUnicodeConverter),
    6161   
     62    selectFile : function(elementID) {
     63        dump("selectFile\n");
     64        var filePicker = Components.classes["@mozilla.org/filepicker;1"]
     65            .createInstance(Components.interfaces.nsIFilePicker);
     66        var file = Components.classes["@mozilla.org/file/local;1"]
     67            .createInstance(Components.interfaces.nsIFile);
     68        var defaultPath = Components.classes["@mozilla.org/file/directory_service;1"]
     69                    .getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile).path;
     70
     71        try {
     72            file.initWithPath(document.getElementById(elementID).value);
     73            filePicker.displayDirectory = file.parent;
     74            filePicker.defaultString = file.leafName;
     75        }
     76        catch(NS_ERROR_FILE_UNRECOGNIZED_PATH) {
     77            try {
     78                // try linux delimiter
     79                file.initWithPath(defaultPath + "/" + document.getElementById(elementID).value);
     80                filePicker.displayDirectory = file.parent;
     81                filePicker.defaultString = file.leafName;
     82            } catch (NS_ERROR_FILE_UNRECOGNIZED_PATH) {
     83                try {
     84                    // use windows delimiter
     85                    file.initWithPath(defaultPath + "\\" + document.getElementById(elementID).value);
     86                    filePicker.displayDirectory = file.parent;
     87                    filePicker.defaultString = file.leafName;
     88                } catch (NS_ERROR_FILE_UNRECOGNIZED_PATH) { };
     89            }
     90        }
     91       
     92        filePicker.init(window, "", Components.interfaces.nsIFilePicker.modeSave);
     93       
     94        if (filePicker.show() != Components.interfaces.nsIFilePicker.returnCancel) {
     95            if (filePicker.file.parent.path == defaultPath)
     96                document.getElementById(elementID).setAttribute("value", filePicker.file.leafName);
     97            else
     98                document.getElementById(elementID).setAttribute("value", filePicker.file.path);
     99        }
     100    },
     101                           
    62102    base : {
    63103        _elementIDs : [ "VIdent_identity.doFcc",
     
    91131                "VIdent_identity.notification_timeout",
    92132                "VIdent_identity.debug_notification",
     133                "VIdent_identity.debug_to_file",
     134                "VIdent_identity.debug_to_file_path",
    93135                "VIdent_identity.warn_nonvirtual",
    94136                "VIdent_identity.warn_virtual",
     
    149191                            element.setAttribute("value",
    150192                            prefDialog.unicodeConverter.ConvertToUnicode(prefDialog.preferences.getCharPref(element.getAttribute("prefstring"))) );
    151 //                          alert(element.getAttribute("prefstring") + " " + element.getAttribute("value"))
    152193                        }
    153194                    else if (eltType == "listbox")
     
    155196                            prefDialog.preferences.getCharPref(element.getAttribute("prefstring"));
    156197//              } catch (ex) {}
     198//             dump("setting textbox value: " + element.getAttribute("prefstring") + " " + element.getAttribute("value") + "\n");
    157199            }
    158200        },
  • content/prefDialog/vI_prefDialog.xul

    rf4283b r18a879  
    729729                    <checkbox id="VIdent_identity.debug_notification" label="&vI_prefDialog.notifyDebug.label;"
    730730                        prefstring="debug_notification"/>
    731                 </vbox>
     731                    <hbox>
     732                        <checkbox id="VIdent_identity.debug_to_file" label="&vI_prefDialog.debugToFile.label;"
     733                            prefstring="debug_to_file"/>
     734                        <textbox id="VIdent_identity.debug_to_file_path"
     735                            prefstring="debug_to_file_path" />
     736                        <button id="VIdent_identity.debug_to_file.filePicker"
     737                                label="&vI_prefDialog.debugToFile.choose;"
     738                                oncommand="virtualIdentityExtension.prefDialog.selectFile('VIdent_identity.debug_to_file_path');" />
     739                    </hbox>
     740                </vbox>
    732741                </groupbox>
    733742            </tabpanel>
  • defaults/preferences/preferences.js

    rf4283b r18a879  
    3030pref("extensions.virtualIdentity.error_console", false);
    3131pref("extensions.virtualIdentity.debug_notification", false);
     32pref("extensions.virtualIdentity.debug_to_file", false);
     33pref("extensions.virtualIdentity.debug_to_file_path", "virtualIdentity_debug.log");
    3234pref("extensions.virtualIdentity.notification_timeout", 5);
    3335pref("extensions.virtualIdentity.warn_nonvirtual", false);
  • locale/cs-CZ/vI_prefDialog.dtd

    rf4283b r18a879  
    186186<!ENTITY vI_prefDialog.notifyDebug.desc "Chcete-li hledat chyby, vyřeÅ¡it problémy s konfigurací a porozumět tomu, co Virtual Identity dělá (především s filtry SmartReply), můşete si zobrazovat další informace. PouÅŸití této volby vÅ¡ak zpomalí váš e-mailovÃœ klient, proto by neměla bÃœt zapnuta stále.">
    187187<!ENTITY vI_prefDialog.notifyDebug.label "zobrazit pole s ladícími informacemi">
     188<!ENTITY vI_prefDialog.debugToFile.label "debug to file"> <!-- translate -->
     189<!ENTITY vI_prefDialog.debugToFile.choose "choose"> <!-- translate -->
    188190
    189191
  • locale/de-DE/vI_prefDialog.dtd

    rf4283b r18a879  
    186186<!ENTITY vI_prefDialog.notifyDebug.desc "Zur Fehlersuche und zum besseren VerstÀndnis der Funktionsweise von Virtual Identity, besonders auch der Filter von &apos;Smart Reply&apos;, können weitere Informationen in einem eigenen Bereich angezeigt werden. Diese Debug-Informationen stehen nur in englischer Sprache zur VerfÌgung. Die Ausgabe verlangsamt die Arbeit des Email-Programms und sollte darum nicht dauerhaft aktiviert bleiben.">
    187187<!ENTITY vI_prefDialog.notifyDebug.label "zeige Bereich mit Informationen zur Fehlersuche">
     188<!ENTITY vI_prefDialog.debugToFile.label "speicher Fehlerlog">
     189<!ENTITY vI_prefDialog.debugToFile.choose "wÀhle">
    188190
    189191
  • locale/en-US/vI_prefDialog.dtd

    rf4283b r18a879  
    185185<!ENTITY vI_prefDialog.notifyDebug.desc "To find bugs, solve configuration problems and understand what Virtual Identity is doing, especially with the Smart Reply-filters, you can enable some additional informations. Using this option slows down your mail-client, therefore it shouldn&apos;t be activated permanently.">
    186186<!ENTITY vI_prefDialog.notifyDebug.label "show area with debug-informations">
     187<!ENTITY vI_prefDialog.debugToFile.label "debug to file">
     188<!ENTITY vI_prefDialog.debugToFile.choose "choose">
    187189
    188190
  • locale/es-ES/vI_prefDialog.dtd

    rf4283b r18a879  
    186186<!ENTITY vI_prefDialog.notifyDebug.desc "Para encontrar fallos, resolver problemas y entender lo que está haciendo Virtual Identity, especialmente con los filtros de respuesta rápida, puede habilitar alguna información adicional. Esta información aparecerá mayoritariamente en inglés. Si usa esta opción, el cliente de correo será más lento, por lo que no debe estar activa permanentemente.">
    187187<!ENTITY vI_prefDialog.notifyDebug.label "mostrar el área con la información de depuración">
    188 
     188<!ENTITY vI_prefDialog.debugToFile.label "debug to file"> <!-- translate -->
     189<!ENTITY vI_prefDialog.debugToFile.choose "choose"> <!-- translate -->
    189190
    190191<!-- just for TB 1.5. ReplyFollowsParent not available -->
  • locale/fr/vI_prefDialog.dtd

    rf4283b r18a879  
    186186<!ENTITY vI_prefDialog.notifyDebug.desc "Pour détecter les bogues, résoudre les problÚmes de configuration et comprendre ce que Virtual Identity fait, en particulier avec les filtres de réponse intelligente, vous pouvez activer la production d'informations complémentaires. Cette option ralentit votre client courriel, par conséquent vous ne devriez pas l'activer en l'absence de nécessité.">
    187187<!ENTITY vI_prefDialog.notifyDebug.label "afficher les informations de débogage">
    188 
     188<!ENTITY vI_prefDialog.debugToFile.label "debug to file"> <!-- translate -->
     189<!ENTITY vI_prefDialog.debugToFile.choose "choose"> <!-- translate -->
    189190
    190191<!-- just for TB 1.5. ReplyFollowsParent not available -->
  • locale/nl/vI_prefDialog.dtd

    rf4283b r18a879  
    186186<!ENTITY vI_prefDialog.notifyDebug.desc "Om fouten te vinden, configuratieproblemen op te lossen en te begrijpen wat Virtual Identity doet, in het bijzonder met de Slim Antwoorden-filters, kunt u wat aanvullende informatie activeren. Het gebruik van deze optie vertraagt uw mailprogramma en dient derhalve niet permanent ingeschakeld te zijn.">
    187187<!ENTITY vI_prefDialog.notifyDebug.label "Veld met foutopsporingsinformatie weergeven">
    188 
     188<!ENTITY vI_prefDialog.debugToFile.label "debug to file"> <!-- translate -->
     189<!ENTITY vI_prefDialog.debugToFile.choose "choose"> <!-- translate -->
    189190
    190191<!-- just for TB 1.5. ReplyFollowsParent not available -->
  • locale/ru-RU/vI_prefDialog.dtd

    rf4283b r18a879  
    341341<!ENTITY vI_prefDialog.notifyDebug.desc "ЧтПбы МайтО ПшОбкО, решОть прПблеЌы в кПМфОгурацОО О пПМять, чтП О как выпПлМяет Virtual Identity, ПсПбеММП прО ОспПльзПваМОО фОльтрПв фуМкцОО «УЌМый Птвет», Вы ЌПжете включОть ПтПбражеМОе МекПтПрПй ЎПпПлМОтельМПй ОМфПрЌацОО. ПрО ОспПльзПваМОО этПй ПпцОО рабПта пПчтПвПгП клОеМта МескПлькП заЌеЎляется, пПэтПЌу ПМа Ме ЎПлжМа быть включеМа пПстПяММП.">
    342342<!ENTITY vI_prefDialog.notifyDebug.label "ППказывать Пбласть с ПтлаЎПчМПй ОМфПрЌацОей">
    343 
     343<!ENTITY vI_prefDialog.debugToFile.label "debug to file"> <!-- translate -->
     344<!ENTITY vI_prefDialog.debugToFile.choose "choose"> <!-- translate -->
    344345
    345346<!-- just for TB 1.5. ReplyFollowsParent not available -->
  • modules/vI_log.js

    rf4283b r18a879  
    3030Cu.import("resource:///modules/gloda/log4moz.js");
    3131Cu.import("resource://v_identity/vI_prefs.js");
     32Cu.import("resource://gre/modules/Services.jsm");
     33
     34/** ******************************************************************************************************
     35 * _errorConsoleTunnel was copied and adapted mozilla test-function
     36 * mailnews/test/resources/logHelper.js
     37 */
     38/**
     39 * Tunnel nsIScriptErrors that show up on the error console to Log4Moz.  We could
     40 *  send everything but I think only script errors are likely of much concern.
     41 *  Also, this nicely avoids infinite recursions no matter what you do since
     42 *  what we publish is not going to end up as an nsIScriptError.
     43 *
     44 * This is based on my (asuth') exmmad extension.
     45 */
     46let _errorConsoleTunnel = {
     47  initialize: function () {
     48    Services.console.registerListener(this);
     49    // we need to unregister our listener at shutdown if we don't want explosions
     50    Services.obs.addObserver(this, "quit-application", false);
     51  },
     52
     53  shutdown: function () {
     54      try {
     55        Services.console.unregisterListener(this);
     56        Services.obs.removeObserver(this, "quit-application");
     57      } catch (e) { };
     58  },
     59
     60  observe: function (aMessage, aTopic, aData) {
     61    if (aTopic == "quit-application") {
     62      this.shutdown();
     63      return;
     64    }
     65
     66    try {
     67      if ((aMessage instanceof Components.interfaces.nsIScriptError) &&
     68        (!aMessage.errorMessage.contains("Error console says")))
     69        {
     70          if (aMessage.indexOf("v_identity") != -1)
     71            MyLog.error("Error console says" + aMessage);
     72        }
     73    }
     74    catch (ex) {
     75      // This is to avoid pathological error loops.  we definitely do not
     76      // want to propagate an error here.
     77    }
     78  }
     79};
     80/** ******************************************************************************************************/
    3281
    3382// different formatters for the log output
     
    178227    root.addAppender(dapp);
    179228  }
    180  
     229
    181230  // A dump appender outputs to Debug Output Box
    182231  let doapp = new DebugOutputAppender(myNewFormatter);
    183232  doapp.level = Log4Moz.Level["All"];
    184233  root.addAppender(doapp);
    185  
     234
     235
    186236  return Log;
    187237}
     
    214264}
    215265
     266function _startFileLogging() {
     267    var file = Components.classes["@mozilla.org/file/local;1"]
     268        .createInstance(Components.interfaces.nsIFile);
     269
     270    var defaultPath = Components.classes["@mozilla.org/file/directory_service;1"]
     271                .getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile).path;
     272
     273    try {
     274        file.initWithPath(vIprefs.get("debug_to_file_path"));
     275    }
     276    catch(NS_ERROR_FILE_UNRECOGNIZED_PATH) {
     277        try {
     278            // try linux delimiter
     279            file.initWithPath(defaultPath + "/" + vIprefs.get("debug_to_file_path"));
     280        } catch (NS_ERROR_FILE_UNRECOGNIZED_PATH) {
     281            try {
     282                // use windows delimiter
     283                file.initWithPath(defaultPath + "\\" + vIprefs.get("debug_to_file_path"));
     284            } catch (NS_ERROR_FILE_UNRECOGNIZED_PATH) {
     285                dump("FileAppender not available for logging: set logging file first\n");
     286            };
     287        }
     288    }
     289    // A dump appender outputs to File
     290    DebugFileAppender = new Log4Moz.FileAppender(file);
     291
     292    if (DebugFileAppender.doAppend.toString().indexOf("this._fos().write") > -1) {
     293        dump("*** hot-fixing FileAppender Logging Bug (https://bugzilla.mozilla.org/show_bug.cgi?id=1082551)\n");
     294        // there is a bug in original implementation of doAppend, fix the issue
     295        DebugFileAppender.doAppend = function FApp_doAppend(message) {
     296            if (message === null || message.length <= 0)
     297                return;
     298            try {
     299                this._fos.write(message, message.length);
     300            } catch(e) {
     301                dump("Error writing file:\n" + e);
     302            }
     303        };
     304    }
     305
     306    DebugFileAppender.level = Log4Moz.Level["All"];
     307    Log4Moz.repository.rootLogger.addAppender(DebugFileAppender);
     308   
     309    _errorConsoleTunnel.initialize();
     310}
     311
     312function _stopFileLogging() {
     313    if (DebugFileAppender)
     314        Log4Moz.repository.rootLogger.removeAppender(DebugFileAppender);
     315    _errorConsoleTunnel.shutdown();
     316}
     317
     318function _dump_extension_list() {
     319    Components.utils.import("resource://gre/modules/AddonManager.jsm");
     320    AddonManager.getAllAddons(function(addons) {
     321        var strings = addons.map(function(addon) {
     322            return (addon.userDisabled || addon.appDisabled ? "" : "addon: " + addon.name + " " + addon.version + "\n");
     323        });
     324        MyLog.info("\n--------------------------------------------------------------------------------\n" +
     325            strings.join("") +
     326            "--------------------------------------------------------------------------------");
     327        });
     328}
     329
     330function _dump_info_block() {
     331    // add some information about the mail-client and the extensions installed
     332    if ("@mozilla.org/xre/app-info;1" in Components.classes) {
     333        var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
     334            .getService(Components.interfaces.nsIXULAppInfo);
     335        var protohandler = Components.classes["@mozilla.org/network/protocol;1?name=http"]
     336            .getService(Components.interfaces.nsIHttpProtocolHandler);
     337        MyLog.info("start logging for new session\n--------------------------------------------------------------------------------\n" +
     338            appInfo.name + " " + appInfo.version + " (" + appInfo.appBuildID + "; " + protohandler.oscpu + ")\n" +
     339            "--------------------------------------------------------------------------------");
     340    }
     341    else
     342        MyLog.info("\n--------------------------------------------------------------------------------\n" +
     343            "mail-client seems not supported by Virtual Identity Extension\n" +
     344            "--------------------------------------------------------------------------------");
     345   
     346    _dump_extension_list();
     347}
     348
     349function UpdateFileLoggerPath() {
     350    dump("UpdateFileLoggerPath\n");
     351    if (vIprefs.get("debug_to_file")) {
     352        _stopFileLogging();
     353        _startFileLogging();
     354        _dump_info_block();
     355    }
     356}   
     357
     358function UpdateFileLogger() {
     359    if (vIprefs.get("debug_to_file")) {
     360        _startFileLogging();
     361        _dump_info_block();
     362    }
     363    else {
     364        _stopFileLogging();
     365    }
     366}
     367
    216368function UpdateSmartReplyNotification() {
    217369    if (vIprefs.get("smart_reply_notification")) {
     
    247399}
    248400
    249 
    250401let logRoot = "virtualIdentity";
    251402let MyLog = setupFullLogging(logRoot);
    252403
    253404let myNotificationFormatter = new NotificationFormatter();
     405
     406let DebugFileAppender = null;
    254407
    255408let SmartReplyAppender;
     
    265418UpdateStorageNotification();
    266419UpdateGetHeaderNotification();
     420UpdateFileLogger();
    267421
    268422vIprefs.addObserver("smart_reply_notification", UpdateSmartReplyNotification, this);
    269423vIprefs.addObserver("storage_notification", UpdateStorageNotification, this);
    270424vIprefs.addObserver("get_header_notification", UpdateGetHeaderNotification, this);
     425vIprefs.addObserver("debug_to_file", UpdateFileLogger, this);
     426vIprefs.addObserver("debug_to_file_path", UpdateFileLoggerPath, this);
Note: See TracChangeset for help on using the changeset viewer.