Changeset 2694fe


Ignore:
Timestamp:
Jul 25, 2007, 2:16:05 PM (14 years ago)
Author:
rene <rene@…>
Branches:
master
Children:
e8f60f
Parents:
9e9bab
Message:

import version 0.4.1

Files:
24 edited

Legend:

Unmodified
Added
Removed
  • chrome/content/v_identity/_version.dtd

    r9e9bab r2694fe  
    1 <!ENTITY vident.version "0.4.0">
     1<!ENTITY vident.version "0.4.1">
  • chrome/content/v_identity/vI_account.js

    r9e9bab r2694fe  
    161161                case "2"  :
    162162                dump ("## vI_account: preparing Fcc --- use Settings of Default Account\n");
    163                 vI_account.account.defaultIdentity.doFcc = gAccountManager.defaultIdentity.doFcc;
     163                vI_account.account.defaultIdentity.doFcc = gAccountManager.defaultAccount.defaultIdentity.doFcc;
    164164                vI_account.account.defaultIdentity.fccFolder = gAccountManager.defaultAccount.defaultIdentity.fccFolder;
    165165                vI_account.account.defaultIdentity.fccFolderPickerMode = gAccountManager.defaultAccount.defaultIdentity.fccFolderPickerMode;
  • chrome/content/v_identity/vI_context.xul

    r9e9bab r2694fe  
    3030
    3131<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
     32    <script type="application/x-javascript">
     33    var vI_context = {
     34        prefroot : Components.classes["@mozilla.org/preferences-service;1"]
     35            .getService(Components.interfaces.nsIPrefService)
     36            .getBranch(null),
     37           
     38        observe: function(subject, topic, data) {
     39            document.getElementById("vI_settingsMenu").setAttribute("hidden",
     40                !vI_context.prefroot.getBoolPref("extensions.virtualIdentity.menu_entry"));
     41        }
     42       
     43    }
     44    window.addEventListener("load", function(e) {
     45        vI_context.prefroot.QueryInterface(Components.interfaces.nsIPrefBranch2);
     46        vI_context.prefroot.addObserver("extensions.virtualIdentity.menu_entry", vI_context, false);
     47        vI_context.observe();
     48    }, false);
     49    window.addEventListener("unload", function(e) {
     50        vI_context.prefroot.removeObserver("extensions.virtualIdentity.menu_entry", vI_context, false);
     51    }, false);
     52    </script>
     53   
    3254    <menupopup id="taskPopup">
    33         <menuitem label="&vident.prefs.dlgTitle.label;" oncommand="openDialog('chrome://v_identity/content/vI_prefDialog.xul', '', 'chrome,modal');" />
     55        <menuitem id="vI_settingsMenu" hidden="true" label="&vident.prefs.dlgTitle.label;" oncommand="openDialog('chrome://v_identity/content/vI_prefDialog.xul', '', 'chrome,modal');" />
    3456    </menupopup>
    3557</overlay>
  • chrome/content/v_identity/vI_getHeader.js

    r9e9bab r2694fe  
    2121
    2222    Contributor(s): Christian Weiske
     23    Contributor(s): Patrick Brunschwig
    2324 * ***** END LICENSE BLOCK ***** */
    2425
     
    2627* some code copied and adapted from 'display Mail User Agent (MUA)'
    2728* thanks to Christian Weiske <cweiske@cweiske.de>
     29*/
     30/**
     31* some code copied and adapted from 'enigmail'
     32* thanks to Patrick Brunschwig <patrick.brunschwig@gmx.net>
    2833*/
    2934
     
    3338            .getService(Components.interfaces.nsIPrefService)
    3439            .getBranch("extensions.virtualIdentity."),
    35     label: null,
    36     note_list : new Array(),
    37    
     40           
    3841    strings : document.getElementById("vIdentBundle"),
    39 
    40     noop: function() { return; },
     42   
     43    headerToSearch : null,
     44   
     45    prepareHeaderToSearchArray : function() {
     46        var headerList = vI_getHeader.preferences.getCharPref("smart_reply_headers").split(/\n/)
     47       
     48        vI_getHeader.headerToSearch = [];
     49       
     50        // prepare headerToSearch for speedup.
     51        var index
     52        for (index = 0; index < headerList.length; index++) {
     53            var headerToSearch_splitted = headerList[index].split(/:/)
     54            // use first part (all before ':') as the header name
     55            var headerNameToSearch = headerToSearch_splitted[0].toLowerCase()
     56            // check second or third part for any number
     57            var headerNumberToSearch = parseInt(headerToSearch_splitted[1])
     58            if (isNaN(headerNumberToSearch)) headerNumberToSearch = parseInt(headerToSearch_splitted[2])
     59           
     60            // create header name to store the value
     61            var headerNameToStore = "vI_" + headerNameToSearch
     62            if (!isNaN(headerNumberToSearch)) headerNameToStore += ":" + headerNumberToSearch
     63           
     64            vI_getHeader.headerToSearch.push({ headerNameToSearch : headerNameToSearch, headerNumberToSearch : headerNumberToSearch,
     65                    headerNameToStore : headerNameToStore });
     66        }
     67    },
     68
     69    adaptPreferences : function() {
     70        // this is only for transition from 0.4.0 to 0.4.1, will be removed after a while
     71        try {   if (vI_getHeader.preferences.getBoolPref("smart_reply_prefer_headers")) {
     72                vI_notificationBar.dump("## vI_getHeader: preference-format changed\n## vI_getHeader: appending 'to' and 'cc' to header-list\n")
     73                vI_getHeader.preferences.setCharPref("smart_reply_headers",
     74                    vI_getHeader.preferences.getCharPref("smart_reply_headers") + "\nto\ncc")
     75            }
     76            else {
     77                vI_notificationBar.dump("## vI_getHeader: preference-format changed\n## vI_getHeader: inserting 'to' and 'cc' to header-list\n")
     78                vI_getHeader.preferences.setCharPref("smart_reply_headers",
     79                    "to\ncc\n" + vI_getHeader.preferences.getCharPref("smart_reply_headers"))
     80            }
     81            vI_getHeader.preferences.clearUserPref("smart_reply_prefer_headers")
     82            vI_notificationBar.dump("## vI_getHeader: 'smart_reply_prefer_headers' preference-entry removed\n")
     83        }
     84        catch(vErr) { }
     85    },
    4186
    4287    getHeader: function() {
    43         dump("## vI_getHeader: onEndHeaders\n")
     88        vI_notificationBar.clear_dump()
     89        vI_notificationBar.dump("## vI_getHeader: onEndHeaders\n")
     90        var index;
     91
     92        vI_getHeader.adaptPreferences();
    4493       
    4594        var srcMsgURI = GetLoadedMessage();
    4695        if (srcMsgURI == null) return;
    47 
    48         var header_list = vI_getHeader.preferences.getCharPref("smart_reply_headers").split(/\n/)
    49         var hdr = vI_getHeader.messenger.messageServiceFromURI(srcMsgURI).messageURIToMsgHdr(srcMsgURI);
    50         //loop through the headers
     96       
     97        if (/type=application\/x-message-display/.test(srcMsgURI)) {
     98            vI_notificationBar.dump("## vI_getHeader: opening stored Message, can't get Message Header\n");
     99            return;
     100        }
     101       
     102        try { var hdr = vI_getHeader.messenger.messageServiceFromURI(srcMsgURI).messageURIToMsgHdr(srcMsgURI); }
     103        catch(vErr) {
     104            vI_notificationBar.dump("## vI_getHeader: can't get Message Header.\n");
     105            return;
     106        };
     107
     108        if (!vI_getHeader.headerToSearch) vI_getHeader.prepareHeaderToSearchArray()
     109
    51110        var found = false;
    52111        var label = vI_getHeader.strings.getString("vident.getHeader.noHeader");
    53         for (headerName in currentHeaderData) {
    54             for (index = 0; index < header_list.length; index++) {
    55                 header_to_search=header_list[index]
    56                 if (headerName.toLowerCase() == header_to_search.toLowerCase()) {
    57                     hdr.setStringProperty(headerName.toLowerCase(),
    58                         currentHeaderData[headerName].headerValue);
    59                     if (!found) label = vI_getHeader.strings.getString("vident.getHeader.headerFound");
    60                     label += " " + headerName.toLowerCase()
    61                         + ":" + currentHeaderData[headerName].headerValue
    62                     found = true;
     112        // create array to count the header
     113        var currentHeadersCounter = []
     114        // loop through the headers
     115        for (header in currentHeaderData) {
     116            headerName = currentHeaderData[header].headerName.toLowerCase()
     117            if (currentHeadersCounter[headerName]) currentHeadersCounter[headerName]++
     118            else currentHeadersCounter[headerName] = 1
     119            vI_notificationBar.dump("## vI_getHeader: found header: " + headerName +
     120                    "[:" + currentHeadersCounter[headerName] + "]");
     121           
     122            for (index = 0; index < vI_getHeader.headerToSearch.length; index++) {
     123                if (headerName == vI_getHeader.headerToSearch[index].headerNameToSearch &&
     124                    (isNaN(vI_getHeader.headerToSearch[index].headerNumberToSearch) ||
     125                        vI_getHeader.headerToSearch[index].headerNumberToSearch == currentHeadersCounter[headerName])) {
     126                   
     127                    var value = currentHeaderData[header].headerValue;
     128                    if (currentHeadersCounter[headerName] != 1)
     129                        value = hdr.getStringProperty(vI_getHeader.headerToSearch[index].headerNameToStore) +
     130                        ", " + value;
     131                    hdr.setStringProperty(vI_getHeader.headerToSearch[index].headerNameToStore,value);
     132                    vI_notificationBar.dump(" ...stored");
     133                   
     134                    if (!found) {
     135                        label = vI_getHeader.strings.getString("vident.getHeader.headerFound");
     136                        found = true;
     137                    }
     138                    label += " " + currentHeaderData[header].headerName +
     139                    "[:" + currentHeadersCounter[headerName] + "]:" + currentHeaderData[header].headerValue
     140                    break;
    63141                }
    64142            }
     143            vI_notificationBar.dump("\n");
    65144        }
    66145        vI_notificationBar.setNote(label, "get_header_notification");
     146    },
     147   
     148    hideExtraHeader: function() {
     149        var index;
     150        var header_list = vI_prepareHeader.addedHeaders
     151        for (index = 0; index < header_list.length; index++) {
     152            var header_to_search_splitted=header_list[index].split(/:/)
     153            var header_to_search=header_to_search_splitted[0].toLowerCase()
     154            if (typeof(gExpandedHeaderView[header_to_search]) == "object") {
     155            if (! gViewAllHeaders) {
     156                gExpandedHeaderView[header_to_search].enclosingBox.setAttribute("hidden", true);
     157            }
     158            else {
     159                gExpandedHeaderView[header_to_search].enclosingBox.removeAttribute("hidden");
     160            }
     161            }
     162        }
    67163    },
    68164
    69165    setupEventListener: function() {
    70166        var listener = {};
    71         listener.onStartHeaders = vI_getHeader.noop;
     167        listener.onStartHeaders = vI_getHeader.hideExtraHeader;
    72168        listener.onEndHeaders   = vI_getHeader.getHeader;
    73169        gMessageListeners.push(listener);
     
    76172        vI_getHeader.messenger = vI_getHeader.messenger.QueryInterface(Components.interfaces.nsIMessenger);
    77173        vI_getHeader.strings = document.getElementById("vIdentBundle");
    78     },
     174    }
    79175}
    80176
     177
     178var vI_prepareHeader = {
     179    prefroot : Components.classes["@mozilla.org/preferences-service;1"]
     180            .getService(Components.interfaces.nsIPrefService)
     181            .getBranch(null),
     182           
     183    addedHeaders : [],
     184   
     185    observer_added : false,
     186   
     187    init : function() {
     188        vI_notificationBar.dump("## vI_prepareHeader: init\n");
     189        if (vI_prepareHeader.addExtraHeader()) vI_prepareHeader.addObserver();
     190    },
     191   
     192    cleanup : function() {
     193        vI_notificationBar.dump("## vI_prepareHeader: cleanup\n");
     194        vI_prepareHeader.removeObserver();
     195        vI_prepareHeader.removeExtraHeader();
     196    },
     197   
     198    addObserver : function() {
     199        if (vI_prepareHeader.observer_added) return;
     200        vI_prepareHeader.prefroot.QueryInterface(Components.interfaces.nsIPrefBranch2);
     201        vI_prepareHeader.prefroot.addObserver("extensions.virtualIdentity.smart_reply_headers", this, false);
     202        vI_prepareHeader.observer_added = true;
     203        vI_notificationBar.dump("## vI_prepareHeader: prefs observer added\n");
     204    },
     205   
     206    removeObserver : function() {
     207        if (!vI_prepareHeader.observer_added) return;
     208        vI_prepareHeader.prefroot.removeObserver("extensions.virtualIdentity.smart_reply_headers", this);
     209        vI_notificationBar.dump("## vI_prepareHeader: prefs observer removed\n");
     210        vI_prepareHeader.observer_added = false;
     211    },
     212   
     213    // this is a adapted copy of enigEnsureExtraHeaders() from enigmail, thanks
     214    addExtraHeader : function() {
     215        vI_notificationBar.dump("## vI_prepareHeader: addExtraHeader\n");
     216        var header_list = vI_prepareHeader.prefroot.getCharPref("extensions.virtualIdentity.smart_reply_headers").split(/\n/)
     217        try {
     218            var extraHdrs = " " +
     219                vI_prepareHeader.prefroot.getCharPref("mailnews.headers.extraExpandedHeaders").toLowerCase()
     220                + " ";
     221
     222            for (index = 0; index < header_list.length; index++) {
     223                var headerToSearch_splitted = header_list[index].split(/:/)
     224                var headerToSearch = headerToSearch_splitted[0].toLowerCase()
     225               
     226                var j; var found = false;
     227                // check if Header is included in collapsed HeaderView
     228                for (j = 0; j < gCollapsedHeaderList.length; j++) {
     229                    if (gCollapsedHeaderList[j].name == headerToSearch) {
     230                        vI_notificationBar.dump("## vI_prepareHeader: Header '" + headerToSearch + "' in gCollapsedHeaderList\n");
     231                        found = true; break;
     232                    }
     233                }
     234                if (found) continue;
     235                // check if Header is included in expanded HeaderView
     236                for (j = 0; j < gExpandedHeaderList.length; j++) {
     237                    if (gExpandedHeaderList[j].name == headerToSearch) {
     238                        vI_notificationBar.dump("## vI_prepareHeader: Header '" + headerToSearch + "' in gExpandedHeaderList\n");
     239                        found = true; break;
     240                    }
     241                }
     242                if (found) continue;
     243
     244                var addedHeadersString = " " + vI_prepareHeader.addedHeaders.join(" ") + " "
     245                if ((extraHdrs.indexOf(" " + headerToSearch + " ") < 0) &&
     246                    (addedHeadersString.indexOf(" " + headerToSearch + " ") < 0))
     247                    vI_prepareHeader.addedHeaders.push(headerToSearch);
     248                else vI_notificationBar.dump("## vI_prepareHeader: Header '" + headerToSearch + "' already in extraExpandedHeaders\n");
     249            }
     250           
     251            if (vI_prepareHeader.addedHeaders.length > 0) {
     252                extraHdrs += vI_prepareHeader.addedHeaders.join(" ");
     253                extraHdrs = extraHdrs.replace(/^ */, "").replace(/ *$/, "");
     254                vI_prepareHeader.prefroot.setCharPref("mailnews.headers.extraExpandedHeaders", extraHdrs)
     255            }
     256            vI_notificationBar.dump("## vI_prepareHeader: extraExpandedHeaders '" + vI_prepareHeader.addedHeaders.join(" ") + "' added\n");
     257           
     258           
     259            vI_notificationBar.dump("## vI_prepareHeader: done\n");
     260            return true;
     261        }
     262        catch (e) {
     263            vI_notificationBar.dump("## vI_prepareHeader: your application is too old, please update. Otherwise try to install mnenhy or enigmail to use additional headers.")
     264            return false;
     265        }
     266    },
     267
     268    removeExtraHeader: function() {
     269        vI_notificationBar.dump("## vI_prepareHeader: cleanupExtraHeader\n");
     270
     271        if (vI_prepareHeader.addedHeaders.length > 0) {
     272            var extraHdrs = vI_prepareHeader.prefroot.getCharPref("mailnews.headers.extraExpandedHeaders").toLowerCase().split(/ /);
     273       
     274            for (i = 0; i < vI_prepareHeader.addedHeaders.length; i++) {
     275                for (j = 0; j < extraHdrs.length; j++) {
     276                    if (extraHdrs[j] == vI_prepareHeader.addedHeaders[i]) {
     277                        extraHdrs.splice(j,1);
     278                        break;
     279                    }
     280                }
     281            }
     282            vI_prepareHeader.prefroot.setCharPref("mailnews.headers.extraExpandedHeaders", extraHdrs.join(" "))
     283            vI_notificationBar.dump("## vI_prepareHeader: extraExpandedHeaders '" + vI_prepareHeader.addedHeaders.join(" ") + "' removed\n");
     284            vI_prepareHeader.addedHeaders = [];
     285        }
     286    },
     287   
     288    observe: function(subject, topic, data) {
     289        if (topic == "nsPref:changed") {
     290            vI_prepareHeader.removeExtraHeader();
     291            vI_prepareHeader.addExtraHeader();
     292            vI_notificationBar.dump("## vI_prepareHeader: changed preference '" + data + "'\n");
     293           
     294            // remove (old) prepared headerArray
     295            vI_getHeader.headerToSearch = null;
     296           
     297            vI_notificationBar.dump("## vI_prepareHeader: reload Message\n");
     298            MsgReload();
     299        }
     300    }
     301}
     302
    81303addEventListener('messagepane-loaded', vI_getHeader.setupEventListener, true);
     304window.addEventListener("load", function(e) { vI_prepareHeader.init(); }, false);
     305window.addEventListener("unload", function(e) { vI_prepareHeader.cleanup(); }, false);
  • chrome/content/v_identity/vI_getHeader.xul

    r9e9bab r2694fe  
    4242  </stringbundleset>
    4343
     44<vbox id="messagepanebox" >
     45    <splitter id="vIDebugBoxSplitter" hidden="true"/>
     46    <textbox id="vIDebugBox" hidden="true" multiline="true" readonly="true"
     47    DOMAttrModified="if(event.attrName == 'value') this.value = event.newValue; return true;"/>
     48</vbox>
     49
    4450<vbox id="messagepanebox">
    4551     <notificationbox id="vINotification" position="1" insertbefore="msgheaderstoolbar-box"/>
  • chrome/content/v_identity/vI_msgIdentityClone.js

    r9e9bab r2694fe  
    4343        vI_msgIdentityClone.elements.Obj_MsgIdentityPopup_clone = document.getElementById("msgIdentityPopup_clone");
    4444        vI_msgIdentityClone.clone_Obj_MsgIdentity();
     45        vI_msgIdentityClone.elements.Obj_MsgIdentity.setAttribute("hidden", "true");
     46        vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.setAttribute("hidden", "false");
     47        vI_msgIdentityClone.elements.Obj_MsgIdentity.previousSibling.setAttribute("control", "msgIdentity_clone");
    4548    },
    4649   
     
    6164            newMenuItem.setAttribute("accountname", vI.helper.getAccountname(newMenuItem))
    6265        }
     66        if (!vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem) {
     67            vI_notificationBar.dump("## vI_msgIdentityClone: Obj_MsgIdentity.selectedItem not set, using first Menuitem\n");
     68            vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem =
     69                vI_msgIdentityClone.elements.Obj_MsgIdentityPopup.firstChild
     70            vI_notificationBar.dump("## vI_msgIdentityClone: MsgIdentityPopup.doCommand()\n");
     71            vI_msgIdentityClone.elements.Obj_MsgIdentityPopup.doCommand();
     72        }
    6373        vI_msgIdentityClone.elements.Obj_MsgIdentity_clone
    6474            .setAttribute("value", vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem.getAttribute("value"));
     
    6676            .setAttribute("label", vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem.getAttribute("label"));
    6777        vI_msgIdentityClone.elements.Obj_MsgIdentity_clone
    68             .setAttribute("accountkey", vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem.getAttribute("accountkey"));
    69         vI_msgIdentityClone.elements.Obj_MsgIdentity_clone
    7078            .setAttribute("accountname", vI.helper.getAccountname(vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem));
    7179    },
    7280   
    7381    resetMenuToDefault : function () {
    74         vI_msgIdentityClone.setMenuToIdentity(gAccountManager.defaultAccount.defaultIdentity.key, false);
    75     },
    76 
    77     setMenuToIdentity : function (identitykey, startup) {
     82        vI_msgIdentityClone.setMenuToIdentity(gAccountManager.defaultAccount.defaultIdentity.key);
     83    },
     84
     85    setMenuToIdentity : function (identitykey) {
    7886        MenuItems = vI_msgIdentityClone.elements.Obj_MsgIdentityPopup_clone.childNodes
    7987        for (index = 0; index < MenuItems.length; index++) {
     
    8593            }
    8694        }
    87         vI_msgIdentityClone.LoadIdentity(startup);
     95        vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.doCommand();
    8896    },
    8997   
     
    99107            }
    100108        }
     109        vI_notificationBar.dump("## vI_msgIdentityClone: MsgIdentityPopup.doCommand()\n");
     110        vI_msgIdentityClone.elements.Obj_MsgIdentityPopup.doCommand();
    101111    },
    102112   
     
    110120    // if VIdentity Extension is closed after the extension area was opened at least once,
    111121    // remove the Virtual Account if a different (usual) Account is choosen in the cloned dropdown-menu
    112     LoadIdentity : function(startup)
     122    LoadIdentity : function()
    113123    {
    114124        if (vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.selectedItem.value != "vid") {
     
    116126            vI_smtpSelector.resetMenuToMsgIdentity(
    117127                vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.selectedItem.value);
    118             vI_notificationBar.dump("## vI_msgIdentityClone: calling LoadIdentity(" + startup +") from MsgCompose\n")
    119             LoadIdentity(startup);
    120128        }
    121129        vI_msgIdentityClone.initMsgIdentityTextbox_clone();
     
    211219                            vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.setAttribute("label", address.name + " <" + address.email + ">");
    212220                            vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.setAttribute("accountname", " - " + accounts[i].incomingServer.prettyName);
    213                             vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.setAttribute("accountkey", "");
    214221                            return false;
    215222                        }
  • chrome/content/v_identity/vI_notificationBar.js

    r9e9bab r2694fe  
    3232   
    3333    Obj_vINotification : null,
     34    Obj_DebugBox : null,
    3435   
     36    versionOk : false,
     37   
     38    checkVersion : function() {
     39        // the notification-bar only works from 1.5.0.7 on, else thunderbird segfaults
     40        const THUNDERBIRD_ID = "{3550f703-e582-4d05-9a08-453d09bdfdc6}";
     41        if (("@mozilla.org/xre/app-info;1" in Components.classes) &&
     42            ("@mozilla.org/xpcom/version-comparator;1" in Components.classes)) {
     43            var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
     44                .getService(Components.interfaces.nsIXULAppInfo);
     45            var appID = appInfo.ID
     46            var appVersion = appInfo.version
     47            var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
     48                .getService(Components.interfaces.nsIVersionComparator);
     49            if (appID != THUNDERBIRD_ID || versionChecker.compare(appVersion, "1.5.0.7") >= 0)
     50                vI_notificationBar.versionOk = true
     51        }
     52    },
     53
    3554    init : function() {
    3655        vI_notificationBar.Obj_vINotification = document.getElementById("vINotification");
     56        vI_notificationBar.checkVersion();
     57        if (!vI_notificationBar.preferences.getBoolPref("debug_notification")) return;
     58        vI_notificationBar.Obj_DebugBox = document.getElementById("vIDebugBox");
     59        vI_notificationBar.Obj_DebugBox.setAttribute("hidden","false");
     60        document.getElementById("vIDebugBoxSplitter").setAttribute("hidden","false");
     61        vI_notificationBar.dump_app_version();
    3762    },
    3863   
     
    4368    },
    4469   
     70    clear_dump : function() {
     71        if (!vI_notificationBar.Obj_DebugBox) return;
     72        new_DebugBox = vI_notificationBar.Obj_DebugBox.cloneNode(false);
     73        vI_notificationBar.Obj_DebugBox.parentNode.replaceChild(
     74            new_DebugBox, vI_notificationBar.Obj_DebugBox);
     75        vI_notificationBar.Obj_DebugBox = new_DebugBox;
     76        vI_notificationBar.dump_app_version();
     77    },
     78   
     79    dump_app_version : function(note) {
     80        // add some information about the mail-client and the extensions installed
     81        if ("@mozilla.org/xre/app-info;1" in Components.classes) {
     82            var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
     83                .getService(Components.interfaces.nsIXULAppInfo);
     84            var protohandler = Components.classes["@mozilla.org/network/protocol;1?name=http"]
     85                .getService(Components.interfaces.nsIHttpProtocolHandler);
     86            vI_notificationBar.dump(appInfo.name + " " + appInfo.version + " (" + appInfo.appBuildID + "; " + protohandler.oscpu + ")\n")
     87        }
     88        else vI_notificationBar.dump("mail-client seems not supported by Virtual Identity Extension")
     89       
     90        // copied and adapted from nightly tester tools from Dave Townsend (http://www.oxymoronical.com/web/firefox/nightly)
     91        try {   var em = Components.classes["@mozilla.org/extensions/manager;1"]
     92                .getService(Components.interfaces.nsIExtensionManager);
     93            var items = em.getItemList(Components.interfaces.nsIUpdateItem.TYPE_EXTENSION, {});
     94            var rdfS = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
     95            var ds = em.datasource;
     96            var disabledResource = rdfS.GetResource("http://www.mozilla.org/2004/em-rdf#disabled");
     97            var isDisabledResource = rdfS.GetResource("http://www.mozilla.org/2004/em-rdf#isDisabled");
     98            var text = [];
     99            for (var i=0; i<items.length; i++)
     100            {
     101                var output = " - " + items[i].name + " " + items[i].version;
     102                var source = rdfS.GetResource("urn:mozilla:item:"+items[i].id);
     103                var disabled = ds.GetTarget(source, disabledResource, true);
     104                if (!disabled) disabled = ds.GetTarget(source, isDisabledResource, true);
     105                try {
     106                    disabled=disabled.QueryInterface(Components.interfaces.nsIRDFLiteral);
     107                    if (disabled.Value=="true") output += " [DISABLED]";
     108                }
     109                catch (e) { }
     110                vI_notificationBar.dump(output + "\n")
     111            }
     112        }
     113        catch (e) {};
     114        vI_notificationBar.dump("--------------------------------------------------------------------------------\n")
     115    },
     116   
    45117    dump : function(note) {
    46         dump(note); // maybe this will be changed later, not by now ;)
     118        if (!vI_notificationBar.preferences.getBoolPref("debug_notification")) {
     119            if (!vI_notificationBar.Obj_DebugBox) return;
     120            vI_notificationBar.Obj_DebugBox.setAttribute("hidden","true");
     121            document.getElementById("vIDebugBoxSplitter").setAttribute("hidden","true");
     122            vI_notificationBar.Obj_DebugBox = null;
     123            return
     124        }
     125        dump(note);
     126        if (!vI_notificationBar.Obj_DebugBox) vI_notificationBar.init();
     127        if (!vI_notificationBar.Obj_DebugBox) return;
     128        var new_text = document.createTextNode(note);
     129        var new_br = document.createElementNS("http://www.w3.org/1999/xhtml", 'br');
     130        vI_notificationBar.Obj_DebugBox.inputField.appendChild(new_text);
     131        vI_notificationBar.Obj_DebugBox.inputField.appendChild(new_br);
     132        vI_notificationBar.Obj_DebugBox.inputField.scrollTop =
     133            vI_notificationBar.Obj_DebugBox.inputField.scrollHeight - vI_notificationBar.Obj_DebugBox.inputField.clientHeight
    47134    },
    48135   
     
    58145   
    59146    addNote: function(note, prefstring) {
     147        vI_notificationBar.dump("** " + note + "\n");
    60148        if (!vI_notificationBar.preferences.getBoolPref(prefstring)) return;
    61149        if (!vI_notificationBar.Obj_vINotification) vI_notificationBar.init();
     150        if (!vI_notificationBar.versionOk) return;
    62151        if (vI_notificationBar.timer) window.clearTimeout(vI_notificationBar.timer);
    63152        var oldNotification = vI_notificationBar.Obj_vINotification.currentNotification
  • chrome/content/v_identity/vI_prefDialog.js

    r9e9bab r2694fe  
    4545                "VIdent_identity.smart_reply_ask_always",
    4646                "VIdent_identity.show_smtp",
     47                "VIdent_identity.menu_entry",
    4748                "VIdent_identity.smart_reply_headers",
    4849                "VIdent_identity.smart_reply_filter",
    4950                "VIdent_identity.smart_draft",
    50                 "VIdent_identity.smart_reply_prefer_headers",
    5151                "VIdent_identity.smart_reply_notification",
    5252                "VIdent_identity.get_header_notification",
     53                "VIdent_identity.smart_reply_defaultFullName",
    5354                "VIdent_identity.smart_reply_ignoreFullName",
    5455                "VIdent_identity.smart_reply_autocreate",
    55                 "VIdent_identity.notification_timeout"],
     56                "VIdent_identity.notification_timeout",
     57                "VIdent_identity.debug_notification"],
    5658   
    5759        init : function() {
     
    107109                "VIdent_identity.smart_reply_headers",
    108110                "VIdent_identity.smart_reply_filter",
    109                 "VIdent_identity.smart_reply_prefer_headers",
    110111                "VIdent_identity.smart_reply_ignoreFullName",
    111112                "VIdent_identity.smart_reply_autocreate",
     
    128129            ask_always.setAttribute("disabled", (autocreate.checked || !ask.checked))
    129130            autocreate.setAttribute("disabled", ask_always.checked)
     131        },
     132       
     133        smartReplyHeaderReset : function() {
     134            var textfield = document.getElementById("VIdent_identity.smart_reply_headers")
     135            textfield.value = "x-original-to\nto\ncc"
    130136        }
    131137    },
     
    139145        SetSpecialFolderNamesWithDelims();
    140146
    141         var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
    142         var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"].getService(Components.interfaces.nsIVersionComparator);
     147        var appID = null;
     148        var appVersion = null;
     149        var versionChecker;
     150        if("@mozilla.org/xre/app-info;1" in Components.classes) {
     151            var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
     152                .getService(Components.interfaces.nsIXULAppInfo);
     153            appID = appInfo.ID
     154            appVersion = appInfo.version
     155        }
     156        if("@mozilla.org/xpcom/version-comparator;1" in Components.classes)
     157            versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
     158                .getService(Components.interfaces.nsIVersionComparator);
     159        else appID = null;
    143160        const THUNDERBIRD_ID = "{3550f703-e582-4d05-9a08-453d09bdfdc6}";
    144         //const MOZILLA_ID = "{86c18b42-e466-45a9-ae7a-9b95ba6f5640}";
    145161        const SEAMONKEY_ID = "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}";
    146         if ((appInfo.ID == THUNDERBIRD_ID && versionChecker.compare(appInfo.version, "2.0b") < 0) ||
    147             (appInfo.ID == SEAMONKEY_ID && versionChecker.compare(appInfo.version, "1.5a") < 0)) {
     162        if ((!appID) || (appID == THUNDERBIRD_ID && versionChecker.compare(appVersion, "2.0b") < 0) ||
     163            (appID == SEAMONKEY_ID && versionChecker.compare(appVersion, "1.5a") < 0)) {
    148164            document.getElementById("version-warning").setAttribute("hidden", "false");
    149165            document.getElementById("VIdent_identity.smart_draft").setAttribute("disabled", "true");
    150166        }
    151        
     167        if ((!appID) || (appID == THUNDERBIRD_ID && versionChecker.compare(appVersion, "1.5.0.7") < 0)) {
     168            document.getElementById("notificationGroupBox").setAttribute("hidden", "true");
     169        }
     170        if ((!appID) || (appID != THUNDERBIRD_ID)) {
     171            document.getElementById("VIdent_identity.menu_entry").setAttribute("hidden", "true");
     172        }
    152173       
    153174        vI_prefDialog.base.smartReplyConstraint(document.getElementById("VIdent_identity.smart_reply"));
  • chrome/content/v_identity/vI_prefDialog.xul

    r9e9bab r2694fe  
    8686            <checkbox id="VIdent_identity.show_smtp" label="&vident.prefs.SMTP.label;"
    8787                prefstring="show_smtp" />
     88            <checkbox id="VIdent_identity.menu_entry" label="&vident.prefs.menuEntry.label;"
     89                prefstring="menu_entry" />
    8890        </groupbox>
    8991    </tabpanel>
     
    175177                <description width="500px">&vident.prefs.smartReplyTab.Tab1.desc;</description>
    176178                <hbox>
    177                 <vbox><description width="300px">&vident.prefs.smartReply.headers.desc;</description><spacer flex="1"/></vbox>
     179                <vbox><description width="300px">&vident.prefs.smartReply.headers.desc;</description>
     180                <spacer flex="1"/>
     181                <button label="&vident.prefs.smartReply.headers.reset;" oncommand="vI_prefDialog.base.smartReplyHeaderReset();"/>
     182                </vbox>
    178183                <textbox id="VIdent_identity.smart_reply_headers" multiline="true"
    179184                    rows="4" size="20" wrap="false" flex="1"
    180185                    prefstring="smart_reply_headers" />
    181186                </hbox>
    182                 <checkbox id="VIdent_identity.smart_reply_prefer_headers" label="&vident.prefs.smartReply.preferHeader.label;"
    183                     prefstring="smart_reply_prefer_headers"/>
    184187            </vbox>
    185188            </groupbox>
     
    198201                <checkbox id="VIdent_identity.smart_reply_ignoreFullName" label="&vident.prefs.smartReply.ignoreFullname.label;"
    199202                    prefstring="smart_reply_ignoreFullName" wrap="true" width="500px"/>
     203                <hbox>
     204                <description width="300px">&vident.prefs.smartReply.defaultFullname.label;</description>
     205                <vbox><spacer flex="1"/><textbox id="VIdent_identity.smart_reply_defaultFullName" flex="1"
     206                    prefstring="smart_reply_defaultFullName" size="20" /><spacer flex="1"/></vbox>
     207                </hbox>
    200208            </vbox>
    201209            </groupbox>
     
    225233    <tabpanel orient="vertical" label="&vident.prefs.notificationTab.header;">
    226234        <dialogheader title="&vident.prefs.notificationTab.header;"/>
    227         <groupbox>
     235        <groupbox id="notificationGroupBox">
    228236        <caption label="&vident.prefs.notificationTab.caption;"/>
    229237        <vbox align="left">
     
    240248        </vbox>
    241249        </groupbox>
     250        <groupbox>
     251        <caption label="&vident.prefs.notificationTab.Debug.caption;"/>
     252        <vbox align="left">
     253            <description width="500px">&vident.prefs.notifyDebug.desc;</description>
     254            <checkbox id="VIdent_identity.debug_notification" label="&vident.prefs.notifyDebug.label;"
     255                prefstring="debug_notification"/>
     256        </vbox>
     257        </groupbox>
    242258    </tabpanel>
    243259    </tabpanels>
  • chrome/content/v_identity/vI_smartIdentity.js

    r9e9bab r2694fe  
    3333    init : function() {
    3434        // if there is no ID of the original Message  (Why?) leave the function
    35         var uri = vI.params.originalMsgURI;
     35        var uri = gMsgCompose.originalMsgURI;
    3636        if (!uri) {
    3737            vI_notificationBar.dump("## vI_smartIdentity: cant get URI of former Message\n");
    3838            return;
    3939        }
    40         var hdr = vI_smartIdentity.messenger.msgHdrFromURI(uri);
    41        
    42         var type = vI.params.type;
     40        try { var hdr = vI_smartIdentity.messenger.messageServiceFromURI(uri).messageURIToMsgHdr(uri); }
     41        catch(vErr) {
     42            vI_notificationBar.dump("## vI_smartIdentity: can't get Message Header.\n");
     43            vI_notificationBar.dump("## vI_smartIdentity: (maybe you're opening a message stored as a file)\n");
     44            return;
     45        };
     46       
     47        var type = gMsgCompose.type;
    4348        var msgComposeType = Components.interfaces.nsIMsgCompType;
     49        vI_notificationBar.dump("## vI_smartIdentity: msgComposeType = " + type + "\n");
    4450        switch (type) {
     51            case msgComposeType.ForwardAsAttachment:
     52            case msgComposeType.ForwardInline:
    4553            case msgComposeType.Reply:
    4654            case msgComposeType.ReplyAll:
    47             case msgComposeType.ReplyToGroup:
     55            case msgComposeType.ReplyToGroup: // reply to a newsgroup, would possibly be stopped later
    4856            case msgComposeType.ReplyToSender:
    49             case msgComposeType.ReplyToSenderAndGroup:
     57            case msgComposeType.ReplyToSenderAndGroup: // reply to a newsgroup, would possibly be stopped later
     58            case msgComposeType.ReplyWithTemplate:
    5059                if (vI.preferences.getBoolPref("smart_reply"))
    5160                    vI_smartIdentity.SmartReply(hdr);
     
    6372        vI_notificationBar.dump("## vI_smartIdentity: SmartDraft()\n");
    6473       
    65         vI_notificationBar.dump("## vI_smartIdentity: sender " + hdr.author + "\n");
     74        var all_addresses = { number : 1, emails : {}, fullNames : {}, combinedNames : {} };
     75        vI.headerParser.parseHeadersWithArray(hdr.author, all_addresses.emails,
     76            all_addresses.fullNames, all_addresses.combinedNames);
     77        all_addresses.emails[0] = all_addresses.emails.value[0]
     78        all_addresses.fullNames[0] = all_addresses.fullNames.value[0]
     79        all_addresses.combinedNames[0] = all_addresses.combinedNames.value[0]
     80       
     81        vI_notificationBar.dump("## vI_smartIdentity: sender '" + all_addresses.combinedNames[0] + "'\n");
     82       
     83        if (vI_smartIdentity.matchSelectedIdentity(all_addresses)) return;
     84       
     85        if (vI_smartIdentity.smartIdentity_BaseIdentity = vI_smartIdentity.matchAnyIdentity(all_addresses)) {
     86            vI_notificationBar.addNote(
     87                vI.elements.strings.getString("vident.smartIdentity.matchExisting"),
     88                "smart_reply_notification");
     89            window.setTimeout(vI_smartIdentity.updateMsgComposeDialog, 0);
     90            return;
     91        }
     92   
     93        vI_smartIdentity.addSmartIdentitiesToCloneMenu(all_addresses);
     94   
    6695        vI_notificationBar.setNote(vI.elements.strings.getString("vident.smartIdentity.vIUsage") + ".",
    6796                    "smart_reply_notification");
    68         vI_msgIdentityClone.setIdentity(hdr.author)
    69 
    70         vI.helper.addSeparatorToCloneMenu();
    71         var object = vI_msgIdentityClone.elements.Obj_MsgIdentityPopup_clone
    72         var accountname = document.getElementById("prettyName-Prefix").getAttribute("label")
    73             + " - " + vI.helper.getBaseIdentity().email
    74         vI.helper.addIdentityMenuItem(object, hdr.author, accountname, "", "vid")
    75     },
    76    
    77     // check if recent email-address (pre-choosen identity) is found in at least one email-address
     97        vI_msgIdentityClone.setIdentity(all_addresses.combinedNames[0]);
     98    },
     99   
     100    // check if recent email-address (pre-choosen identity) is found in at least one address
    78101    matchSelectedIdentity : function(all_addresses) {
    79         for (index = 0; index < all_addresses.number; index++) {
    80             if (vI.params.identity.email.toLowerCase() == all_addresses.emails.value[index].toLowerCase()
     102        vI_notificationBar.dump("## vI_smartIdentity: search for preselected Identity\n");
     103        current_email = getCurrentIdentity().email.toLowerCase();
     104        current_name =  getCurrentIdentity().fullName.toLowerCase();
     105        for (index = 0; index < all_addresses.number; index++) {
     106            if (current_email == all_addresses.emails[index].toLowerCase()
    81107                && (vI.preferences.getBoolPref("smart_reply_ignoreFullName") ||
    82                 vI.params.identity.fullName == all_addresses.fullNames.value[index])) {
    83                     vI_notificationBar.dump("## vI_smartIdentity: found preselected Identity in address sets, aborting\n");
     108                current_name == all_addresses.fullNames[index].toLowerCase())) {
     109                    vI_notificationBar.dump("## vI_smartIdentity:   found preselected Identity in address sets, aborting\n");
    84110                    return true; // direct hit
    85111                }
    86112        }
     113        vI_notificationBar.dump("## vI_smartIdentity:   collected address(es) doesn't contain preselected Identity, continuing\n");
    87114        return false;
    88115    },
    89116   
    90     // checks if the Identity currently described by the extension-area fields i still available as
     117    // checks if any Identity in the collected address-set i still available as
    91118    // a stored identity. If so, use the stored one.
    92119    matchAnyIdentity : function(all_addresses) {
     120        vI_notificationBar.dump("## vI_smartIdentity: check if any collected address is stored as a (usual) Identity\n");
    93121        var accounts = queryISupportsArray(gAccountManager.accounts, Components.interfaces.nsIMsgAccount);
    94122        for (var i in accounts) {
     
    101129                for (index = 0; index < all_addresses.number; index++) {
    102130                    if (identities[j].getUnicharAttribute("useremail").toLowerCase() ==
    103                         all_addresses.emails.value[index].toLowerCase() &&
     131                        all_addresses.emails[index].toLowerCase() &&
    104132                        (vI.preferences.getBoolPref("smart_reply_ignoreFullName") ||
    105133                        identities[j].getUnicharAttribute("fullName").toLowerCase() ==
    106                         all_addresses.fullNames.value[index].toLowerCase())) {
    107                             vI_notificationBar.dump("## vI_smartIdentity: found existing Identity in address sets, aborting\n");
     134                        all_addresses.fullNames[index].toLowerCase())) {
     135                            vI_notificationBar.dump("## vI_smartIdentity:   found existing Identity in address sets, aborting\n");
    108136                            return identities[j];
    109137                        }
     
    111139                }
    112140            }
     141        vI_notificationBar.dump("## vI_smartIdentity:   no collected address found stored, continuing\n");
    113142        return null;
    114143    },
     
    116145   
    117146    filterAddresses : function(all_addresses) {
    118         var return_addresses = { number : 0,    emails : { value : new Array() },
    119                             fullNames : { value : new Array() },
    120                             combinedNames : { value : new Array() } };
     147        var return_addresses = { number : 0, emails : { }, fullNames : { }, combinedNames : { } };
    121148       
    122149        var filter_list = vI.preferences.getCharPref("smart_reply_filter").split(/\n/)
     
    142169                        if (skipRegExp) break;
    143170                        try {   /^\/(.*)\/$/.exec(filter_list[i]);
    144                             add_addr =  (all_addresses.emails.value[j].match(new RegExp(RegExp.$1,"i")))
     171                            add_addr =  (all_addresses.emails[j].match(new RegExp(RegExp.$1,"i")))
    145172                        }
    146173                        catch(vErr) {
     
    152179                        break;
    153180                    case filterType.StrCmp:
    154                         add_addr = (filter_list[i] == all_addresses.emails.value[j])
     181                        add_addr = (filter_list[i] == all_addresses.emails[j])
    155182                        break;
    156183                }
    157184                if (add_addr)   return_addresses = vI_smartIdentity.addWithoutDuplicates(return_addresses,
    158                         all_addresses.emails.value[j],
    159                         all_addresses.fullNames.value[j],
    160                         all_addresses.combinedNames.value[j])
     185                        all_addresses.emails[j],
     186                        all_addresses.fullNames[j],
     187                        all_addresses.combinedNames[j])
    161188            }
    162189        }
     
    166193    addWithoutDuplicates : function(all_addresses, email, fullName, combinedName) {
    167194        for (index = 0; index < all_addresses.number; index++) {
    168             if (all_addresses.emails.value[index] == email) {
     195            if (all_addresses.emails[index] == email) {
    169196                // found, so check if we can use the Name of the new field
    170                 if (all_addresses.fullNames.value[index] == "" && fullName != "") {
    171                     all_addresses.fullNames.value[index] = fullName
    172                     all_addresses.combinedNames.value[index] = combinedName
    173                     vI_notificationBar.dump("## vI_smartIdentity: added fullName '" + fullName
     197                if (all_addresses.fullNames[index] == "" && fullName != "") {
     198                    all_addresses.fullNames[index] = fullName
     199                    all_addresses.combinedNames[index] = combinedName
     200                    vI_notificationBar.dump("## vI_smartIdentity:   added fullName '" + fullName
    174201                        + "' to stored email '" + email +"'\n")
    175202                }
     
    177204            }
    178205        }
    179         vI_notificationBar.dump("## vI_smartIdentity: add new address to result:" + email + "\n")
    180         all_addresses.emails.value[index] = email;
    181         all_addresses.fullNames.value[index] = fullName;
    182         all_addresses.combinedNames.value[index] = combinedName;
     206        vI_notificationBar.dump("## vI_smartIdentity:   add new address to result:" + combinedName + "\n")
     207        all_addresses.emails[index] = email;
     208        all_addresses.fullNames[index] = fullName;
     209        all_addresses.combinedNames[index] = combinedName;
    183210        all_addresses.number = index + 1;
    184211        return all_addresses;
     212    },
     213   
     214    collectAddresses : function(all_addresses, hdr) {
     215        // add emails from selected headers (stored by vI_getHeader.xul/js)
     216        var reply_headers = vI.preferences.getCharPref("smart_reply_headers").split(/\n/)
     217        for (index = 0; index < reply_headers.length; index++) {
     218            // ------------- prepare fields to read the stored header ----------------
     219            var replyHeader_splitted = reply_headers[index].split(/:/)
     220            // use first part (all before ':') as the header name
     221            var replyHeaderName = replyHeader_splitted[0].toLowerCase()
     222            // check second or third part for any number
     223            var replyHeaderNumber = parseInt(replyHeader_splitted[1])
     224            if (isNaN(replyHeaderNumber)) replyHeaderNumber = parseInt(replyHeader_splitted[2])
     225            // check if Fullnames should be erased
     226            var replyHeaderEmptyFullNames = ((replyHeader_splitted[1] && replyHeader_splitted[1].match(/@/)) ||
     227                            (replyHeader_splitted[2] && replyHeader_splitted[2].match(/@/)))
     228           
     229            // create header name to find the value
     230            var replyHeaderNameToRead = replyHeaderName
     231            if (!isNaN(replyHeaderNumber)) replyHeaderNameToRead += ":" + replyHeaderNumber
     232
     233            // ------------- read the stored header -------------------------------
     234            var value = hdr.getStringProperty("vI_" + replyHeaderNameToRead)
     235            vI_notificationBar.dump("## vI_smartIdentity: reading header '" +
     236                replyHeaderNameToRead + "'\n");
     237           
     238            // ------------- parse address-string to get a field of single email-addresses
     239            var splitted = { number : 0, emails : {}, fullNames : {}, combinedNames : {} };
     240            splitted.number = vI.headerParser.parseHeadersWithArray(value, splitted.emails,
     241                splitted.fullNames, splitted.combinedNames);
     242           
     243            // move found addresses step by step to all_addresses, and change values if requested
     244            for (i = 0; i < splitted.number; i++) {
     245                all_addresses.emails[all_addresses.number] = splitted.emails.value[i]
     246               
     247                // empty FullName if requested
     248                if (replyHeaderEmptyFullNames) splitted.fullNames.value[i] = ""
     249                all_addresses.fullNames[all_addresses.number] = splitted.fullNames.value[i]
     250               
     251                // set CombinedName related to new values
     252                if (all_addresses.fullNames[all_addresses.number] != "")
     253                    all_addresses.combinedNames[all_addresses.number] =
     254                        all_addresses.fullNames[all_addresses.number] + " <" +
     255                        all_addresses.emails[all_addresses.number] + ">"
     256                else all_addresses.combinedNames[all_addresses.number] =
     257                    all_addresses.emails[all_addresses.number]
     258               
     259                vI_notificationBar.dump("## vI_smartIdentity:   found '" +
     260                    all_addresses.combinedNames[all_addresses.number++] + "'\n")
     261            }
     262        }   
    185263    },
    186264   
     
    194272        }
    195273       
     274        var all_addresses = { number : 0, emails : {}, fullNames : {}, combinedNames : {} };
     275       
    196276        /* first step: collect addresses */
    197        
    198         // add additional emails from selected headers (stored by vI_getHeader.xul/js)
    199         var addresses = ""
    200         var reply_headers = vI.preferences.getCharPref("smart_reply_headers").split(/\n/)
    201         for (index = 0; index < reply_headers.length; index++) {
    202             var value = hdr.getStringProperty(reply_headers[index])
    203             if (value != "") {
    204                 vI_notificationBar.dump("## vI_smartIdentity: found '" + value + "' in stored headers\n")
    205                 addresses += ", " + value
    206             }
    207         }
    208        
    209         if (vI.preferences.getBoolPref("smart_reply_prefer_headers"))
    210             addresses = addresses + ", " + hdr.recipients + ", " + hdr.ccList
    211         else    addresses = hdr.recipients + ", " + hdr.ccList + addresses
    212         // replace trailing commata
    213         addresses = addresses.replace(/^((, )+)?/, "");
    214         vI_notificationBar.dump("## vI_smartIdentity: address-string: '" + addresses + "'\n")
    215        
    216         var all_addresses = { number : 0, emails : {}, fullNames : {}, combinedNames : {} };
    217         all_addresses.number = vI.headerParser
    218             .parseHeadersWithArray(addresses, all_addresses.emails,
    219                     all_addresses.fullNames, all_addresses.combinedNames);
    220        
    221         vI_notificationBar.dump("## vI_smartIdentity: " + all_addresses.number + " addresses after parsing, before filtering\n")
    222        
     277        vI_smartIdentity.collectAddresses(all_addresses, hdr);
     278       
     279        vI_notificationBar.dump("## vI_smartIdentity: " + all_addresses.number + " address(es) after parsing, before filtering\n")
    223280       
    224281        /* second step: filter (and sort) addresses */
     
    236293        all_addresses = vI_smartIdentity.filterAddresses(all_addresses);
    237294       
    238         vI_notificationBar.dump("## vI_smartIdentity: filtering done, " + all_addresses.number + " addresses left\n")
     295        vI_notificationBar.dump("## vI_smartIdentity: filtering done, " + all_addresses.number + " address(es) left\n")
    239296        if (all_addresses.number == 0) return;
    240297       
    241         /* second step: select address */
     298        var smart_reply_defaultFullName = vI.preferences.getCharPref("smart_reply_defaultFullName")
     299        if (smart_reply_defaultFullName != "") {
     300            for (index = 0; index < all_addresses.number; index++) {
     301                if (all_addresses.fullNames[index] == "") {
     302                    all_addresses.fullNames[index] = smart_reply_defaultFullName
     303                    all_addresses.combinedNames[index] =
     304                        smart_reply_defaultFullName + " <" + all_addresses.emails[index] + ">"
     305                    vI_notificationBar.dump("## vI_smartIdentity: added default FullName '" +
     306                        smart_reply_defaultFullName + "' to '" + all_addresses.emails[index] + "'\n")
     307                }
     308            }
     309        }   
     310       
     311        /* third step: select address */
    242312       
    243313        vI_smartIdentity.addSmartIdentitiesToCloneMenu(all_addresses);
     
    255325                + vI.elements.strings.getString("vident.smartIdentity.moreThanOne");
    256326            vI_notificationBar.addNote(label + ".", "smart_reply_notification");
    257                     vI_smartIdentity.changeIdentityToSmartIdentity(all_addresses, 0);
     327            vI_smartIdentity.changeIdentityToSmartIdentity(all_addresses, 0);
    258328        }
    259329    },
    260330   
    261331    changeIdentityToSmartIdentity : function(all_addresses, selectedValue) {
    262         vI_msgIdentityClone.setIdentity(all_addresses.combinedNames.value[selectedValue]);
     332        vI_msgIdentityClone.setIdentity(all_addresses.combinedNames[selectedValue]);
    263333        vI_smartIdentity.removeSmartIdentityFromRecipients(all_addresses, selectedValue);
    264334    },
     
    267337        for (var row = 1; row <= top.MAX_RECIPIENTS; row ++) {
    268338            var input = awGetInputElement(row);
    269             if (input.value == all_addresses.emails.value[index] ||
    270                 input.value == all_addresses.combinedNames.value[index]) {
    271                     awDeleteRow(row);
     339            if (input.value == all_addresses.emails[index] ||
     340                input.value == all_addresses.combinedNames[index]) {
     341                    awGetInputElement(row).value = ""
     342                    awCleanupRows()
    272343                    vI_notificationBar.addNote(" " +
    273344                        vI.elements.strings.getString("vident.smartIdentity.remRecipient"),
     
    279350   
    280351    updateMsgComposeDialog : function() {
    281         vI_msgIdentityClone.setMenuToIdentity(vI_smartIdentity.smartIdentity_BaseIdentity.key, false);
     352        vI_msgIdentityClone.setMenuToIdentity(vI_smartIdentity.smartIdentity_BaseIdentity.key);
    282353        // after inserting a new signature (as part of the new identity) the cursor is not at the right place.
    283354        // there is no easy way to est the cursor at the end, before the signature, so set it at the beginning.
     
    295366                                    .getAttribute("accountname")
    296367        for (index = 0; index < all_addresses.number; index++)
    297             vI.helper.addIdentityMenuItem(object, all_addresses.combinedNames.value[index],
     368            vI.helper.addIdentityMenuItem(object, all_addresses.combinedNames[index],
    298369                accountname, "", "vid")
    299370    },
  • chrome/content/v_identity/v_identity.js

    r9e9bab r2694fe  
    4848        },
    4949
    50         selectIdentityMenuItem: function(object, MenuItem) {
    51             object.selectedItem = MenuItem;
    52             // set the account name on the menu list value.
    53             object.setAttribute("label", MenuItem.getAttribute("label"));
    54             object.setAttribute("accountname", MenuItem.getAttribute("accountname"));
    55             object.setAttribute("accountkey", MenuItem.getAttribute("accountkey"));
    56             object.setAttribute("value", MenuItem.getAttribute("value"));
    57         },
    58 
    5950        addSeparatorToCloneMenu: function() {
    6051            var object = vI_msgIdentityClone.elements.Obj_msgIdentityClone;
     
    7263            var address = vI_msgIdentityClone.elements.Obj_MsgIdentityTextbox_clone.value;
    7364            var splitted = { number : 0, emails : {}, fullNames : {}, combinedNames : {} };
    74             vI.headerParser .parseHeadersWithArray(address, splitted.emails,
     65            vI.headerParser.parseHeadersWithArray(address, splitted.emails,
    7566                splitted.fullNames, splitted.combinedNames);
    7667            return { name: splitted.fullNames.value[0], email: splitted.emails.value[0],
     
    8677                .getService(Components.interfaces.nsIMsgHeaderParser),
    8778   
    88     params : window.arguments[0],
    89 
    9079    // Those variables keep pointers to original functions which might get replaced later
    9180    original_functions : {
     
    136125        GenericSendMessage: function (msgType) {
    137126            vI_notificationBar.dump("## v_identity: VIdentity_GenericSendMessage\n");
    138 
    139127            // dont allow user to fake identity if Message is not sended NOW and thunderbird-version is below 2.0 !!!!
    140             var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
    141             var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"].getService(Components.interfaces.nsIVersionComparator);
     128            var appID = null;
     129            var appVersion = null;
     130            var versionChecker;
     131            if("@mozilla.org/xre/app-info;1" in Components.classes) {
     132                var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
     133                    .getService(Components.interfaces.nsIXULAppInfo);
     134                appID = appInfo.ID
     135                appVersion = appInfo.version
     136            }
     137            if("@mozilla.org/xpcom/version-comparator;1" in Components.classes)
     138                versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
     139                    .getService(Components.interfaces.nsIVersionComparator);
     140            else appID = null;
    142141            const THUNDERBIRD_ID = "{3550f703-e582-4d05-9a08-453d09bdfdc6}";
    143             //const MOZILLA_ID = "{86c18b42-e466-45a9-ae7a-9b95ba6f5640}";
    144142            const SEAMONKEY_ID = "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}";
    145143            if (msgType != nsIMsgCompDeliverMode.Now &&
    146                 ((appInfo.ID == THUNDERBIRD_ID && versionChecker.compare(appInfo.version, "2.0b") < 0) ||
    147                 (appInfo.ID == SEAMONKEY_ID && versionChecker.compare(appInfo.version, "1.5a") < 0)))   {
     144                ((!appID) || (appID == THUNDERBIRD_ID && versionChecker.compare(appVersion, "2.0b") < 0) ||
     145                (appID == SEAMONKEY_ID && versionChecker.compare(appVersion, "1.5a") < 0))) {
    148146                var server = gAccountManager.defaultAccount.incomingServer.prettyName
    149147                var name = gAccountManager.defaultAccount.defaultIdentity.fullName
     
    179177            if (vI.original_functions.GenericSendMessage) return true;
    180178            if (typeof(GenericSendMessage)=="function") {
    181                 vI_notificationBar.dump("## v_identity: replace GenericSendMessage\n");
     179                vI_notificationBar.dump("## v_identity: replace GenericSendMessage (Virtual Identity activated)\n");
    182180                vI.original_functions.GenericSendMessage = GenericSendMessage;
    183181                GenericSendMessage = function (msgType) {
     
    199197    // initialization //
    200198    init: function() {
     199        // clear the DebugArea (not needed cause window is new)
     200        //~ vI_notificationBar.clear_dump()
     201   
    201202        // initialize the pointers to extension elements
    202203        vI.elements.init_base()
     
    208209        storage_box.removeChild(vI.elements.Area_MsgIdentityHbox)
    209210        parent_hbox.appendChild(vI.elements.Area_MsgIdentityHbox);
    210        
    211         vI.elements.Obj_MsgIdentity.setAttribute("hidden", "true");
    212211       
    213212        // initialize the pointers to extension elements (initialize those earlier might brake the interface)
     
    230229    addVirtualIdentityToMsgIdentityMenu : function()
    231230    {
    232         vI.storeBaseIdentity = {
    233             label : vI.elements.Obj_MsgIdentity.getAttribute("label"),
    234             accountname : vI.elements.Obj_MsgIdentity.getAttribute("accountname"),
    235             accountkey : vI.elements.Obj_MsgIdentity.getAttribute("accountkey"),
    236             value : vI.elements.Obj_MsgIdentity.getAttribute("value")
    237         }
     231        vI.storeBaseIdentity = vI.elements.Obj_MsgIdentity.selectedItem
    238232        var newMenuItem = vI.helper.addIdentityMenuItem(vI.elements.Obj_MsgIdentityPopup,
    239233                        vI_account.account.defaultIdentity.identityName,
     
    241235                        vI_account.account.key,
    242236                        vI_account.account.defaultIdentity.key)
    243         vI.helper.selectIdentityMenuItem(vI.elements.Obj_MsgIdentity, newMenuItem)
     237        vI.elements.Obj_MsgIdentity.selectedItem = newMenuItem;
     238        vI.elements.Obj_MsgIdentity.setAttribute("label", newMenuItem.getAttribute("label"));
     239        vI.elements.Obj_MsgIdentity.setAttribute("accountname", newMenuItem.getAttribute("accountname"));
     240        vI.elements.Obj_MsgIdentity.setAttribute("value", newMenuItem.getAttribute("value"));
    244241    },
    245242   
     
    248245    {
    249246        MenuItems = vI_msgIdentityClone.elements.Obj_MsgIdentity.firstChild.childNodes
    250         for (index = 0; index < MenuItems.length; index++) {
    251             if ( MenuItems[index].getAttribute("value") == vI_account.account.defaultIdentity.key )
    252                 vI_msgIdentityClone.elements.Obj_MsgIdentity.firstChild.removeChild(MenuItems[index])
    253         }
    254         vI.elements.Obj_MsgIdentity.setAttribute("label", vI.storeBaseIdentity.label);
    255         vI.elements.Obj_MsgIdentity.setAttribute("accountname", vI.storeBaseIdentity.accountname);
    256         vI.elements.Obj_MsgIdentity.setAttribute("accountkey", vI.storeBaseIdentity.accountkey);
    257         vI.elements.Obj_MsgIdentity.setAttribute("value", vI.storeBaseIdentity.value);
     247        for (index = 1; index <= MenuItems.length; index++) {
     248            if ( MenuItems[MenuItems.length - index].getAttribute("value") == vI_account.account.defaultIdentity.key )
     249                vI_msgIdentityClone.elements.Obj_MsgIdentity.firstChild.removeChild(MenuItems[MenuItems.length - index])
     250        }
     251        vI.elements.Obj_MsgIdentity.selectedItem = vI.storeBaseIdentity;
     252        vI.elements.Obj_MsgIdentity.setAttribute("label", vI.storeBaseIdentity.getAttribute("label"));
     253        vI.elements.Obj_MsgIdentity.setAttribute("accountname", vI.storeBaseIdentity.getAttribute("accountname"));
     254        vI.elements.Obj_MsgIdentity.setAttribute("value", vI.storeBaseIdentity.getAttribute("value"));
     255        vI.storeBaseIdentity = null;
    258256    },
    259257   
     
    268266            GenericSendMessage = vI.original_functions.GenericSendMessage;
    269267            vI.original_functions.GenericSendMessage = null;
     268            vI_notificationBar.dump("## v_identity: restored GenericSendMessage (Virtual Identity deactivated)\n");
    270269        }
    271270    },
  • chrome/content/v_identity/v_identity.xul

    r9e9bab r2694fe  
    5050  </stringbundleset>
    5151
     52<vbox id="appcontent" >
     53    <splitter id="vIDebugBoxSplitter" hidden="true"/>
     54    <textbox id="vIDebugBox" hidden="true" multiline="true" readonly="true"
     55    DOMAttrModified="if(event.attrName == 'value') this.value = event.newValue; return true;"/>
     56</vbox>
     57
    5258<toolbox id="headers-box">
    5359    <notificationbox id="vINotification" position="1" insertbefore="MsgHeadersToolbar" />
     
    5864<hbox id="msgIdentityHbox" flex="1">
    5965    <menulist id="msgIdentity_clone" class="identity_clone-menulist person-icon"
    60         label="..." flex="1" oncommand="vI_msgIdentityClone.LoadIdentity(false);">
     66        label="..." flex="1" oncommand="vI_msgIdentityClone.LoadIdentity();" hidden="true">
    6167        <menupopup id="msgIdentityPopup_clone"/>
    6268    </menulist>
  • chrome/locale/cs-CZ/v_identity/contents.rdf

    r9e9bab r2694fe  
    2020
    2121</RDF:RDF>
    22 </RDF:RDF>
  • chrome/locale/cs-CZ/v_identity/v_identity.dtd

    r9e9bab r2694fe  
    1212<!ENTITY vident.prefs.smartReplyNewsgroups.label "pouşít Smart Reply i při odpovědi do diskusní skupiny">
    1313<!ENTITY vident.prefs.SMTP.label "zobrazit nabídku SMTP">
     14<!ENTITY vident.prefs.menuEntry.label "přidat poloÅŸku do dialogu MoÅŸnosti v nabídce Nástroje">
    1415<!ENTITY vident.prefs.vIdentityTab.header "Nastavení virtuálních identit">
    1516<!ENTITY vident.prefs.vIdentityTab.valueTab.label "vlastnosti ke zkopírování">
     
    2829<!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. pouşít adresy">
    2930<!ENTITY vident.prefs.smartReplyTab.caption "Virtual Identity Smart Reply">
    30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "Pro nalezení identity pro odpověď musí Smart Reply získat seznam moÅŸnÃœch identit odesilatele. Analyzuje proto hlavičky &apos;To&apos; a &apos;Cc&apos;. Má-li Smart Reply analyzovat dodatečné hlavičky, zadejte je zde (moÅŸná si pro jejich rozeznání budete muset nainstalovat další rozšíření, jako například enigmail nebo mnenhy).">
    31 <!ENTITY vident.prefs.smartReply.headers.desc "nové hlavičky - jedna na řádku, bez &apos;:&apos;, například &apos;x-original-to&apos;">
    32 <!ENTITY vident.prefs.smartReply.preferHeader.label "upřednostnit adresy těchto hlaviček před &apos;To&apos; a &apos;Cc&apos;">
     31<!ENTITY vident.prefs.smartReplyTab.Tab1.desc "Pro nalezení identity pro odpověď musí Smart Reply získat seznam moÅŸnÃœch identit odesilatele. Analyzuje proto hlavičky &apos;To&apos; a &apos;Cc&apos;. Má-li Smart Reply analyzovat dodatečné hlavičky. Zde můşete zadat tyto a/nebo jiné hlavičky. (Dodatečné moÅŸnosti: Pro vÃœběr n-té hlavičky z několika hlaviček stejného jména přidejte &apos;:n&apos;. Pokud k některému záznamu přidáte &apos;:@&apos;, pouÅŸije se pouze e-mailová adresa a jméno bude ignorováno.)">
     32<!ENTITY vident.prefs.smartReply.headers.desc "nové hlavičky - jedna na řádku, bez &apos;:&apos;, například &apos;x-original-to&apos; nebo &apos;x-original-to:@&apos; nebo &apos;x-original-to:2:@&apos;">
     33<!ENTITY vident.prefs.smartReply.headers.reset "nastavit vÃœchozí hodnoty">
    3334<!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Adresy se musí po získání filtrovat. Filtry jsou aplikovány postupně, můşete je tedy pouşít pro seřazení vÃœsledku. První nalezená adresa můşe bÃœt ihned pouÅŸita jako odesilatelova identita. Pokud nepouÅŸijete filtr, budou přeneseny vÅ¡echny adresy.">
    3435<!ENTITY vident.prefs.smartReply.filter.desc "Filtr Smart Reply - jeden filtr na řádku, je moÅŸné pouşít regulární vÃœrazy (například &apos;/@mozilla.org$/&apos; platí pro vÅ¡echny e-maily z domény mozilla.org">
    3536<!ENTITY vident.prefs.smartReply.ignoreFullname.label "při porovnání e-mailu s existujícími identitami ignorovat celé jméno">
     37<!ENTITY vident.prefs.smartReply.defaultFullname.label "pokud k şádné nalezené e-mailové adrese není uvedeno jméno, pouşít následující:">
    3638<!ENTITY vident.prefs.smartReplyTab.Tab3.desc "Vyfiltrované adresy jsou nakonec přidány do rozbalovacího seznamu identit. Můşete si také zvolit, jak by měly bÃœt pouÅŸity jako nové identity odesilatelů.">
    3739<!ENTITY vident.prefs.smartReply.ask.label "otevřít dialog pro vÃœběr identity">
     
    4446<!ENTITY vident.prefs.notifyTime.prefix.label "doba zobrazení zpráv o stavu (0 = nekonečno)">
    4547<!ENTITY vident.prefs.notifyTime.postfix.label "vteřin">
     48<!ENTITY vident.prefs.notificationTab.Debug.caption "Ladění">
     49<!ENTITY vident.prefs.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.">
     50<!ENTITY vident.prefs.notifyDebug.label "zobrazit pole s ladícími informacemi">
    4651<!ENTITY vident.accPane.prettyName.prefix "virtual Id">
    4752<!ENTITY vident.replySelector.dialogheader.title "Virtual Identity Smart Reply">
  • chrome/locale/de-DE/v_identity/v_identity.dtd

    r9e9bab r2694fe  
    1212<!ENTITY vident.prefs.smartReplyNewsgroups.label "verwende Smart Reply auch bei Antworten an Newsgruppen">
    1313<!ENTITY vident.prefs.SMTP.label "zeige SMTP Auswahlmenu">
     14<!ENTITY vident.prefs.menuEntry.label "fÃŒge Einstellungs-Dialog zu Menu Extras hinzu">
    1415<!ENTITY vident.prefs.vIdentityTab.header "Eigenschaften der Virtuellen IdentitÀt">
    1516<!ENTITY vident.prefs.vIdentityTab.valueTab.label "zu kopierende Einstellungen">
     
    2829<!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. Adressen ÃŒbernehmen">
    2930<!ENTITY vident.prefs.smartReplyTab.caption "Virtual Identity Smart Reply">
    30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "In einem ersten Schritt muss &apos;Smart Reply&apos; eine Liste der möglichen Sendeadressen ihrer Antwort erstellen. DafÃŒr werden die EmpfÀngerfelder &apos;To&apos; und &apos;Cc&apos; der email ausgewertet. Wenn weitere Kopfzeilen der Mail ausgewertet werden sollen, kann dies hier angegeben werden (dafÃŒr mÃŒssen möglicherweise andere Erweiterungen, bspw. enigmail oder mnenhy, installiert sein).">
    31 <!ENTITY vident.prefs.smartReply.headers.desc "zusÀtzliche Kopfzeilen  -  je eine pro Zeile, Angabe ohne &apos;:&apos;, bspw. &apos;x-original-to&apos;">
    32 <!ENTITY vident.prefs.smartReply.preferHeader.label "bevorzuge Adressen dieser Kopfzeilen vor &apos;To&apos; und &apos;Cc&apos;">
    33 <!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Im zweiten Schritt werden die möglichen Sendeadressen gefiltert. Alle Filter werden der Reihe nach angewandt, so werden die Adressen gleichzeitig sortiert. Die zuerst gefundene Adresse kann dann direkt als Sender ÃŒbernommen werden. Wird kein Filter angegeben, werden alle Adresen ÃŒbernommen.">
     31<!ENTITY vident.prefs.smartReplyTab.Tab1.desc "In einem ersten Schritt muss &apos;Smart Reply&apos; eine Liste der möglichen Sendeadressen ihrer Antwort erstellen. DafÃŒr werden ÃŒblicherweise die EmpfÀngerfelder &apos;To&apos; und &apos;Cc&apos; der Email ausgewertet. Hier können diese und weitere Kopfzeilen angegeben werden. (ergÀnzende Optionen: Auswahl der Kopfzeile Nummer n aus mehreren Kopfzeilen mit gleicher Bezeichnung durch &apos;:n&apos;. Email-Adressen ÃŒbernehmen, Namen ignorieren durch &apos;:@&apos;.)">
     32<!ENTITY vident.prefs.smartReply.headers.desc "zusÀtzliche Kopfzeilen  -  je eine pro Zeile bspw. &apos;x-original-to&apos; oder &apos;x-original-to:@&apos; oder &apos;x-original-to:2:@&apos;">
     33<!ENTITY vident.prefs.smartReply.headers.reset "setze Vorgabe-Werte">
     34<!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Im zweiten Schritt werden die möglichen Sendeadressen gefiltert. Alle Filter werden der Reihe nach angewandt, so werden die Adressen gleichzeitig sortiert. Die zuerst gefundene Adresse kann dann direkt als Sender ÃŒbernommen werden. Wird kein Filter angegeben, werden alle Adressen ÃŒbernommen.">
    3435<!ENTITY vident.prefs.smartReply.filter.desc "Smart Reply Filter  -  eine Zeile je Filter, regulÀre AusdrÃŒcke sind möglich, bspw. filtert &apos;/@mozilla.org$/&apos; nach allen Emailadressen der domain mozilla.org">
    3536<!ENTITY vident.prefs.smartReply.ignoreFullname.label "ignoriere Namensangaben beim Vergleich der Email-Adressen mit vorhandenen IdentitÀten">
     37<!ENTITY vident.prefs.smartReply.defaultFullname.label "falls kein Name zu einer Email-Adresse gefunden wurde, benutze folgenden Namen:">
    3638<!ENTITY vident.prefs.smartReplyTab.Tab3.desc "Die gefilterten Adressen werden abschliessend dem Sender-Auswahlmenu hinzugefÌgt. Hier kann entschieden werden, ob und wie die gefundenen IdentitÀten als Sender Ìbernommen werden.">
    3739<!ENTITY vident.prefs.smartReply.ask.label "öffne ein Dialogfenster zur Auswahl der IdentitÀt">
     
    4446<!ENTITY vident.prefs.notifyTime.prefix.label "Zeit, bis Nachrichten ausgeblendet werden (0 fÃŒr immer an)">
    4547<!ENTITY vident.prefs.notifyTime.postfix.label "Sekunden">
     48<!ENTITY vident.prefs.notificationTab.Debug.caption "Fehlersuche">
     49<!ENTITY vident.prefs.notifyDebug.desc "Zur Fehlersuche und zum besseren VerstÀndnis der Funktionsweise von Virtual Identity, besonders auch der Filter von SmartReply, 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.">
     50<!ENTITY vident.prefs.notifyDebug.label "zeige Bereich mit Informationen zur Fehlersuche">
    4651<!ENTITY vident.accPane.prettyName.prefix "virtuelle Id">
    4752<!ENTITY vident.replySelector.dialogheader.title "Virtual Identity Smart Reply">
  • chrome/locale/en-US/v_identity/v_identity.dtd

    r9e9bab r2694fe  
    1212<!ENTITY vident.prefs.smartReplyNewsgroups.label "use Smart Reply also if answering to a newsgroup">
    1313<!ENTITY vident.prefs.SMTP.label "show SMTP Menu">
     14<!ENTITY vident.prefs.menuEntry.label "add entry for Settings-Dialog to Tools menu">
    1415<!ENTITY vident.prefs.vIdentityTab.header "Properties of Virtual Identities">
    1516<!ENTITY vident.prefs.vIdentityTab.valueTab.label "attributes to copy">
     
    2829<!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. use addresses">
    2930<!ENTITY vident.prefs.smartReplyTab.caption "Virtual Identity Smart Reply">
    30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "To find a Reply-Identity, Smart Reply has to get a list of possible sender identities. Therefore the header-fields &apos;To&apos; and &apos;Cc&apos; are analyzed. If Smart Reply should analyze additional header-fields, you can enter them here (maybe you need to install another extension to recognize them, as for instance enigmail or mnenhy).">
    31 <!ENTITY vident.prefs.smartReply.headers.desc "additional headers  -  one per line, without &apos;:&apos;, for instance &apos;x-original-to&apos;">
    32 <!ENTITY vident.prefs.smartReply.preferHeader.label "prefer addresses of those headers against &apos;To&apos; und &apos;Cc&apos;">
     31<!ENTITY vident.prefs.smartReplyTab.Tab1.desc "To find a Reply-Identity, Smart Reply has to get a list of possible sender identities. Therefore usually the header-fields &apos;To&apos; and &apos;Cc&apos; are analyzed. Here you can enter those and/or other header-fields. (additional options: to select header number n out of any headers with the same name add &apos;:n&apos;. If you add &apos;:@&apos; to any entry, only email-addresses are used, names are ignored.)">
     32<!ENTITY vident.prefs.smartReply.headers.desc "additional headers  -  one per line, for instance &apos;x-original-to&apos; or &apos;x-original-to:@&apos; or &apos;x-original-to:2:@&apos;">
     33<!ENTITY vident.prefs.smartReply.headers.reset "set default values">
    3334<!ENTITY vident.prefs.smartReplyTab.Tab2.desc "After getting the addresses they have to be filtered. All filters are used after each other, so you can use them to sort the result too. At the end the first-found address might get used instantly as a senders identity. If you don&apos;t use a filter, all addresses are transferred.">
    3435<!ENTITY vident.prefs.smartReply.filter.desc "Smart Reply filter  -  one filter per line, usage of regular Expressions possible (for instance &apos;/@mozilla.org$/&apos; is matching every email from domain mozilla.org">
    3536<!ENTITY vident.prefs.smartReply.ignoreFullname.label "ignore full name while comparing email addresses with existing identities">
     37<!ENTITY vident.prefs.smartReply.defaultFullname.label "if there is no name to any found email-address, use the following one:">
    3638<!ENTITY vident.prefs.smartReplyTab.Tab3.desc "At the end the filtered addresses are added to the message-identity dropdown menu. You can also select, how they are might be used as the new senders identity.">
    3739<!ENTITY vident.prefs.smartReply.ask.label "open a dialog to choose Identity">
     
    4446<!ENTITY vident.prefs.notifyTime.prefix.label "time to show status messages (0 = infinite)">
    4547<!ENTITY vident.prefs.notifyTime.postfix.label "seconds">
     48<!ENTITY vident.prefs.notificationTab.Debug.caption "Debugging">
     49<!ENTITY vident.prefs.notifyDebug.desc "To find bugs, solve configuration problems and understand what Virtual Identity is doing, especially with the SmartReply-filters, you can enable some additional informations. Using this option slows down your mail-client, therefore it shouldn't be activated permanently.">
     50<!ENTITY vident.prefs.notifyDebug.label "show area with debug-informations">
    4651<!ENTITY vident.accPane.prettyName.prefix "virtual Id">
    4752<!ENTITY vident.replySelector.dialogheader.title "Virtual Identity Smart Reply">
  • chrome/locale/es-ES/v_identity/v_identity.dtd

    r9e9bab r2694fe  
    1212<!ENTITY vident.prefs.smartReplyNewsgroups.label "usar la respuesta rápida también para responder a los grupos de noticias">
    1313<!ENTITY vident.prefs.SMTP.label "mostrar menú SMTP">
     14<!ENTITY vident.prefs.menuEntry.label "añadir entrada para el cuadro de opciones al menú Herramientas">
    1415<!ENTITY vident.prefs.vIdentityTab.header "Propiedades de las identidades virtuales">
    1516<!ENTITY vident.prefs.vIdentityTab.valueTab.label "atributos a copiar">
     
    2829<!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. usar direcciones">
    2930<!ENTITY vident.prefs.smartReplyTab.caption "Virtual Identity - Respuesta rápida">
    30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "Para encontrar la identidad con la que responder, la respuesta rápida tiene que obtener la lista de los posibles remitentes. Para ello, las cabeceras &apos;Para&apos; y &apos;Cc&apos; son analizadas. Si Smart Reply tiene que analizar cabeceras adicionales, puede incluirlas aquí (es posible que tenga que instalar alguna otra extensión para poder reconocerlas, como por ejemplo enigmail o mnenhy).">
    31 <!ENTITY vident.prefs.smartReply.headers.desc "cabeceras adicionales - una por línea, sin &apos;:&apos;, or ejemplo &apos;x-original-to&apos;">
    32 <!ENTITY vident.prefs.smartReply.preferHeader.label "usar las direcciones de estas cabeceras en lugar de &apos;Para&apos; o &apos;Cc&apos;">
     31<!ENTITY vident.prefs.smartReplyTab.Tab1.desc "Para encontrar la identidad con la que responder, la respuesta rápida tiene que obtener la lista de los posibles remitentes. Para ello, las cabeceras &apos;Para&apos; y &apos;Cc&apos; son analizadas. Si Smart Reply tiene que analizar cabeceras adicionales, puede incluirlas aquí (Opciones adicionales: para seleccionar la cabecera número n de varias con el mismo nombre añada &apos;:,&apos;. Si añade &apos;:@&apos; en alguna entrada, sólo se usarán las direcciones de correo, los nombres serán ignorados.)">
     32<!ENTITY vident.prefs.smartReply.headers.desc "cabeceras adicionales - una por por ejemplo &apos;x-original-to&apos; o &apos;x-original-to:@&apos; o &apos;x-original-to:2:@&apos;">
     33<!ENTITY vident.prefs.smartReply.headers.reset "establecer los valores por defecto">
    3334<!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Una vez obtenidas las direcciones, éstas son filtradas. Todos los filtros se usan después de los anteriores, por lo que puede usarlos también para ordenar los resultados. Al terminar, la primera dirección encontrada se usará como la identidad del remitente. Si no usa filtros, todas las direcciones serán transferidas.">
    3435<!ENTITY vident.prefs.smartReply.filter.desc "Filtros de respuesta rápida - un filtro por línea, con posibilidad de usar expresiones regulares (por ejemplo, &apos;/@mozilla.org$/&apos; coincide con cualquier correo del dominio mozilla.org">
    3536<!ENTITY vident.prefs.smartReply.ignoreFullname.label "ignorar los nombres completos al comparar las direcciones de correo con las identidades existentes">
     37<!ENTITY vident.prefs.smartReply.defaultFullname.label "si no hay nombres en las direcciones encontradas, usar el siguiente:">
    3638<!ENTITY vident.prefs.smartReplyTab.Tab3.desc "Una vez terminado, las direcciones filtradas se añadirán al menú desplegable de identidades. Puede también seleccionar cómo se usarán como las nuevas identidades del remitente.">
    3739<!ENTITY vident.prefs.smartReply.ask.label "abrir una ventana para preguntar la identidad">
     
    4446<!ENTITY vident.prefs.notifyTime.prefix.label "tiempo para mostrar el estado de los mensajes (0 = infinito)">
    4547<!ENTITY vident.prefs.notifyTime.postfix.label "segundos">
     48<!ENTITY vident.prefs.notificationTab.Debug.caption "Depuración">
     49<!ENTITY vident.prefs.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.">
     50<!ENTITY vident.prefs.notifyDebug.label "mostrar el área con la información de depuración">
    4651<!ENTITY vident.accPane.prettyName.prefix "Identidad virtual">
    4752<!ENTITY vident.replySelector.dialogheader.title "Virtual Identity - Respuesta rápida">
  • chrome/locale/fr-FR/v_identity/v_identity.dtd

    r9e9bab r2694fe  
    1212<!ENTITY vident.prefs.smartReplyNewsgroups.label "utiliser également une réponse intelligente lors d&apos;une réponse à un forum">
    1313<!ENTITY vident.prefs.SMTP.label "montrer le menu SMTP">
     14<!ENTITY vident.prefs.menuEntry.label "add entry for Settings-Dialog to Tools menu">
    1415<!ENTITY vident.prefs.vIdentityTab.header "Propriétés des identités virtuelles">
    1516<!ENTITY vident.prefs.vIdentityTab.valueTab.label "Attributs à copier">
     
    2829<!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. Utiliser les adresses">
    2930<!ENTITY vident.prefs.smartReplyTab.caption "Réponse intelligente de Virtual Identity">
    30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "Pour trouver une identité de réponse, la réponse intelligente doit obtenir une liste des identités d&apos;expéditeur possibles. C&apos;est pourquoi les champs d&apos;en-têtes &apos;À&apos; et &apos;Cc&apos; sont analysés. Si vous voulez que la réponse intelligente analyse d&apos;autres champs d&apos;en-têtes, vous pouvez les entrer ici (il vous faut peut-être une autre extension pour les reconnaître, par exemple enigmail ou mnenhy).">
    31 <!ENTITY vident.prefs.smartReply.headers.desc "en-têtes supplémentaires - un par ligne sans &apos;:&apos;, par exemple &apos;x-original-to&apos;">
    32 <!ENTITY vident.prefs.smartReply.preferHeader.label "préférer les adresses des ces en-têtes à celles de &apos;À&apos; et &apos;Cc&apos;">
     31<!ENTITY vident.prefs.smartReplyTab.Tab1.desc "To find a Reply-Identity, Smart Reply has to get a list of possible sender identities. Therefore usually the header-fields &apos;To&apos; and &apos;Cc&apos; are analyzed. Here you can enter those and/or other header-fields. (additional options: to select header number n out of any headers with the same name add &apos;:n&apos;. If you add &apos;:@&apos; to any entry, only email-addresses are used, names are ignored.)">
     32<!ENTITY vident.prefs.smartReply.headers.desc "en-têtes supplémentaires - un par ligne, par exemple &apos;x-original-to&apos; ou &apos;x-original-to:@&apos; ou &apos;x-original-to:2:@&apos;">
     33<!ENTITY vident.prefs.smartReply.headers.reset "Restaurer les valeurs par défaut">
    3334<!ENTITY vident.prefs.smartReplyTab.Tab2.desc "AprÚs avoir obtenu les adresses il faut les filtrer. Les filtres sont utilisés l&apos;un aprÚs l&apos;autre, donc vous pouvez aussi les utiliser pour classer les résultats. A la fin, la premiÚre adresse trouvée peut être utilisée instantanément comme identité d&apos;expéditeur. Si vous n&apos;utilisez aucun filtre, toutes les adresses sont transférées.">
    34 <!ENTITY vident.prefs.smartReply.filter.desc "filtre de la réponse intelligente - un filtre par ligne, vous pouvez utiliser des expressions réguliÚres (par exemple &apos;/@mozilla.org$/&apos; correspond à toutes les adresses du domaine mozilla.org)">
     35<!ENTITY vident.prefs.smartReply.filter.desc "Filtre(s) de la réponse intelligente - un filtre par ligne, vous pouvez utiliser des expressions réguliÚres (par exemple &apos;/@mozilla.org$/&apos; correspond à toutes les adresses du domaine mozilla.org)">
    3536<!ENTITY vident.prefs.smartReply.ignoreFullname.label "ignorer le nom complet lors de la comparaison des adresses E-mails avec les identités existantes">
     37<!ENTITY vident.prefs.smartReply.defaultFullname.label "Si aucune adresse E-mail trouvée ne contient un nom, utiliser le nom suivant :">
    3638<!ENTITY vident.prefs.smartReplyTab.Tab3.desc "À la fin, les adresses filtrées sont ajoutées au menu déroulant d&apos;identité du message. Vous pouvez également choisir la maniÚre dont elles sont utilisées comme que nouvelle identité d&apos;expéditeur.">
    3739<!ENTITY vident.prefs.smartReply.ask.label "ouvrir une boîte de dialogue pour choisir l&apos;identité">
     
    4446<!ENTITY vident.prefs.notifyTime.prefix.label "durée d&apos;affichage des messages d&apos;état (0 = infini)">
    4547<!ENTITY vident.prefs.notifyTime.postfix.label "secondes">
     48<!ENTITY vident.prefs.notificationTab.Debug.caption "Débogage">
     49<!ENTITY vident.prefs.notifyDebug.desc "Pour détecter les bugs, 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&apos;informations complémentaires. Cette option ralentit votre client E-mail, par conséquent vous ne devriez pas l&apos;activer en l&apos;absence de nécessité.">
     50<!ENTITY vident.prefs.notifyDebug.label "afficher les informations de débogage">
    4651<!ENTITY vident.accPane.prettyName.prefix "Id virtuelle">
    4752<!ENTITY vident.replySelector.dialogheader.title "Réponse intelligente de Virtual Identity">
  • chrome/locale/it-IT/v_identity/v_identity.dtd

    r9e9bab r2694fe  
    1212<!ENTITY vident.prefs.smartReplyNewsgroups.label "Utilizza Smart Reply anche per le risposte ai newsgroup">
    1313<!ENTITY vident.prefs.SMTP.label "Visualizza il menu SMTP">
     14<!ENTITY vident.prefs.menuEntry.label "add entry for Settings-Dialog to Tools menu">
    1415<!ENTITY vident.prefs.vIdentityTab.header "Proprietà delle identità virtuali">
    1516<!ENTITY vident.prefs.vIdentityTab.valueTab.label "Attributi da copiare">
     
    2829<!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. utilizza indirizzi">
    2930<!ENTITY vident.prefs.smartReplyTab.caption "Smart Reply di Virtual Identity">
    30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "Per trovare un&apos;identità da usare per le risposte, Smart Reply dovrà costruire una lista delle possibili identità da utilizzare per l&apos;invio. Perciò, verranno analizzate le intestazioni &apos;A&apos; e &apos;Cc&apos;. Se si vuole che Smart Reply analizzi altre intestazioni, si possono inserire in questo campo (probabilmente Ú necessario installare un&apos;altra estensione in grado di riconoscerle, come ad esempio EnigMail o MNENHY).">
    31 <!ENTITY vident.prefs.smartReply.headers.desc "intestazioni aggiuntive - da inserire in righe separate senza il segno &apos;:&apos;; ad esempio &apos;x-original-to&apos;">
    32 <!ENTITY vident.prefs.smartReply.preferHeader.label "considera gli indirizzi di queste intestazioni prioritari rispetto ad &apos;A&apos; e &apos;Cc&apos;">
     31<!ENTITY vident.prefs.smartReplyTab.Tab1.desc "To find a Reply-Identity, Smart Reply has to get a list of possible sender identities. Therefore usually the header-fields &apos;To&apos; and &apos;Cc&apos; are analyzed. Here you can enter those and/or other header-fields. (additional options: to select header number n out of any headers with the same name add &apos;:n&apos;. If you add &apos;:@&apos; to any entry, only email-addresses are used, names are ignored.)">
     32<!ENTITY vident.prefs.smartReply.headers.desc "additional headers  -  one per line, for instance &apos;x-original-to&apos; or &apos;x-original-to:@&apos; or &apos;x-original-to:2:@&apos;">
     33<!ENTITY vident.prefs.smartReply.headers.reset "Imposta valori predefiniti">
    3334<!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Dopo aver raccolto gli indirizzi, Ú necessario filtrarli. Tutti i filtri vengono usati in sequenza, in questo modo Ú possibile filtrare anche i risultati. Alla fine della procedura il primo indirizzo trovato può essere immediatamente utilizzato come identità per la spedizione. Se si decide di non utilizzare i filtri, vengono trasferiti tutti gli indirizzi.">
    3435<!ENTITY vident.prefs.smartReply.filter.desc "Filtro per Smart Reply - da inserire in righe separate. È possibile utilizzare espressioni regolari (ad esempio &apos;/@mozilla.org$/&apos; da far corrispondere ad ogni e-mail inviata dal dominio mozilla.org">
    35 <!ENTITY vident.prefs.smartReply.ignoreFullname.label "ignora i nomi completi durante il confronto tra indirizzi e-mail e identità esistenti">
     36<!ENTITY vident.prefs.smartReply.ignoreFullname.label "Ignora i nomi completi durante il confronto tra indirizzi e-mail e identità esistenti">
     37<!ENTITY vident.prefs.smartReply.defaultFullname.label "Se non Ú presente alcun nome negli indirizzi email individuati, utilizza il seguente:">
    3638<!ENTITY vident.prefs.smartReplyTab.Tab3.desc "Alla fine dell&apos;operazione, gli indirizzi filtrati verranno aggiunti al menu di scelta dell&apos;identità da utilizzare per il messaggio. È possibile scegliere uno di essi come nuova identità per l&apos;invio.">
    37 <!ENTITY vident.prefs.smartReply.ask.label "visualizza una finestra di dialogo per la scelta dell&apos;identità">
    38 <!ENTITY vident.prefs.smartReply.ask_always.label "chiedi anche se esiste un solo indirizzo possibile">
    39 <!ENTITY vident.prefs.smartReply.autocreate.label "utilizza la prima identità individuata senza interazione con l&apos;utente">
     39<!ENTITY vident.prefs.smartReply.ask.label "Visualizza una finestra di dialogo per la scelta dell&apos;identità">
     40<!ENTITY vident.prefs.smartReply.ask_always.label "Chiedi anche se esiste un solo indirizzo possibile">
     41<!ENTITY vident.prefs.smartReply.autocreate.label "Utilizza la prima identità individuata senza interazione con l&apos;utente">
    4042<!ENTITY vident.prefs.notificationTab.header "Messaggi di stato">
    4143<!ENTITY vident.prefs.notificationTab.caption "Notifiche">
    4244<!ENTITY vident.prefs.notifyHeaders.label "Mostra informazioni sulle intestazioni riconosciute">
    4345<!ENTITY vident.prefs.notifySmartIdentity.label "Attiva i messaggi di stato per Smart Reply / Smart Draft">
    44 <!ENTITY vident.prefs.notifyTime.prefix.label "durata della visualizzazione per i messaggi di stato (0 = infinita)">
     46<!ENTITY vident.prefs.notifyTime.prefix.label "Durata della visualizzazione per i messaggi di stato (0 = infinita)">
    4547<!ENTITY vident.prefs.notifyTime.postfix.label "secondi">
     48<!ENTITY vident.prefs.notificationTab.Debug.caption "Risoluzione dei problemi">
     49<!ENTITY vident.prefs.notifyDebug.desc "Al fine di identificare i bug, risolvere problemi di configurazione e comprendere le operazioni compiute da Virtual Identity, Ú possibile ottenere alcune informazioni aggiuntive. L&apos;utilizzo di questa opzione causerà rallentamenti al client di posta, e per questo motivo si consiglia di attivarla soltanto per brevi periodi.">
     50<!ENTITY vident.prefs.notifyDebug.label "Visualizza area con le informazioni relative al debug">
    4651<!ENTITY vident.accPane.prettyName.prefix "Id virtuale">
    4752<!ENTITY vident.replySelector.dialogheader.title "Smart Reply di Virtual Identity">
  • chrome/locale/nl-NL/v_identity/v_identity.dtd

    r9e9bab r2694fe  
    1212<!ENTITY vident.prefs.smartReplyNewsgroups.label "Slim Antwoorden ook gebruiken als aan een nieuwsgroep wordt geantwoord">
    1313<!ENTITY vident.prefs.SMTP.label "SMTP menu weergeven">
     14<!ENTITY vident.prefs.menuEntry.label "Onderdeel voor Instellingen-dialoogvenster aan Extra menu toevoegen">
    1415<!ENTITY vident.prefs.vIdentityTab.header "Eigenschappen van virtuele identiteiten">
    1516<!ENTITY vident.prefs.vIdentityTab.valueTab.label "Te kopiëren eigenschappen">
     
    2829<!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. adressen gebruiken">
    2930<!ENTITY vident.prefs.smartReplyTab.caption "Virtual Identity Slim Antwoorden">
    30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "Om een Antwoord-identiteit te vinden moet Slim Antwoorden een lijst van mogelijke verzender-identiteiten ophalen. Daarom worden de koptekstvelden &apos;Aan&apos; en &apos;Cc&apos; geanalyseerd. Als Slim Antwoorden nog meer koptekstvelden moet analyseren kunt u ze hier ingeven (wellicht dient u een andere extensie te installeren om ze te herkennen, zoals bijvoorbeeld enigmail or mnenhy).">
    31 <!ENTITY vident.prefs.smartReply.headers.desc "Aanvullende kopteksten - één per regel, zonder &apos;:&apos;, bijvoorbeeld &apos;x-original-to&apos;">
    32 <!ENTITY vident.prefs.smartReply.preferHeader.label "Adressen van deze kopteksten prevaleren boven &apos;Aan&apos; en &apos;Cc&apos;">
     31<!ENTITY vident.prefs.smartReplyTab.Tab1.desc "To find a Reply-Identity, Smart Reply has to get a list of possible sender identities. Therefore usually the header-fields &apos;To&apos; and &apos;Cc&apos; are analyzed. Here you can enter those and/or other header-fields. (additional options: to select header number n out of any headers with the same name add &apos;:n&apos;. If you add &apos;:@&apos; to any entry, only email-addresses are used, names are ignored.)">
     32<!ENTITY vident.prefs.smartReply.headers.desc "Aanvullende kopteksten - één per regel, bijvoorbeeld &apos;x-original-to&apos; of &apos;x-original-to:@&apos; of &apos;x-original-to:2:@&apos;">
     33<!ENTITY vident.prefs.smartReply.headers.reset "Standaardwaarden instellen">
    3334<!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Na het ophalen van de adressen dienen ze te worden gefilterd. Alle filters worden na elkaar toegepast, dus u kunt ze ook gebruiken om het resultaat te sorteren. Op het einde kan het eerst aangetroffen adres worden gebruikt als de identiteit van de afzender. Als u geen filter gebruikt worden alle adressen overgebracht.">
    3435<!ENTITY vident.prefs.smartReply.filter.desc "Slim Antwoorden filter - één filter per regel, gebruik van reguliere expressies is mogelijk (bijvoorbeeld: &apos;/@mozilla.org$/&apos; komt overeen met elk bericht van domein mozilla.org)">
    3536<!ENTITY vident.prefs.smartReply.ignoreFullname.label "Volledige naam bij vergelijken van e-mail adressen met bestaande identiteiten negeren">
     37<!ENTITY vident.prefs.smartReply.defaultFullname.label "Als er geen naam bij een gevonden e-mail adres staat de volgende gebruiken:">
    3638<!ENTITY vident.prefs.smartReplyTab.Tab3.desc "Op het einde worden de gefilterde adressen toegevoegd aan het bericht-identiteit dropdown menu. U kunt ook selecteren hoe ze worden gebruikt als de nieuwe afzender-identiteit.">
    3739<!ENTITY vident.prefs.smartReply.ask.label "Dialoogvenster openen om identiteit te kiezen">
     
    4446<!ENTITY vident.prefs.notifyTime.prefix.label "Weergaveduur statusberichten (0=oneindig)">
    4547<!ENTITY vident.prefs.notifyTime.postfix.label "seconden">
     48<!ENTITY vident.prefs.notificationTab.Debug.caption "Foutopsporing">
     49<!ENTITY vident.prefs.notifyDebug.desc "Om fouten te vinden, configuratieproblemen op te lossen en te begrijpen wat Virtual Identity doet, in het bijzonder met de SlimAntwoorden-filters, kunt u wat aanvullende informatie activeren. Het gebruik van deze optie vertraagt uw mailprogramma en dient derhalve niet permanent ingeschakeld te zijn.">
     50<!ENTITY vident.prefs.notifyDebug.label "Veld met foutopsporings-informatie weergeven">
    4651<!ENTITY vident.accPane.prettyName.prefix "virtuele ID">
    4752<!ENTITY vident.replySelector.dialogheader.title "Virtual Identity Slim Antwoorden">
  • chrome/skin/classic/v_identity/v_identity.css

    r9e9bab r2694fe  
    1515    margin: 0;
    1616    padding: 0;
     17}
     18
     19#vIDebugBox {
     20    overflow: auto;
     21    font-size: x-small;
     22    height: 10em;
    1723}
    1824
  • defaults/preferences/preferences.js

    r9e9bab r2694fe  
    88pref("extensions.virtualIdentity.smart_draft", true);
    99pref("extensions.virtualIdentity.smart_reply", true);
     10pref("extensions.virtualIdentity.menu_entry", true);
    1011pref("extensions.virtualIdentity.smart_reply_ask", false);
    1112pref("extensions.virtualIdentity.smart_reply_ask_always", false);
    12 pref("extensions.virtualIdentity.smart_reply_headers", "x-original-to");
     13pref("extensions.virtualIdentity.smart_reply_headers", "x-original-to\nto\ncc");
    1314pref("extensions.virtualIdentity.smart_reply_filter", "");
    14 pref("extensions.virtualIdentity.smart_reply_prefer_headers", true);
    1515pref("extensions.virtualIdentity.smart_reply_notification", true);
     16pref("extensions.virtualIdentity.smart_reply_defaultFullName", "");
    1617pref("extensions.virtualIdentity.smart_reply_ignoreFullName", false);
    1718pref("extensions.virtualIdentity.smart_reply_autocreate", true);
     
    2122pref("extensions.virtualIdentity.notification_timeout", 5);
    2223
     24
    2325pref("extensions.{dddd428e-5ac8-4a81-9f78-276c734f75b8}.description", "chrome://v_identity/locale/v_identity.properties");
  • install.js

    r9e9bab r2694fe  
    77// Editable Items Begin
    88var displayName         = "Virtual Identity"; // The name displayed to the user (don't include the version)
    9 var version             = "0.4.0";
     9var version             = "0.4.1";
    1010var name                = "v_identity"; // The leafname of the JAR file (without the .jar part)
    1111
  • install.rdf

    r9e9bab r2694fe  
    1111        <!-- Thunderbird -->
    1212        <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
    13         <em:minVersion>0.7</em:minVersion>
    14         <em:maxVersion>3.0</em:maxVersion>
    15       </Description>
    16       <Description>
    17         <!-- Mozilla Suite -->
    18         <em:id>{86c18b42-e466-45a9-ae7a-9b95ba6f5640}</em:id>
    19         <em:minVersion>1.7</em:minVersion>
    20         <em:maxVersion>1.8</em:maxVersion>
     13        <em:minVersion>1.5</em:minVersion>
     14        <em:maxVersion>3.0a1</em:maxVersion>
    2115      </Description>
    2216      <Description>
    2317         <!-- Seamonkey -->
    2418        <em:id>{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}</em:id>
    25         <em:minVersion>1.0</em:minVersion>
    26         <em:maxVersion>1.5</em:maxVersion>
     19        <em:minVersion>1.1.1</em:minVersion>
     20        <em:maxVersion>1.5a</em:maxVersion>
    2721      </Description>
    2822    </em:targetApplication>
     
    3327    <em:id>{dddd428e-5ac8-4a81-9f78-276c734f75b8}</em:id>
    3428    <em:name>Virtual Identity</em:name>
    35     <em:version>0.4.0</em:version>
     29    <em:version>0.4.1</em:version>
    3630    <em:description>Allows you to modify your Identity settings for a single Mail on the fly.</em:description>
    3731    <em:creator>Rene Ejury</em:creator>
     32    <em:contributor>Translations: www.babelzilla.org</em:contributor>
    3833    <em:contributor>markh</em:contributor>      <!-- dutch localization -->
    3934    <em:contributor>patheticcockroach</em:contributor>      <!-- french localization -->
Note: See TracChangeset for help on using the changeset viewer.