This is just some static backup of the original site, don't expect every link to work!

source: content/vI_getHeader.js @ 3c9c29

ng_0.9
Last change on this file since 3c9c29 was 58d38a, checked in by rene <rene@…>, 11 years ago

fixed smart-reply, broken by changed behavior of isNaN

  • Property mode set to 100644
File size: 6.8 KB
Line 
1/* ***** BEGIN LICENSE BLOCK *****
2    This program is free software; you can redistribute it and/or modify
3    it under the terms of the GNU General Public License as published by
4    the Free Software Foundation; either version 2 of the License, or
5    (at your option) any later version.
6
7    This program is distributed in the hope that it will be useful,
8    but WITHOUT ANY WARRANTY; without even the implied warranty of
9    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10    GNU General Public License for more details.
11
12    You should have received a copy of the GNU General Public License
13    along with this program; if not, write to the Free Software
14    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
15
16    The Original Code is the Virtual Identity Extension.
17
18    The Initial Developer of the Original Code is Rene Ejury.
19    Portions created by the Initial Developer are Copyright (C) 2007
20    the Initial Developer. All Rights Reserved.
21
22    Contributor(s): Christian Weiske
23    Contributor(s): Patrick Brunschwig
24    Contributor(s): http://xulsolutions.blogspot.com/2006/07/creating-uninstall-script-for.html
25
26 * ***** END LICENSE BLOCK ***** */
27
28Components.utils.import("resource://v_identity/vI_nameSpaceWrapper.js");
29virtualIdentityExtension.ns(function() { with (virtualIdentityExtension.LIB) {
30
31Components.utils.import("resource://v_identity/stdlib/msgHdrUtils.js", virtualIdentityExtension);
32Components.utils.import("resource://v_identity/vI_prefs.js", virtualIdentityExtension);
33let Log = vI.setupLogging("virtualIdentity.getHeader");
34
35// var storedHeaders = { };
36var getHeader = {
37    unicodeConverter : Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
38            .createInstance(Components.interfaces.nsIScriptableUnicodeConverter),
39
40    headerToSearch : null,
41   
42    prefObserverToSearchArray : function() {
43        var headerList = getHeader.unicodeConverter.ConvertToUnicode(vI.vIprefs.get("smart_reply_headers")).split(/\n/)
44       
45        getHeader.headerToSearch = [];
46       
47        // prepare headerToSearch for speedup.
48        for (var index = 0; index < headerList.length; index++) {
49            var headerToSearch_splitted = headerList[index].split(/:/)
50            // use first part (all before ':') as the header name
51            var headerNameToSearch = headerToSearch_splitted[0].toLowerCase()
52            // check second or third part for any number
53            var headerNumberToSearch = null;
54            if (headerToSearch_splitted.length > 1) parseInt(headerToSearch_splitted[1]);
55            if ((!headerNumberToSearch || isNaN(headerNumberToSearch)) && headerToSearch_splitted.length > 2) headerNumberToSearch = parseInt(headerToSearch_splitted[2]);
56           
57            // create header name to store the value
58            var headerNameToStore = headerNameToSearch;
59            if (headerNumberToSearch && !isNaN(headerNumberToSearch)) headerNameToStore += ":" + headerNumberToSearch
60           
61            getHeader.headerToSearch.push({ headerNameToSearch : headerNameToSearch, headerNumberToSearch : headerNumberToSearch,
62                    headerNameToStore : headerNameToStore });
63        }
64    },
65
66    getHeader: function() {
67      vI.clearDebugOutput();
68      if (!getHeader.headerToSearch) getHeader.prefObserverToSearchArray()
69     
70      vI.msgHdrGetHeaders(getHeader.hdr, function (aHeaders) {
71        let label = "";
72        if (aHeaders.has("list-id")) {
73          getHeader.hdr.setStringProperty("vI_list-id","found");
74          Log.debug("found header: list-id  ...stored to recognize mailing-list");
75        }
76        if (aHeaders.has("received")) {
77          getHeader.hdr.setStringProperty("vI_received","found");
78          Log.debug("found header: received  ...stored to recognize received mail");
79        }
80        if (aHeaders.has("content-base")) {
81          getHeader.hdr.setStringProperty("vI_content_base","found");
82          Log.debug("found header: content-base  ...stored to recognize blog/news-feed");
83        }
84        for (let index = 0; index < getHeader.headerToSearch.length; index++) {
85          let {headerNameToSearch: headerNameToSearch, headerNumberToSearch: headerNumberToSearch,
86            headerNameToStore: headerNameToStore} = getHeader.headerToSearch[index];
87          if (aHeaders.has(headerNameToSearch)) {
88            let value = "";
89            let values = aHeaders.getAll(headerNameToSearch);
90            if (!headerNumberToSearch || isNaN(headerNumberToSearch))
91              for (let i = 0; i < values.length;)
92                value += ((value)?(", "):("")) + values[i++];
93            else value = values[headerNumberToSearch-1];
94            if (value) {
95              getHeader.hdr.setStringProperty("vI_" + headerNameToStore,
96                getHeader.unicodeConverter.ConvertFromUnicode(value) + getHeader.unicodeConverter.Finish());
97             
98              let storedValue = getHeader.hdr.getProperty("vI_" + headerNameToStore);
99              let storedConvValue = getHeader.unicodeConverter.ConvertToUnicode(storedValue);
100             
101              Log.debug("found header: " + headerNameToStore +
102                  " - stored as '" + storedConvValue + "'");
103              label += (label)?"\n":""
104              label += headerNameToStore + ":\t" + storedConvValue
105            }
106          }
107        }
108        vI.GetHeaderNotification.info(label);
109      });
110    },
111   
112    setupEventListener: function() {
113        getHeader.unicodeConverter.charset = "UTF-8";
114       
115        // read headers later if msg is loaded completely - this ensures compatibility to Thunderbird Conversation
116        getHeader.orig_OnMsgLoaded = OnMsgLoaded;
117        OnMsgLoaded = getHeader.OnMsgLoaded;
118
119    },
120   
121    OnMsgLoaded: function(url) {
122        const Cc = Components.classes;
123        const Ci = Components.interfaces;
124        // Necko URL, so convert it into a message header
125        let ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
126        var neckoURL = ioService.newURI(null, null, url.baseURI);
127        neckoURL.QueryInterface(Ci.nsIMsgMessageUrl);
128       
129        getHeader.hdr = neckoURL.messageHeader;
130        if (getHeader.hdr) getHeader.getHeader();
131        getHeader.orig_OnMsgLoaded(url);
132    }
133}
134
135
136var prefObserver = {
137    unicodeConverter : Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
138            .createInstance(Components.interfaces.nsIScriptableUnicodeConverter),
139           
140    observer_added : false,
141   
142    init : function() {
143      vI.vIprefs.addObserver("smart_reply_headers", this.observe, this);
144    },
145   
146    cleanup : function() {
147      let self = this;
148      vI.vIprefs.removeObserver("smart_reply_headers", self.observe);
149    },
150   
151    observe: function(self, subject, topic, data) {
152        if (topic == "nsPref:changed") {
153            // remove (old) prepared headerArray
154            getHeader.headerToSearch = null;
155            ReloadMessage();
156        }
157    },
158
159}
160addEventListener('messagepane-loaded', getHeader.setupEventListener, true);
161window.addEventListener("load", function(e) { prefObserver.init(); }, false);
162window.addEventListener("unload", function(e) { prefObserver.cleanup(); }, false);
163// vI.storedHeaders = storedHeaders;
164}});
Note: See TracBrowser for help on using the repository browser.