diff --git a/CHANGELOG.md b/CHANGELOG.md
index 783e45b..cff4d48 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Change Log
+## 3.6.8 - 2019-12-09
+
+### Added
+- Support for Thunderbird 68.*
+
+# Change Log
+
## 3.2 - 2019-04-03
### Added
diff --git a/_locales/de/messages.json b/_locales/de/messages.json
new file mode 100644
index 0000000..0c4b60a
--- /dev/null
+++ b/_locales/de/messages.json
@@ -0,0 +1,8 @@
+{
+ "appName": {
+ "message": "MailHops"
+ },
+ "appDesc": {
+ "message": "MailHops Karten die Route eine E-Mail gereist, um bei Ihnen melden. Verwendung GeoIP es zeigt auch zurückgelegte Strecke zusammen mit dem Standort ( Ort, Bundesland und Land) des Absenders."
+ }
+}
\ No newline at end of file
diff --git a/_locales/de/prefs.dtd b/_locales/de/prefs.dtd
new file mode 100644
index 0000000..246dc99
--- /dev/null
+++ b/_locales/de/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/_locales/de/strings.dtd b/_locales/de/strings.dtd
new file mode 100644
index 0000000..e808497
--- /dev/null
+++ b/_locales/de/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/_locales/en/messages.json b/_locales/en/messages.json
new file mode 100644
index 0000000..780d0cf
--- /dev/null
+++ b/_locales/en/messages.json
@@ -0,0 +1,8 @@
+{
+ "appName": {
+ "message": "MailHops"
+ },
+ "appDesc": {
+ "message": "MailHops maps the route an email traveled to get to you. Using GeoIP it also displays distance traveled along with the location (city, state and country) of the sender."
+ }
+}
\ No newline at end of file
diff --git a/_locales/en/prefs.dtd b/_locales/en/prefs.dtd
new file mode 100644
index 0000000..00e7e42
--- /dev/null
+++ b/_locales/en/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/_locales/en/strings.dtd b/_locales/en/strings.dtd
new file mode 100644
index 0000000..ffb003c
--- /dev/null
+++ b/_locales/en/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/_locales/es/messages.json b/_locales/es/messages.json
new file mode 100644
index 0000000..b162f8f
--- /dev/null
+++ b/_locales/es/messages.json
@@ -0,0 +1,8 @@
+{
+ "appName": {
+ "message": "MailHops"
+ },
+ "appDesc": {
+ "message": "Mapas MailHops la ruta un correo electrónico viajó a llegar a usted. Usando GeoIP también muestra la distancia recorrida junto con la ubicación ( ciudad, estado y país) del remitente."
+ }
+}
\ No newline at end of file
diff --git a/_locales/es/prefs.dtd b/_locales/es/prefs.dtd
new file mode 100644
index 0000000..7a8d1b9
--- /dev/null
+++ b/_locales/es/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/_locales/es/strings.dtd b/_locales/es/strings.dtd
new file mode 100644
index 0000000..d8d2c35
--- /dev/null
+++ b/_locales/es/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/_locales/fr/messages.json b/_locales/fr/messages.json
new file mode 100644
index 0000000..445d805
--- /dev/null
+++ b/_locales/fr/messages.json
@@ -0,0 +1,8 @@
+{
+ "appName": {
+ "message": "MailHops"
+ },
+ "appDesc": {
+ "message": "MailHops vous permet de connaître la route empruntée par un mail avant qu'il ne parvienne dans votre messagerie. Grâce à MailHops vous pourrez : connaître le lieu d'émission du mail (pays, ville); visualiser le parcours du mail sur une carte (avec un grand choix de styles de carte); ou encore connaître des informations plus techniques (le user-agent et l'authentification utilisés par l'expéditeur) et d'autres informations plus amusantes comme la distance totale parcourue par le mail ou la météo actuelle sur le lieu d'émission. La version gratuite (sans clef API) permet d'obtenir ces informations et bien d'autres pour 100 messages par tranche de 24h."
+ }
+}
\ No newline at end of file
diff --git a/_locales/fr/prefs.dtd b/_locales/fr/prefs.dtd
new file mode 100644
index 0000000..033b2b2
--- /dev/null
+++ b/_locales/fr/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/_locales/fr/strings.dtd b/_locales/fr/strings.dtd
new file mode 100644
index 0000000..516019d
--- /dev/null
+++ b/_locales/fr/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/_locales/ja/messages.json b/_locales/ja/messages.json
new file mode 100644
index 0000000..f9660f6
--- /dev/null
+++ b/_locales/ja/messages.json
@@ -0,0 +1,8 @@
+{
+ "appName": {
+ "message": "MailHops"
+ },
+ "appDesc": {
+ "message": "MailHops 電子メールがあなたに取得するために旅したルートをマップします。のGeoIPを使用しても距離が送信者の場所(都市、州や国)と一緒に旅に表示されます。"
+ }
+}
\ No newline at end of file
diff --git a/_locales/ja/prefs.dtd b/_locales/ja/prefs.dtd
new file mode 100644
index 0000000..d1feea4
--- /dev/null
+++ b/_locales/ja/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/_locales/ja/strings.dtd b/_locales/ja/strings.dtd
new file mode 100644
index 0000000..c130b6d
--- /dev/null
+++ b/_locales/ja/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/_locales/pl/messages.json b/_locales/pl/messages.json
new file mode 100644
index 0000000..2d64236
--- /dev/null
+++ b/_locales/pl/messages.json
@@ -0,0 +1,8 @@
+{
+ "appName": {
+ "message": "MailHops"
+ } ,
+ "appDesc": {
+ "message": "Wskazuje trasę, którą e-mail dotarł do adresata. Korzystając z GeoIP, pokazuje także przybliżony dystans do nadawcy oraz jego położenie (miasto, region i państwo)."
+ }
+}
\ No newline at end of file
diff --git a/_locales/pl/prefs.dtd b/_locales/pl/prefs.dtd
new file mode 100644
index 0000000..fbdbfac
--- /dev/null
+++ b/_locales/pl/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/_locales/pl/strings.dtd b/_locales/pl/strings.dtd
new file mode 100644
index 0000000..ee2295a
--- /dev/null
+++ b/_locales/pl/strings.dtd
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/_locales/pt-BR/messages.json b/_locales/pt-BR/messages.json
new file mode 100644
index 0000000..50be3f4
--- /dev/null
+++ b/_locales/pt-BR/messages.json
@@ -0,0 +1,8 @@
+{
+ "appName": {
+ "message": "MailHops"
+ },
+ "appDesc": {
+ "message": "MailHops mapeia a rota um e-mail viajou para chegar até você . Usando GeoIP ele também exibe a distância percorrida , juntamente com a localização (cidade , estado e país ) do remetente."
+ }
+}
\ No newline at end of file
diff --git a/_locales/pt-BR/prefs.dtd b/_locales/pt-BR/prefs.dtd
new file mode 100644
index 0000000..289f30e
--- /dev/null
+++ b/_locales/pt-BR/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/_locales/pt-BR/strings.dtd b/_locales/pt-BR/strings.dtd
new file mode 100644
index 0000000..57fa712
--- /dev/null
+++ b/_locales/pt-BR/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/_locales/ru/messages.json b/_locales/ru/messages.json
new file mode 100644
index 0000000..bb7c4fd
--- /dev/null
+++ b/_locales/ru/messages.json
@@ -0,0 +1,8 @@
+{
+ "appName": {
+ "message": "MailHops"
+ } ,
+ "appDesc": {
+ "message": "MailHops отображает маршрутэлектронной почты , пройденное , чтобы добраться до вас. Использование GeoIP также отображает расстояние вместе с места (город, штат и страна ) отправителя."
+ }
+}
\ No newline at end of file
diff --git a/_locales/ru/prefs.dtd b/_locales/ru/prefs.dtd
new file mode 100644
index 0000000..3d72d34
--- /dev/null
+++ b/_locales/ru/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/_locales/ru/strings.dtd b/_locales/ru/strings.dtd
new file mode 100644
index 0000000..d942635
--- /dev/null
+++ b/_locales/ru/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/_locales/zh-CN/messages.json b/_locales/zh-CN/messages.json
new file mode 100644
index 0000000..593606e
--- /dev/null
+++ b/_locales/zh-CN/messages.json
@@ -0,0 +1,8 @@
+{
+ "appName": {
+ "message": "MailHops"
+ } ,
+ "appDesc": {
+ "message": "MailHops 映射電子郵件前往得到你的路線。使用GeoIP的它也顯示行駛距離隨著發送者的位置(城市,州和國家"
+ }
+}
\ No newline at end of file
diff --git a/_locales/zh-CN/prefs.dtd b/_locales/zh-CN/prefs.dtd
new file mode 100644
index 0000000..263e744
--- /dev/null
+++ b/_locales/zh-CN/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/_locales/zh-CN/strings.dtd b/_locales/zh-CN/strings.dtd
new file mode 100644
index 0000000..4dd569b
--- /dev/null
+++ b/_locales/zh-CN/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/build.sh b/build.sh
index b4a9982..840695a 100755
--- a/build.sh
+++ b/build.sh
@@ -2,26 +2,6 @@
filename='mailhops'
-rm -f $filename.xpi
+rm -f $filename.zip
-find ./ -type f -name "._*" -exec rm {} \;
-
-mkdir build
-mkdir build/chrome
-
-cd chrome
-zip -r $filename.jar . -i *.js *.xul *.png *.gif *.rdf *.css *.dtd *.properties *.svg
-mv $filename.jar ../build/chrome/
-
-cd ..
-cp *.rdf build
-cp *.manifest build
-cd build
-zip -r $filename.xpi . -i *.rdf *.manifest *.jar
-mv $filename.xpi ../
-cd ..
-rm -rf build
-
-# git clone https://github.com/nmaier/xpisign.py.git
-# add this for cert signing
-# python xpisign.py -k cert.pem mailhops.xpi mailhops.signed.xpi
+zip -r $filename.zip ./ -x ./images/* -i *.js *.xul *.png *.gif *.css *.json *.dtd _locales/*/messages.json *.manifest
diff --git a/chrome.manifest b/chrome.manifest
index 285394a..918e31a 100644
--- a/chrome.manifest
+++ b/chrome.manifest
@@ -1,18 +1,16 @@
-content mailhops jar:chrome/mailhops.jar!/content/
-skin mailhops classic/1.0 jar:chrome/mailhops.jar!/skin/classic/
-locale mailhops de jar:chrome/mailhops.jar!/locale/de/
-locale mailhops en jar:chrome/mailhops.jar!/locale/en/
-locale mailhops es jar:chrome/mailhops.jar!/locale/es/
-locale mailhops fr jar:chrome/mailhops.jar!/locale/fr/
-locale mailhops ja jar:chrome/mailhops.jar!/locale/ja/
-locale mailhops pl jar:chrome/mailhops.jar!/locale/pl/
-locale mailhops pt-BR jar:chrome/mailhops.jar!/locale/pt-BR/
-locale mailhops ru jar:chrome/mailhops.jar!/locale/ru/
-locale mailhops zh-CN jar:chrome/mailhops.jar!/locale/zh-CN/
+content mailhops chrome/content/
-# Postbox 5
-overlay chrome://messenger/content/mailWindowOverlay.xul chrome://mailhops/content/msgNotificationBar.xul application=postbox@postbox-inc.com
+skin mailhops classic/1.0 chrome/skin/classic/
-# Thunberbird
-overlay chrome://messenger/content/mailWindowOverlay.xul chrome://mailhops/content/msgNotificationBar.xul application={3550f703-e582-4d05-9a08-453d09bdfdc6}
-overlay chrome://messenger/content/messenger.xul chrome://mailhops/content/msgListColumn.xul application={3550f703-e582-4d05-9a08-453d09bdfdc6}
\ No newline at end of file
+locale mailhops de chrome/locale/de/
+locale mailhops en chrome/locale/en/
+locale mailhops es chrome/locale/es/
+locale mailhops fr chrome/locale/fr/
+locale mailhops ja chrome/locale/ja/
+locale mailhops pl chrome/locale/pl/
+locale mailhops pt-BR chrome/locale/pt-BR/
+locale mailhops ru chrome/locale/ru/
+locale mailhops zh-CN chrome/locale/zh-CN/
+
+overlay chrome://messenger/content/messenger.xul chrome://mailhops/content/msgNotificationBar.xul
+overlay chrome://messenger/content/messenger.xul chrome://mailhops/content/msgListColumn.xul
\ No newline at end of file
diff --git a/chrome/content/utils.js b/chrome/content/mailhops-1-utils.js
similarity index 100%
rename from chrome/content/utils.js
rename to chrome/content/mailhops-1-utils.js
diff --git a/chrome/content/msgNotificationBar.js b/chrome/content/mailhops-2-msgNotificationBar.js
similarity index 99%
rename from chrome/content/msgNotificationBar.js
rename to chrome/content/mailhops-2-msgNotificationBar.js
index f26308d..bd8097e 100644
--- a/chrome/content/msgNotificationBar.js
+++ b/chrome/content/mailhops-2-msgNotificationBar.js
@@ -33,7 +33,7 @@ var mailHopsDisplay =
this.mailhopsDataPaneDNSBL = document.getElementById("mailhopsDataPaneDNSBL");
//wait for message to be selected before showing
- if(!reload) this.mhBox.style.display = 'none';
+ if(!reload && this.mhBox) this.mhBox.style.display = 'none';
//event listner for route click to launch map
this.mailhopsDataPaneDNSBL.addEventListener("click", function () {
diff --git a/chrome/content/mailhops.js b/chrome/content/mailhops-3.js
similarity index 94%
rename from chrome/content/mailhops.js
rename to chrome/content/mailhops-3.js
index de4dc08..975ba58 100644
--- a/chrome/content/mailhops.js
+++ b/chrome/content/mailhops-3.js
@@ -4,12 +4,11 @@
* @website: http://mailhops.com
*/
-var mailHops =
-{
+var mailHops = {
msgURI: null,
isLoaded: false,
options: {
- 'version':'MailHops Plugin 3.1.8',
+ 'version':'MailHops Plugin 3.6.8',
'lan':'en',
'unit':'mi',
'api_http':'https://',
@@ -93,7 +92,7 @@ mailHops.StreamListener =
{
content: "" ,
found: false ,
- onDataAvailable: function ( request , context , inputStream , offset , count )
+ onDataAvailable: function ( request, inputStream, offset, count )
{
try {
var sis = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance ( Components.interfaces.nsIScriptableInputStream ) ;
@@ -117,15 +116,17 @@ mailHops.StreamListener =
mailHops.LOG('StreamListener Error: '+JSON.stringify(e));
}
},
- onStartRequest: function ( request , context )
+ onStartRequest: function ( request )
{
this.content = "" ;
this.found = false ;
},
- onStopRequest: function ( aRequest , aContext , aStatusCode )
+ onStopRequest: function ( aRequest , aStatusCode )
{
mailHops.headers = Components.classes["@mozilla.org/messenger/mimeheaders;1"].createInstance ( Components.interfaces.nsIMimeHeaders ) ;
- mailHops.headers.initialize ( this.content , this.content.length ) ;
+ mailHops.headers.initialize(this.content, this.content.length);
+ mailHops.headerData = this.content;
+ console.log(this.content);
mailHops.getRoute() ;
}
};
@@ -310,10 +311,11 @@ mailHops.testIP = function(ip,header){
return validIP;
};
-mailHops.setupEventListener = function(){
+mailHops.setupEventListener = function () {
if ( mailHops.isLoaded ){
- return ;
+ return;
}
+ mailHops.LOG("Setting up Message listener");
mailHops.init();
mailHops.registerObserver();
@@ -328,12 +330,10 @@ mailHops.setupEventListener = function(){
//preferences observers
mailHops.registerObserver = function(){
var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService( Components.interfaces.nsIPrefService ) ;
- mailHops._branch = prefService.getBranch( "mail.mailHops." ) ;
- try {
- mailHops._branch.QueryInterface( Components.interfaces.nsIPrefBranchInternal ) ;
- } catch (err){
- mailHops._branch.QueryInterface( Components.interfaces.nsIPrefBranch ) ;
- }
+ mailHops._branch = prefService.getBranch("mail.mailHops.");
+ if (!("addObserver" in mailHops._branch))
+ mailHops._branch.QueryInterface(Components.interfaces.nsIPrefBranch2);
+
mailHops._branch.addObserver( "" , mailHops , false ) ;
};
@@ -502,4 +502,12 @@ mailHops.refreshCache = function(){
mailHops.getRoute();
};
-addEventListener( "messagepane-loaded" , mailHops.setupEventListener , true );
\ No newline at end of file
+// window.addEventListener("messagepane-loaded", mailHops.setupEventListener, true);
+window.addEventListener("load", function() {
+ var messagepane = document.getElementById("messagepane");
+ if (messagepane) {
+ messagepane.addEventListener("load", function () {
+ mailHops.setupEventListener();
+ }, true);
+ }
+}, false);
\ No newline at end of file
diff --git a/chrome/content/preferences.js b/chrome/content/mailhops-4-preferences.js
similarity index 100%
rename from chrome/content/preferences.js
rename to chrome/content/mailhops-4-preferences.js
diff --git a/chrome/content/msgListColumn.js b/chrome/content/mailhops-5-msgListColumn.js
similarity index 87%
rename from chrome/content/msgListColumn.js
rename to chrome/content/mailhops-5-msgListColumn.js
index 443773d..8cace5e 100644
--- a/chrome/content/msgListColumn.js
+++ b/chrome/content/mailhops-5-msgListColumn.js
@@ -23,9 +23,11 @@ var columnHandler = {
},
isString: function() {return true;},
- getCellProperties: function(row, col, props){},
+ getCellProperties: function (row, col, props) {
+ return 'colMailHops';
+ },
getRowProperties: function(row, props){},
- getImageSrc: function(row, col) {
+ getImageSrc: function (row, col) {
var msgKey = gDBView.getKeyAt(row);
var msgHdr = gDBView.db.GetMsgHdrForKey(msgKey);
var countryCode = null;
@@ -64,7 +66,10 @@ function doOnceLoaded() {
}
function addCustomColumnHandler() {
- gDBView.addColumnHandler("colMailHops", columnHandler);
+ gDBView.addColumnHandler("colMailHops", columnHandler);
+ if ("COLUMNS_MAP_NOSORT" in gFolderDisplay) {
+ gFolderDisplay.COLUMNS_MAP_NOSORT.add("colMailHops");
+ }
}
-addEventListener( "load", doOnceLoaded, false );
\ No newline at end of file
+window.addEventListener("load", doOnceLoaded, false);
\ No newline at end of file
diff --git a/chrome/content/msgListColumn.xul b/chrome/content/msgListColumn.xul
index 705e0ed..29470f5 100644
--- a/chrome/content/msgListColumn.xul
+++ b/chrome/content/msgListColumn.xul
@@ -10,7 +10,6 @@
-
-
-
+
+
\ No newline at end of file
diff --git a/chrome/content/msgNotificationBar.xul b/chrome/content/msgNotificationBar.xul
index e6a4ee0..fe9af61 100644
--- a/chrome/content/msgNotificationBar.xul
+++ b/chrome/content/msgNotificationBar.xul
@@ -7,12 +7,12 @@
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:html="http://www.w3.org/1999/xhtml">
-
-
-
+
+
+
-
-
+
+
@@ -24,11 +24,11 @@
-
+
-
+
@@ -41,7 +41,7 @@
-
-
+
+
diff --git a/chrome/content/preferences.xul b/chrome/content/preferences.xul
index 0f9d5a8..ad5c45b 100644
--- a/chrome/content/preferences.xul
+++ b/chrome/content/preferences.xul
@@ -15,8 +15,8 @@
ondialogaccept="return mailHopPreferences.savePreferences();"
title="MailHops &mailhops_preferences;">
-
-
+
+
diff --git a/chrome/skin/classic/msgNotificationBar.css b/chrome/skin/classic/msgNotificationBar.css
index 353e29a..62a9119 100644
--- a/chrome/skin/classic/msgNotificationBar.css
+++ b/chrome/skin/classic/msgNotificationBar.css
@@ -113,6 +113,7 @@
background-color: #FFF;
position: absolute;
margin-top: 0;
+ z-index: 10000;
}
#mailhopsDataPaneDetails .hop {
@@ -130,3 +131,14 @@
padding-left: 22px;
margin-left: 22px;
}
+
+#mailhopsNoficationBox .toolbarbutton {
+ font-family: Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;
+ margin: 0 .25em 0 0;
+ padding: 0px 9px 9px 9px;
+ width: 75px;
+ font-weight: 400;
+ border-radius: .28571429rem;
+ box-shadow: 0 0 0 1px #1b1c1d inset!important;
+ color: #1b1c1d!important;
+}
\ No newline at end of file
diff --git a/install.rdf b/install.rdf
deleted file mode 100644
index 7067ca6..0000000
--- a/install.rdf
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
- 2
- thunderbird@mailhops.com
- 3.2.0
-
- MailHops
- MailHops maps the route an email took to get to you. Displaying the senders location, weather, user-agent and authentication used.
- chrome://mailhops/content/images/mailhops32.png
- https://www.mailhops.com
- Andrew Van Tassel
- chrome://mailhops/content/preferences.xul
-
-
-
-
- postbox@postbox-inc.com
- 2.0
- 5.*
-
-
-
-
-
-
- {3550f703-e582-4d05-9a08-453d09bdfdc6}
- 3.0.*
- 60.*
-
-
-
-
-
- de
- MailHops
- MailHops Karten die Route eine E-Mail gereist, um bei Ihnen melden. Verwendung GeoIP es zeigt auch zurückgelegte Strecke zusammen mit dem Standort ( Ort, Bundesland und Land) des Absenders.
-
-
-
-
-
- en
- MailHops
- MailHops maps the route an email traveled to get to you. Using GeoIP it also displays distance traveled along with the location (city, state and country) of the sender.
-
-
-
-
-
- es
- MailHops
- Mapas MailHops la ruta un correo electrónico viajó a llegar a usted. Usando GeoIP también muestra la distancia recorrida junto con la ubicación ( ciudad, estado y país) del remitente.
-
-
-
-
-
- fr
- MailHops
- MailHops vous permet de connaître la route empruntée par un mail avant qu'il ne parvienne dans votre messagerie. Grâce à MailHops vous pourrez : connaître le lieu d'émission du mail (pays, ville); visualiser le parcours du mail sur une carte (avec un grand choix de styles de carte); ou encore connaître des informations plus techniques (le user-agent et l'authentification utilisés par l'expéditeur) et d'autres informations plus amusantes comme la distance totale parcourue par le mail ou la météo actuelle sur le lieu d'émission. La version gratuite (sans clef API) permet d'obtenir ces informations et bien d'autres pour 100 messages par tranche de 24h.
-
-
-
-
-
- ja
- MailHops
- MailHops電子メールがあなたに取得するために旅したルートをマップします。のGeoIPを使用しても距離が送信者の場所(都市、州や国)と一緒に旅に表示されます。
-
-
-
-
-
- pl
- MailHops
- Wskazuje trasę, którą e-mail dotarł do adresata. Korzystając z GeoIP, pokazuje także przybliżony dystans do nadawcy oraz jego położenie (miasto, region i państwo).
-
-
-
-
-
- pt-BR
- MailHops
- MailHops mapeia a rota um e-mail viajou para chegar até você . Usando GeoIP ele também exibe a distância percorrida , juntamente com a localização (cidade , estado e país ) do remetente.
-
-
-
-
-
- ru
- MailHops
- MailHops отображает маршрутэлектронной почты , пройденное , чтобы добраться до вас. Использование GeoIP также отображает расстояние вместе с места (город, штат и страна ) отправителя.
-
-
-
-
-
- zh-CN
- MailHops
- MailHops映射電子郵件前往得到你的路線。使用GeoIP的它也顯示行駛距離隨著發送者的位置(城市,州和國家)
-
-
-
-
-
-
diff --git a/mailhops.zip b/mailhops.zip
new file mode 100644
index 0000000..1aa66f7
Binary files /dev/null and b/mailhops.zip differ
diff --git a/mailhops/_locales/de/prefs.dtd b/mailhops/_locales/de/prefs.dtd
new file mode 100644
index 0000000..246dc99
--- /dev/null
+++ b/mailhops/_locales/de/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/de/strings.dtd b/mailhops/_locales/de/strings.dtd
new file mode 100644
index 0000000..e808497
--- /dev/null
+++ b/mailhops/_locales/de/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/en/prefs.dtd b/mailhops/_locales/en/prefs.dtd
new file mode 100644
index 0000000..00e7e42
--- /dev/null
+++ b/mailhops/_locales/en/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/en/strings.dtd b/mailhops/_locales/en/strings.dtd
new file mode 100644
index 0000000..ffb003c
--- /dev/null
+++ b/mailhops/_locales/en/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/es/prefs.dtd b/mailhops/_locales/es/prefs.dtd
new file mode 100644
index 0000000..7a8d1b9
--- /dev/null
+++ b/mailhops/_locales/es/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/es/strings.dtd b/mailhops/_locales/es/strings.dtd
new file mode 100644
index 0000000..d8d2c35
--- /dev/null
+++ b/mailhops/_locales/es/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/fr/prefs.dtd b/mailhops/_locales/fr/prefs.dtd
new file mode 100644
index 0000000..033b2b2
--- /dev/null
+++ b/mailhops/_locales/fr/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/fr/strings.dtd b/mailhops/_locales/fr/strings.dtd
new file mode 100644
index 0000000..516019d
--- /dev/null
+++ b/mailhops/_locales/fr/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/ja/prefs.dtd b/mailhops/_locales/ja/prefs.dtd
new file mode 100644
index 0000000..d1feea4
--- /dev/null
+++ b/mailhops/_locales/ja/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/ja/strings.dtd b/mailhops/_locales/ja/strings.dtd
new file mode 100644
index 0000000..c130b6d
--- /dev/null
+++ b/mailhops/_locales/ja/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/pl/prefs.dtd b/mailhops/_locales/pl/prefs.dtd
new file mode 100644
index 0000000..fbdbfac
--- /dev/null
+++ b/mailhops/_locales/pl/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/pl/strings.dtd b/mailhops/_locales/pl/strings.dtd
new file mode 100644
index 0000000..ee2295a
--- /dev/null
+++ b/mailhops/_locales/pl/strings.dtd
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/pt-BR/prefs.dtd b/mailhops/_locales/pt-BR/prefs.dtd
new file mode 100644
index 0000000..289f30e
--- /dev/null
+++ b/mailhops/_locales/pt-BR/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/pt-BR/strings.dtd b/mailhops/_locales/pt-BR/strings.dtd
new file mode 100644
index 0000000..57fa712
--- /dev/null
+++ b/mailhops/_locales/pt-BR/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/ru/prefs.dtd b/mailhops/_locales/ru/prefs.dtd
new file mode 100644
index 0000000..3d72d34
--- /dev/null
+++ b/mailhops/_locales/ru/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/ru/strings.dtd b/mailhops/_locales/ru/strings.dtd
new file mode 100644
index 0000000..d942635
--- /dev/null
+++ b/mailhops/_locales/ru/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/zh-CN/prefs.dtd b/mailhops/_locales/zh-CN/prefs.dtd
new file mode 100644
index 0000000..263e744
--- /dev/null
+++ b/mailhops/_locales/zh-CN/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/_locales/zh-CN/strings.dtd b/mailhops/_locales/zh-CN/strings.dtd
new file mode 100644
index 0000000..4dd569b
--- /dev/null
+++ b/mailhops/_locales/zh-CN/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome.manifest b/mailhops/chrome.manifest
new file mode 100644
index 0000000..918e31a
--- /dev/null
+++ b/mailhops/chrome.manifest
@@ -0,0 +1,16 @@
+content mailhops chrome/content/
+
+skin mailhops classic/1.0 chrome/skin/classic/
+
+locale mailhops de chrome/locale/de/
+locale mailhops en chrome/locale/en/
+locale mailhops es chrome/locale/es/
+locale mailhops fr chrome/locale/fr/
+locale mailhops ja chrome/locale/ja/
+locale mailhops pl chrome/locale/pl/
+locale mailhops pt-BR chrome/locale/pt-BR/
+locale mailhops ru chrome/locale/ru/
+locale mailhops zh-CN chrome/locale/zh-CN/
+
+overlay chrome://messenger/content/messenger.xul chrome://mailhops/content/msgNotificationBar.xul
+overlay chrome://messenger/content/messenger.xul chrome://mailhops/content/msgListColumn.xul
\ No newline at end of file
diff --git a/mailhops/chrome/content/images/auth/bomb.png b/mailhops/chrome/content/images/auth/bomb.png
new file mode 100644
index 0000000..1be3797
Binary files /dev/null and b/mailhops/chrome/content/images/auth/bomb.png differ
diff --git a/mailhops/chrome/content/images/auth/error.png b/mailhops/chrome/content/images/auth/error.png
new file mode 100644
index 0000000..628cf2d
Binary files /dev/null and b/mailhops/chrome/content/images/auth/error.png differ
diff --git a/mailhops/chrome/content/images/auth/fail.png b/mailhops/chrome/content/images/auth/fail.png
new file mode 100644
index 0000000..0cd8031
Binary files /dev/null and b/mailhops/chrome/content/images/auth/fail.png differ
diff --git a/mailhops/chrome/content/images/auth/hardfail.png b/mailhops/chrome/content/images/auth/hardfail.png
new file mode 100644
index 0000000..0cd8031
Binary files /dev/null and b/mailhops/chrome/content/images/auth/hardfail.png differ
diff --git a/mailhops/chrome/content/images/auth/neutral.png b/mailhops/chrome/content/images/auth/neutral.png
new file mode 100644
index 0000000..a7651ec
Binary files /dev/null and b/mailhops/chrome/content/images/auth/neutral.png differ
diff --git a/mailhops/chrome/content/images/auth/none.png b/mailhops/chrome/content/images/auth/none.png
new file mode 100644
index 0000000..a9af8d4
Binary files /dev/null and b/mailhops/chrome/content/images/auth/none.png differ
diff --git a/mailhops/chrome/content/images/auth/not_secure.png b/mailhops/chrome/content/images/auth/not_secure.png
new file mode 100644
index 0000000..3b0ccad
Binary files /dev/null and b/mailhops/chrome/content/images/auth/not_secure.png differ
diff --git a/mailhops/chrome/content/images/auth/pass.png b/mailhops/chrome/content/images/auth/pass.png
new file mode 100644
index 0000000..058ad26
Binary files /dev/null and b/mailhops/chrome/content/images/auth/pass.png differ
diff --git a/mailhops/chrome/content/images/auth/permerror.png b/mailhops/chrome/content/images/auth/permerror.png
new file mode 100644
index 0000000..fa63024
Binary files /dev/null and b/mailhops/chrome/content/images/auth/permerror.png differ
diff --git a/mailhops/chrome/content/images/auth/secure.png b/mailhops/chrome/content/images/auth/secure.png
new file mode 100644
index 0000000..3d37f2e
Binary files /dev/null and b/mailhops/chrome/content/images/auth/secure.png differ
diff --git a/mailhops/chrome/content/images/auth/secure_host.png b/mailhops/chrome/content/images/auth/secure_host.png
new file mode 100644
index 0000000..ecd5174
Binary files /dev/null and b/mailhops/chrome/content/images/auth/secure_host.png differ
diff --git a/mailhops/chrome/content/images/auth/softfail.png b/mailhops/chrome/content/images/auth/softfail.png
new file mode 100644
index 0000000..0c9f73e
Binary files /dev/null and b/mailhops/chrome/content/images/auth/softfail.png differ
diff --git a/mailhops/chrome/content/images/auth/temperror.png b/mailhops/chrome/content/images/auth/temperror.png
new file mode 100644
index 0000000..6469cea
Binary files /dev/null and b/mailhops/chrome/content/images/auth/temperror.png differ
diff --git a/mailhops/chrome/content/images/email.png b/mailhops/chrome/content/images/email.png
new file mode 100644
index 0000000..7348aed
Binary files /dev/null and b/mailhops/chrome/content/images/email.png differ
diff --git a/mailhops/chrome/content/images/flags/ad.png b/mailhops/chrome/content/images/flags/ad.png
new file mode 100644
index 0000000..625ca84
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ad.png differ
diff --git a/mailhops/chrome/content/images/flags/ae.png b/mailhops/chrome/content/images/flags/ae.png
new file mode 100644
index 0000000..ef3a1ec
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ae.png differ
diff --git a/mailhops/chrome/content/images/flags/af.png b/mailhops/chrome/content/images/flags/af.png
new file mode 100644
index 0000000..a4742e2
Binary files /dev/null and b/mailhops/chrome/content/images/flags/af.png differ
diff --git a/mailhops/chrome/content/images/flags/ag.png b/mailhops/chrome/content/images/flags/ag.png
new file mode 100644
index 0000000..556d550
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ag.png differ
diff --git a/mailhops/chrome/content/images/flags/ai.png b/mailhops/chrome/content/images/flags/ai.png
new file mode 100644
index 0000000..74ed29d
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ai.png differ
diff --git a/mailhops/chrome/content/images/flags/al.png b/mailhops/chrome/content/images/flags/al.png
new file mode 100644
index 0000000..92354cb
Binary files /dev/null and b/mailhops/chrome/content/images/flags/al.png differ
diff --git a/mailhops/chrome/content/images/flags/am.png b/mailhops/chrome/content/images/flags/am.png
new file mode 100644
index 0000000..344a2a8
Binary files /dev/null and b/mailhops/chrome/content/images/flags/am.png differ
diff --git a/mailhops/chrome/content/images/flags/an.png b/mailhops/chrome/content/images/flags/an.png
new file mode 100644
index 0000000..633e4b8
Binary files /dev/null and b/mailhops/chrome/content/images/flags/an.png differ
diff --git a/mailhops/chrome/content/images/flags/ao.png b/mailhops/chrome/content/images/flags/ao.png
new file mode 100644
index 0000000..bcbd1d6
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ao.png differ
diff --git a/mailhops/chrome/content/images/flags/ar.png b/mailhops/chrome/content/images/flags/ar.png
new file mode 100644
index 0000000..e5ef8f1
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ar.png differ
diff --git a/mailhops/chrome/content/images/flags/as.png b/mailhops/chrome/content/images/flags/as.png
new file mode 100644
index 0000000..32f30e4
Binary files /dev/null and b/mailhops/chrome/content/images/flags/as.png differ
diff --git a/mailhops/chrome/content/images/flags/at.png b/mailhops/chrome/content/images/flags/at.png
new file mode 100644
index 0000000..0f15f34
Binary files /dev/null and b/mailhops/chrome/content/images/flags/at.png differ
diff --git a/mailhops/chrome/content/images/flags/au.png b/mailhops/chrome/content/images/flags/au.png
new file mode 100644
index 0000000..a01389a
Binary files /dev/null and b/mailhops/chrome/content/images/flags/au.png differ
diff --git a/mailhops/chrome/content/images/flags/aw.png b/mailhops/chrome/content/images/flags/aw.png
new file mode 100644
index 0000000..a3579c2
Binary files /dev/null and b/mailhops/chrome/content/images/flags/aw.png differ
diff --git a/mailhops/chrome/content/images/flags/ax.png b/mailhops/chrome/content/images/flags/ax.png
new file mode 100644
index 0000000..1eea80a
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ax.png differ
diff --git a/mailhops/chrome/content/images/flags/az.png b/mailhops/chrome/content/images/flags/az.png
new file mode 100644
index 0000000..4ee9fe5
Binary files /dev/null and b/mailhops/chrome/content/images/flags/az.png differ
diff --git a/mailhops/chrome/content/images/flags/ba.png b/mailhops/chrome/content/images/flags/ba.png
new file mode 100644
index 0000000..c774992
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ba.png differ
diff --git a/mailhops/chrome/content/images/flags/bb.png b/mailhops/chrome/content/images/flags/bb.png
new file mode 100644
index 0000000..0df19c7
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bb.png differ
diff --git a/mailhops/chrome/content/images/flags/bd.png b/mailhops/chrome/content/images/flags/bd.png
new file mode 100644
index 0000000..076a8bf
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bd.png differ
diff --git a/mailhops/chrome/content/images/flags/be.png b/mailhops/chrome/content/images/flags/be.png
new file mode 100644
index 0000000..d86ebc8
Binary files /dev/null and b/mailhops/chrome/content/images/flags/be.png differ
diff --git a/mailhops/chrome/content/images/flags/bf.png b/mailhops/chrome/content/images/flags/bf.png
new file mode 100644
index 0000000..ab5ce8f
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bf.png differ
diff --git a/mailhops/chrome/content/images/flags/bg.png b/mailhops/chrome/content/images/flags/bg.png
new file mode 100644
index 0000000..0469f06
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bg.png differ
diff --git a/mailhops/chrome/content/images/flags/bh.png b/mailhops/chrome/content/images/flags/bh.png
new file mode 100644
index 0000000..ea8ce68
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bh.png differ
diff --git a/mailhops/chrome/content/images/flags/bi.png b/mailhops/chrome/content/images/flags/bi.png
new file mode 100644
index 0000000..5cc2e30
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bi.png differ
diff --git a/mailhops/chrome/content/images/flags/bj.png b/mailhops/chrome/content/images/flags/bj.png
new file mode 100644
index 0000000..1cc8b45
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bj.png differ
diff --git a/mailhops/chrome/content/images/flags/bm.png b/mailhops/chrome/content/images/flags/bm.png
new file mode 100644
index 0000000..c0c7aea
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bm.png differ
diff --git a/mailhops/chrome/content/images/flags/bn.png b/mailhops/chrome/content/images/flags/bn.png
new file mode 100644
index 0000000..8fb0984
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bn.png differ
diff --git a/mailhops/chrome/content/images/flags/bo.png b/mailhops/chrome/content/images/flags/bo.png
new file mode 100644
index 0000000..ce7ba52
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bo.png differ
diff --git a/mailhops/chrome/content/images/flags/br.png b/mailhops/chrome/content/images/flags/br.png
new file mode 100644
index 0000000..9b1a553
Binary files /dev/null and b/mailhops/chrome/content/images/flags/br.png differ
diff --git a/mailhops/chrome/content/images/flags/bs.png b/mailhops/chrome/content/images/flags/bs.png
new file mode 100644
index 0000000..639fa6c
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bs.png differ
diff --git a/mailhops/chrome/content/images/flags/bt.png b/mailhops/chrome/content/images/flags/bt.png
new file mode 100644
index 0000000..1d512df
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bt.png differ
diff --git a/mailhops/chrome/content/images/flags/bv.png b/mailhops/chrome/content/images/flags/bv.png
new file mode 100644
index 0000000..160b6b5
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bv.png differ
diff --git a/mailhops/chrome/content/images/flags/bw.png b/mailhops/chrome/content/images/flags/bw.png
new file mode 100644
index 0000000..fcb1039
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bw.png differ
diff --git a/mailhops/chrome/content/images/flags/by.png b/mailhops/chrome/content/images/flags/by.png
new file mode 100644
index 0000000..504774e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/by.png differ
diff --git a/mailhops/chrome/content/images/flags/bz.png b/mailhops/chrome/content/images/flags/bz.png
new file mode 100644
index 0000000..be63ee1
Binary files /dev/null and b/mailhops/chrome/content/images/flags/bz.png differ
diff --git a/mailhops/chrome/content/images/flags/ca.png b/mailhops/chrome/content/images/flags/ca.png
new file mode 100644
index 0000000..1f20419
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ca.png differ
diff --git a/mailhops/chrome/content/images/flags/catalonia.png b/mailhops/chrome/content/images/flags/catalonia.png
new file mode 100644
index 0000000..5041e30
Binary files /dev/null and b/mailhops/chrome/content/images/flags/catalonia.png differ
diff --git a/mailhops/chrome/content/images/flags/cc.png b/mailhops/chrome/content/images/flags/cc.png
new file mode 100644
index 0000000..aed3d3b
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cc.png differ
diff --git a/mailhops/chrome/content/images/flags/cd.png b/mailhops/chrome/content/images/flags/cd.png
new file mode 100644
index 0000000..5e48942
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cd.png differ
diff --git a/mailhops/chrome/content/images/flags/cf.png b/mailhops/chrome/content/images/flags/cf.png
new file mode 100644
index 0000000..da687bd
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cf.png differ
diff --git a/mailhops/chrome/content/images/flags/cg.png b/mailhops/chrome/content/images/flags/cg.png
new file mode 100644
index 0000000..a859792
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cg.png differ
diff --git a/mailhops/chrome/content/images/flags/ch.png b/mailhops/chrome/content/images/flags/ch.png
new file mode 100644
index 0000000..242ec01
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ch.png differ
diff --git a/mailhops/chrome/content/images/flags/ci.png b/mailhops/chrome/content/images/flags/ci.png
new file mode 100644
index 0000000..3f2c62e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ci.png differ
diff --git a/mailhops/chrome/content/images/flags/ck.png b/mailhops/chrome/content/images/flags/ck.png
new file mode 100644
index 0000000..746d3d6
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ck.png differ
diff --git a/mailhops/chrome/content/images/flags/cl.png b/mailhops/chrome/content/images/flags/cl.png
new file mode 100644
index 0000000..29c6d61
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cl.png differ
diff --git a/mailhops/chrome/content/images/flags/cm.png b/mailhops/chrome/content/images/flags/cm.png
new file mode 100644
index 0000000..f65c5bd
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cm.png differ
diff --git a/mailhops/chrome/content/images/flags/cn.png b/mailhops/chrome/content/images/flags/cn.png
new file mode 100644
index 0000000..8914414
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cn.png differ
diff --git a/mailhops/chrome/content/images/flags/co.png b/mailhops/chrome/content/images/flags/co.png
new file mode 100644
index 0000000..a118ff4
Binary files /dev/null and b/mailhops/chrome/content/images/flags/co.png differ
diff --git a/mailhops/chrome/content/images/flags/cr.png b/mailhops/chrome/content/images/flags/cr.png
new file mode 100644
index 0000000..c7a3731
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cr.png differ
diff --git a/mailhops/chrome/content/images/flags/cs.png b/mailhops/chrome/content/images/flags/cs.png
new file mode 100644
index 0000000..8254790
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cs.png differ
diff --git a/mailhops/chrome/content/images/flags/cu.png b/mailhops/chrome/content/images/flags/cu.png
new file mode 100644
index 0000000..083f1d6
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cu.png differ
diff --git a/mailhops/chrome/content/images/flags/cv.png b/mailhops/chrome/content/images/flags/cv.png
new file mode 100644
index 0000000..a63f7ea
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cv.png differ
diff --git a/mailhops/chrome/content/images/flags/cx.png b/mailhops/chrome/content/images/flags/cx.png
new file mode 100644
index 0000000..48e31ad
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cx.png differ
diff --git a/mailhops/chrome/content/images/flags/cy.png b/mailhops/chrome/content/images/flags/cy.png
new file mode 100644
index 0000000..5b1ad6c
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cy.png differ
diff --git a/mailhops/chrome/content/images/flags/cz.png b/mailhops/chrome/content/images/flags/cz.png
new file mode 100644
index 0000000..c8403dd
Binary files /dev/null and b/mailhops/chrome/content/images/flags/cz.png differ
diff --git a/mailhops/chrome/content/images/flags/de.png b/mailhops/chrome/content/images/flags/de.png
new file mode 100644
index 0000000..ac4a977
Binary files /dev/null and b/mailhops/chrome/content/images/flags/de.png differ
diff --git a/mailhops/chrome/content/images/flags/dj.png b/mailhops/chrome/content/images/flags/dj.png
new file mode 100644
index 0000000..582af36
Binary files /dev/null and b/mailhops/chrome/content/images/flags/dj.png differ
diff --git a/mailhops/chrome/content/images/flags/dk.png b/mailhops/chrome/content/images/flags/dk.png
new file mode 100644
index 0000000..e2993d3
Binary files /dev/null and b/mailhops/chrome/content/images/flags/dk.png differ
diff --git a/mailhops/chrome/content/images/flags/dm.png b/mailhops/chrome/content/images/flags/dm.png
new file mode 100644
index 0000000..5fbffcb
Binary files /dev/null and b/mailhops/chrome/content/images/flags/dm.png differ
diff --git a/mailhops/chrome/content/images/flags/do.png b/mailhops/chrome/content/images/flags/do.png
new file mode 100644
index 0000000..5a04932
Binary files /dev/null and b/mailhops/chrome/content/images/flags/do.png differ
diff --git a/mailhops/chrome/content/images/flags/dz.png b/mailhops/chrome/content/images/flags/dz.png
new file mode 100644
index 0000000..335c239
Binary files /dev/null and b/mailhops/chrome/content/images/flags/dz.png differ
diff --git a/mailhops/chrome/content/images/flags/ec.png b/mailhops/chrome/content/images/flags/ec.png
new file mode 100644
index 0000000..0caa0b1
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ec.png differ
diff --git a/mailhops/chrome/content/images/flags/ee.png b/mailhops/chrome/content/images/flags/ee.png
new file mode 100644
index 0000000..0c82efb
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ee.png differ
diff --git a/mailhops/chrome/content/images/flags/eg.png b/mailhops/chrome/content/images/flags/eg.png
new file mode 100644
index 0000000..8a3f7a1
Binary files /dev/null and b/mailhops/chrome/content/images/flags/eg.png differ
diff --git a/mailhops/chrome/content/images/flags/eh.png b/mailhops/chrome/content/images/flags/eh.png
new file mode 100644
index 0000000..90a1195
Binary files /dev/null and b/mailhops/chrome/content/images/flags/eh.png differ
diff --git a/mailhops/chrome/content/images/flags/england.png b/mailhops/chrome/content/images/flags/england.png
new file mode 100644
index 0000000..3a7311d
Binary files /dev/null and b/mailhops/chrome/content/images/flags/england.png differ
diff --git a/mailhops/chrome/content/images/flags/er.png b/mailhops/chrome/content/images/flags/er.png
new file mode 100644
index 0000000..13065ae
Binary files /dev/null and b/mailhops/chrome/content/images/flags/er.png differ
diff --git a/mailhops/chrome/content/images/flags/es.png b/mailhops/chrome/content/images/flags/es.png
new file mode 100644
index 0000000..c2de2d7
Binary files /dev/null and b/mailhops/chrome/content/images/flags/es.png differ
diff --git a/mailhops/chrome/content/images/flags/et.png b/mailhops/chrome/content/images/flags/et.png
new file mode 100644
index 0000000..2e893fa
Binary files /dev/null and b/mailhops/chrome/content/images/flags/et.png differ
diff --git a/mailhops/chrome/content/images/flags/europeanunion.png b/mailhops/chrome/content/images/flags/europeanunion.png
new file mode 100644
index 0000000..d6d8711
Binary files /dev/null and b/mailhops/chrome/content/images/flags/europeanunion.png differ
diff --git a/mailhops/chrome/content/images/flags/fam.png b/mailhops/chrome/content/images/flags/fam.png
new file mode 100644
index 0000000..cf50c75
Binary files /dev/null and b/mailhops/chrome/content/images/flags/fam.png differ
diff --git a/mailhops/chrome/content/images/flags/fi.png b/mailhops/chrome/content/images/flags/fi.png
new file mode 100644
index 0000000..14ec091
Binary files /dev/null and b/mailhops/chrome/content/images/flags/fi.png differ
diff --git a/mailhops/chrome/content/images/flags/fj.png b/mailhops/chrome/content/images/flags/fj.png
new file mode 100644
index 0000000..cee9988
Binary files /dev/null and b/mailhops/chrome/content/images/flags/fj.png differ
diff --git a/mailhops/chrome/content/images/flags/fk.png b/mailhops/chrome/content/images/flags/fk.png
new file mode 100644
index 0000000..ceaeb27
Binary files /dev/null and b/mailhops/chrome/content/images/flags/fk.png differ
diff --git a/mailhops/chrome/content/images/flags/fm.png b/mailhops/chrome/content/images/flags/fm.png
new file mode 100644
index 0000000..066bb24
Binary files /dev/null and b/mailhops/chrome/content/images/flags/fm.png differ
diff --git a/mailhops/chrome/content/images/flags/fo.png b/mailhops/chrome/content/images/flags/fo.png
new file mode 100644
index 0000000..cbceb80
Binary files /dev/null and b/mailhops/chrome/content/images/flags/fo.png differ
diff --git a/mailhops/chrome/content/images/flags/fr.png b/mailhops/chrome/content/images/flags/fr.png
new file mode 100644
index 0000000..8332c4e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/fr.png differ
diff --git a/mailhops/chrome/content/images/flags/ga.png b/mailhops/chrome/content/images/flags/ga.png
new file mode 100644
index 0000000..0e0d434
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ga.png differ
diff --git a/mailhops/chrome/content/images/flags/gb.png b/mailhops/chrome/content/images/flags/gb.png
new file mode 100644
index 0000000..ff701e1
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gb.png differ
diff --git a/mailhops/chrome/content/images/flags/gd.png b/mailhops/chrome/content/images/flags/gd.png
new file mode 100644
index 0000000..9ab57f5
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gd.png differ
diff --git a/mailhops/chrome/content/images/flags/ge.png b/mailhops/chrome/content/images/flags/ge.png
new file mode 100644
index 0000000..728d970
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ge.png differ
diff --git a/mailhops/chrome/content/images/flags/gf.png b/mailhops/chrome/content/images/flags/gf.png
new file mode 100644
index 0000000..8332c4e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gf.png differ
diff --git a/mailhops/chrome/content/images/flags/gh.png b/mailhops/chrome/content/images/flags/gh.png
new file mode 100644
index 0000000..4e2f896
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gh.png differ
diff --git a/mailhops/chrome/content/images/flags/gi.png b/mailhops/chrome/content/images/flags/gi.png
new file mode 100644
index 0000000..e76797f
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gi.png differ
diff --git a/mailhops/chrome/content/images/flags/gl.png b/mailhops/chrome/content/images/flags/gl.png
new file mode 100644
index 0000000..ef12a73
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gl.png differ
diff --git a/mailhops/chrome/content/images/flags/gm.png b/mailhops/chrome/content/images/flags/gm.png
new file mode 100644
index 0000000..0720b66
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gm.png differ
diff --git a/mailhops/chrome/content/images/flags/gn.png b/mailhops/chrome/content/images/flags/gn.png
new file mode 100644
index 0000000..ea660b0
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gn.png differ
diff --git a/mailhops/chrome/content/images/flags/gp.png b/mailhops/chrome/content/images/flags/gp.png
new file mode 100644
index 0000000..dbb086d
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gp.png differ
diff --git a/mailhops/chrome/content/images/flags/gq.png b/mailhops/chrome/content/images/flags/gq.png
new file mode 100644
index 0000000..ebe20a2
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gq.png differ
diff --git a/mailhops/chrome/content/images/flags/gr.png b/mailhops/chrome/content/images/flags/gr.png
new file mode 100644
index 0000000..8651ade
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gr.png differ
diff --git a/mailhops/chrome/content/images/flags/gs.png b/mailhops/chrome/content/images/flags/gs.png
new file mode 100644
index 0000000..7ef0bf5
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gs.png differ
diff --git a/mailhops/chrome/content/images/flags/gt.png b/mailhops/chrome/content/images/flags/gt.png
new file mode 100644
index 0000000..c43a70d
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gt.png differ
diff --git a/mailhops/chrome/content/images/flags/gu.png b/mailhops/chrome/content/images/flags/gu.png
new file mode 100644
index 0000000..92f37c0
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gu.png differ
diff --git a/mailhops/chrome/content/images/flags/gw.png b/mailhops/chrome/content/images/flags/gw.png
new file mode 100644
index 0000000..b37bcf0
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gw.png differ
diff --git a/mailhops/chrome/content/images/flags/gy.png b/mailhops/chrome/content/images/flags/gy.png
new file mode 100644
index 0000000..22cbe2f
Binary files /dev/null and b/mailhops/chrome/content/images/flags/gy.png differ
diff --git a/mailhops/chrome/content/images/flags/hk.png b/mailhops/chrome/content/images/flags/hk.png
new file mode 100644
index 0000000..d5c380c
Binary files /dev/null and b/mailhops/chrome/content/images/flags/hk.png differ
diff --git a/mailhops/chrome/content/images/flags/hm.png b/mailhops/chrome/content/images/flags/hm.png
new file mode 100644
index 0000000..a01389a
Binary files /dev/null and b/mailhops/chrome/content/images/flags/hm.png differ
diff --git a/mailhops/chrome/content/images/flags/hn.png b/mailhops/chrome/content/images/flags/hn.png
new file mode 100644
index 0000000..96f8388
Binary files /dev/null and b/mailhops/chrome/content/images/flags/hn.png differ
diff --git a/mailhops/chrome/content/images/flags/hr.png b/mailhops/chrome/content/images/flags/hr.png
new file mode 100644
index 0000000..696b515
Binary files /dev/null and b/mailhops/chrome/content/images/flags/hr.png differ
diff --git a/mailhops/chrome/content/images/flags/ht.png b/mailhops/chrome/content/images/flags/ht.png
new file mode 100644
index 0000000..416052a
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ht.png differ
diff --git a/mailhops/chrome/content/images/flags/hu.png b/mailhops/chrome/content/images/flags/hu.png
new file mode 100644
index 0000000..7baafe4
Binary files /dev/null and b/mailhops/chrome/content/images/flags/hu.png differ
diff --git a/mailhops/chrome/content/images/flags/id.png b/mailhops/chrome/content/images/flags/id.png
new file mode 100644
index 0000000..c6bc0fa
Binary files /dev/null and b/mailhops/chrome/content/images/flags/id.png differ
diff --git a/mailhops/chrome/content/images/flags/ie.png b/mailhops/chrome/content/images/flags/ie.png
new file mode 100644
index 0000000..26baa31
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ie.png differ
diff --git a/mailhops/chrome/content/images/flags/il.png b/mailhops/chrome/content/images/flags/il.png
new file mode 100644
index 0000000..2ca772d
Binary files /dev/null and b/mailhops/chrome/content/images/flags/il.png differ
diff --git a/mailhops/chrome/content/images/flags/in.png b/mailhops/chrome/content/images/flags/in.png
new file mode 100644
index 0000000..e4d7e81
Binary files /dev/null and b/mailhops/chrome/content/images/flags/in.png differ
diff --git a/mailhops/chrome/content/images/flags/io.png b/mailhops/chrome/content/images/flags/io.png
new file mode 100644
index 0000000..3e74b6a
Binary files /dev/null and b/mailhops/chrome/content/images/flags/io.png differ
diff --git a/mailhops/chrome/content/images/flags/iq.png b/mailhops/chrome/content/images/flags/iq.png
new file mode 100644
index 0000000..878a351
Binary files /dev/null and b/mailhops/chrome/content/images/flags/iq.png differ
diff --git a/mailhops/chrome/content/images/flags/ir.png b/mailhops/chrome/content/images/flags/ir.png
new file mode 100644
index 0000000..c5fd136
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ir.png differ
diff --git a/mailhops/chrome/content/images/flags/is.png b/mailhops/chrome/content/images/flags/is.png
new file mode 100644
index 0000000..b8f6d0f
Binary files /dev/null and b/mailhops/chrome/content/images/flags/is.png differ
diff --git a/mailhops/chrome/content/images/flags/it.png b/mailhops/chrome/content/images/flags/it.png
new file mode 100644
index 0000000..89692f7
Binary files /dev/null and b/mailhops/chrome/content/images/flags/it.png differ
diff --git a/mailhops/chrome/content/images/flags/jm.png b/mailhops/chrome/content/images/flags/jm.png
new file mode 100644
index 0000000..7be119e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/jm.png differ
diff --git a/mailhops/chrome/content/images/flags/jo.png b/mailhops/chrome/content/images/flags/jo.png
new file mode 100644
index 0000000..11bd497
Binary files /dev/null and b/mailhops/chrome/content/images/flags/jo.png differ
diff --git a/mailhops/chrome/content/images/flags/jp.png b/mailhops/chrome/content/images/flags/jp.png
new file mode 100644
index 0000000..325fbad
Binary files /dev/null and b/mailhops/chrome/content/images/flags/jp.png differ
diff --git a/mailhops/chrome/content/images/flags/ke.png b/mailhops/chrome/content/images/flags/ke.png
new file mode 100644
index 0000000..51879ad
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ke.png differ
diff --git a/mailhops/chrome/content/images/flags/kg.png b/mailhops/chrome/content/images/flags/kg.png
new file mode 100644
index 0000000..0a818f6
Binary files /dev/null and b/mailhops/chrome/content/images/flags/kg.png differ
diff --git a/mailhops/chrome/content/images/flags/kh.png b/mailhops/chrome/content/images/flags/kh.png
new file mode 100644
index 0000000..30f6bb1
Binary files /dev/null and b/mailhops/chrome/content/images/flags/kh.png differ
diff --git a/mailhops/chrome/content/images/flags/ki.png b/mailhops/chrome/content/images/flags/ki.png
new file mode 100644
index 0000000..2dcce4b
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ki.png differ
diff --git a/mailhops/chrome/content/images/flags/km.png b/mailhops/chrome/content/images/flags/km.png
new file mode 100644
index 0000000..812b2f5
Binary files /dev/null and b/mailhops/chrome/content/images/flags/km.png differ
diff --git a/mailhops/chrome/content/images/flags/kn.png b/mailhops/chrome/content/images/flags/kn.png
new file mode 100644
index 0000000..febd5b4
Binary files /dev/null and b/mailhops/chrome/content/images/flags/kn.png differ
diff --git a/mailhops/chrome/content/images/flags/kp.png b/mailhops/chrome/content/images/flags/kp.png
new file mode 100644
index 0000000..d3d509a
Binary files /dev/null and b/mailhops/chrome/content/images/flags/kp.png differ
diff --git a/mailhops/chrome/content/images/flags/kr.png b/mailhops/chrome/content/images/flags/kr.png
new file mode 100644
index 0000000..9c0a78e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/kr.png differ
diff --git a/mailhops/chrome/content/images/flags/kw.png b/mailhops/chrome/content/images/flags/kw.png
new file mode 100644
index 0000000..96546da
Binary files /dev/null and b/mailhops/chrome/content/images/flags/kw.png differ
diff --git a/mailhops/chrome/content/images/flags/ky.png b/mailhops/chrome/content/images/flags/ky.png
new file mode 100644
index 0000000..15c5f8e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ky.png differ
diff --git a/mailhops/chrome/content/images/flags/kz.png b/mailhops/chrome/content/images/flags/kz.png
new file mode 100644
index 0000000..45a8c88
Binary files /dev/null and b/mailhops/chrome/content/images/flags/kz.png differ
diff --git a/mailhops/chrome/content/images/flags/la.png b/mailhops/chrome/content/images/flags/la.png
new file mode 100644
index 0000000..e28acd0
Binary files /dev/null and b/mailhops/chrome/content/images/flags/la.png differ
diff --git a/mailhops/chrome/content/images/flags/lb.png b/mailhops/chrome/content/images/flags/lb.png
new file mode 100644
index 0000000..d0d452b
Binary files /dev/null and b/mailhops/chrome/content/images/flags/lb.png differ
diff --git a/mailhops/chrome/content/images/flags/lc.png b/mailhops/chrome/content/images/flags/lc.png
new file mode 100644
index 0000000..a47d065
Binary files /dev/null and b/mailhops/chrome/content/images/flags/lc.png differ
diff --git a/mailhops/chrome/content/images/flags/li.png b/mailhops/chrome/content/images/flags/li.png
new file mode 100644
index 0000000..6469909
Binary files /dev/null and b/mailhops/chrome/content/images/flags/li.png differ
diff --git a/mailhops/chrome/content/images/flags/lk.png b/mailhops/chrome/content/images/flags/lk.png
new file mode 100644
index 0000000..088aad6
Binary files /dev/null and b/mailhops/chrome/content/images/flags/lk.png differ
diff --git a/mailhops/chrome/content/images/flags/lr.png b/mailhops/chrome/content/images/flags/lr.png
new file mode 100644
index 0000000..89a5bc7
Binary files /dev/null and b/mailhops/chrome/content/images/flags/lr.png differ
diff --git a/mailhops/chrome/content/images/flags/ls.png b/mailhops/chrome/content/images/flags/ls.png
new file mode 100644
index 0000000..33fdef1
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ls.png differ
diff --git a/mailhops/chrome/content/images/flags/lt.png b/mailhops/chrome/content/images/flags/lt.png
new file mode 100644
index 0000000..c8ef0da
Binary files /dev/null and b/mailhops/chrome/content/images/flags/lt.png differ
diff --git a/mailhops/chrome/content/images/flags/lu.png b/mailhops/chrome/content/images/flags/lu.png
new file mode 100644
index 0000000..4cabba9
Binary files /dev/null and b/mailhops/chrome/content/images/flags/lu.png differ
diff --git a/mailhops/chrome/content/images/flags/lv.png b/mailhops/chrome/content/images/flags/lv.png
new file mode 100644
index 0000000..49b6998
Binary files /dev/null and b/mailhops/chrome/content/images/flags/lv.png differ
diff --git a/mailhops/chrome/content/images/flags/ly.png b/mailhops/chrome/content/images/flags/ly.png
new file mode 100644
index 0000000..b163a9f
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ly.png differ
diff --git a/mailhops/chrome/content/images/flags/ma.png b/mailhops/chrome/content/images/flags/ma.png
new file mode 100644
index 0000000..f386770
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ma.png differ
diff --git a/mailhops/chrome/content/images/flags/mc.png b/mailhops/chrome/content/images/flags/mc.png
new file mode 100644
index 0000000..1aa830f
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mc.png differ
diff --git a/mailhops/chrome/content/images/flags/md.png b/mailhops/chrome/content/images/flags/md.png
new file mode 100644
index 0000000..4e92c18
Binary files /dev/null and b/mailhops/chrome/content/images/flags/md.png differ
diff --git a/mailhops/chrome/content/images/flags/me.png b/mailhops/chrome/content/images/flags/me.png
new file mode 100644
index 0000000..ac72535
Binary files /dev/null and b/mailhops/chrome/content/images/flags/me.png differ
diff --git a/mailhops/chrome/content/images/flags/mg.png b/mailhops/chrome/content/images/flags/mg.png
new file mode 100644
index 0000000..d2715b3
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mg.png differ
diff --git a/mailhops/chrome/content/images/flags/mh.png b/mailhops/chrome/content/images/flags/mh.png
new file mode 100644
index 0000000..fb523a8
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mh.png differ
diff --git a/mailhops/chrome/content/images/flags/mk.png b/mailhops/chrome/content/images/flags/mk.png
new file mode 100644
index 0000000..db173aa
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mk.png differ
diff --git a/mailhops/chrome/content/images/flags/ml.png b/mailhops/chrome/content/images/flags/ml.png
new file mode 100644
index 0000000..2cec8ba
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ml.png differ
diff --git a/mailhops/chrome/content/images/flags/mm.png b/mailhops/chrome/content/images/flags/mm.png
new file mode 100644
index 0000000..f464f67
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mm.png differ
diff --git a/mailhops/chrome/content/images/flags/mn.png b/mailhops/chrome/content/images/flags/mn.png
new file mode 100644
index 0000000..9396355
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mn.png differ
diff --git a/mailhops/chrome/content/images/flags/mo.png b/mailhops/chrome/content/images/flags/mo.png
new file mode 100644
index 0000000..deb801d
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mo.png differ
diff --git a/mailhops/chrome/content/images/flags/mp.png b/mailhops/chrome/content/images/flags/mp.png
new file mode 100644
index 0000000..298d588
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mp.png differ
diff --git a/mailhops/chrome/content/images/flags/mq.png b/mailhops/chrome/content/images/flags/mq.png
new file mode 100644
index 0000000..010143b
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mq.png differ
diff --git a/mailhops/chrome/content/images/flags/mr.png b/mailhops/chrome/content/images/flags/mr.png
new file mode 100644
index 0000000..319546b
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mr.png differ
diff --git a/mailhops/chrome/content/images/flags/ms.png b/mailhops/chrome/content/images/flags/ms.png
new file mode 100644
index 0000000..d4cbb43
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ms.png differ
diff --git a/mailhops/chrome/content/images/flags/mt.png b/mailhops/chrome/content/images/flags/mt.png
new file mode 100644
index 0000000..00af948
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mt.png differ
diff --git a/mailhops/chrome/content/images/flags/mu.png b/mailhops/chrome/content/images/flags/mu.png
new file mode 100644
index 0000000..b7fdce1
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mu.png differ
diff --git a/mailhops/chrome/content/images/flags/mv.png b/mailhops/chrome/content/images/flags/mv.png
new file mode 100644
index 0000000..5073d9e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mv.png differ
diff --git a/mailhops/chrome/content/images/flags/mw.png b/mailhops/chrome/content/images/flags/mw.png
new file mode 100644
index 0000000..13886e9
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mw.png differ
diff --git a/mailhops/chrome/content/images/flags/mx.png b/mailhops/chrome/content/images/flags/mx.png
new file mode 100644
index 0000000..5bc58ab
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mx.png differ
diff --git a/mailhops/chrome/content/images/flags/my.png b/mailhops/chrome/content/images/flags/my.png
new file mode 100644
index 0000000..9034cba
Binary files /dev/null and b/mailhops/chrome/content/images/flags/my.png differ
diff --git a/mailhops/chrome/content/images/flags/mz.png b/mailhops/chrome/content/images/flags/mz.png
new file mode 100644
index 0000000..76405e0
Binary files /dev/null and b/mailhops/chrome/content/images/flags/mz.png differ
diff --git a/mailhops/chrome/content/images/flags/na.png b/mailhops/chrome/content/images/flags/na.png
new file mode 100644
index 0000000..63358c6
Binary files /dev/null and b/mailhops/chrome/content/images/flags/na.png differ
diff --git a/mailhops/chrome/content/images/flags/nc.png b/mailhops/chrome/content/images/flags/nc.png
new file mode 100644
index 0000000..2cad283
Binary files /dev/null and b/mailhops/chrome/content/images/flags/nc.png differ
diff --git a/mailhops/chrome/content/images/flags/ne.png b/mailhops/chrome/content/images/flags/ne.png
new file mode 100644
index 0000000..d85f424
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ne.png differ
diff --git a/mailhops/chrome/content/images/flags/nf.png b/mailhops/chrome/content/images/flags/nf.png
new file mode 100644
index 0000000..f9bcdda
Binary files /dev/null and b/mailhops/chrome/content/images/flags/nf.png differ
diff --git a/mailhops/chrome/content/images/flags/ng.png b/mailhops/chrome/content/images/flags/ng.png
new file mode 100644
index 0000000..3eea2e0
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ng.png differ
diff --git a/mailhops/chrome/content/images/flags/ni.png b/mailhops/chrome/content/images/flags/ni.png
new file mode 100644
index 0000000..3969aaa
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ni.png differ
diff --git a/mailhops/chrome/content/images/flags/nl.png b/mailhops/chrome/content/images/flags/nl.png
new file mode 100644
index 0000000..fe44791
Binary files /dev/null and b/mailhops/chrome/content/images/flags/nl.png differ
diff --git a/mailhops/chrome/content/images/flags/no.png b/mailhops/chrome/content/images/flags/no.png
new file mode 100644
index 0000000..160b6b5
Binary files /dev/null and b/mailhops/chrome/content/images/flags/no.png differ
diff --git a/mailhops/chrome/content/images/flags/np.png b/mailhops/chrome/content/images/flags/np.png
new file mode 100644
index 0000000..aeb058b
Binary files /dev/null and b/mailhops/chrome/content/images/flags/np.png differ
diff --git a/mailhops/chrome/content/images/flags/nr.png b/mailhops/chrome/content/images/flags/nr.png
new file mode 100644
index 0000000..705fc33
Binary files /dev/null and b/mailhops/chrome/content/images/flags/nr.png differ
diff --git a/mailhops/chrome/content/images/flags/nu.png b/mailhops/chrome/content/images/flags/nu.png
new file mode 100644
index 0000000..c3ce4ae
Binary files /dev/null and b/mailhops/chrome/content/images/flags/nu.png differ
diff --git a/mailhops/chrome/content/images/flags/nz.png b/mailhops/chrome/content/images/flags/nz.png
new file mode 100644
index 0000000..10d6306
Binary files /dev/null and b/mailhops/chrome/content/images/flags/nz.png differ
diff --git a/mailhops/chrome/content/images/flags/om.png b/mailhops/chrome/content/images/flags/om.png
new file mode 100644
index 0000000..2ffba7e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/om.png differ
diff --git a/mailhops/chrome/content/images/flags/pa.png b/mailhops/chrome/content/images/flags/pa.png
new file mode 100644
index 0000000..9b2ee9a
Binary files /dev/null and b/mailhops/chrome/content/images/flags/pa.png differ
diff --git a/mailhops/chrome/content/images/flags/pe.png b/mailhops/chrome/content/images/flags/pe.png
new file mode 100644
index 0000000..62a0497
Binary files /dev/null and b/mailhops/chrome/content/images/flags/pe.png differ
diff --git a/mailhops/chrome/content/images/flags/pf.png b/mailhops/chrome/content/images/flags/pf.png
new file mode 100644
index 0000000..771a0f6
Binary files /dev/null and b/mailhops/chrome/content/images/flags/pf.png differ
diff --git a/mailhops/chrome/content/images/flags/pg.png b/mailhops/chrome/content/images/flags/pg.png
new file mode 100644
index 0000000..10d6233
Binary files /dev/null and b/mailhops/chrome/content/images/flags/pg.png differ
diff --git a/mailhops/chrome/content/images/flags/ph.png b/mailhops/chrome/content/images/flags/ph.png
new file mode 100644
index 0000000..b89e159
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ph.png differ
diff --git a/mailhops/chrome/content/images/flags/pk.png b/mailhops/chrome/content/images/flags/pk.png
new file mode 100644
index 0000000..e9df70c
Binary files /dev/null and b/mailhops/chrome/content/images/flags/pk.png differ
diff --git a/mailhops/chrome/content/images/flags/pl.png b/mailhops/chrome/content/images/flags/pl.png
new file mode 100644
index 0000000..d413d01
Binary files /dev/null and b/mailhops/chrome/content/images/flags/pl.png differ
diff --git a/mailhops/chrome/content/images/flags/pm.png b/mailhops/chrome/content/images/flags/pm.png
new file mode 100644
index 0000000..ba91d2c
Binary files /dev/null and b/mailhops/chrome/content/images/flags/pm.png differ
diff --git a/mailhops/chrome/content/images/flags/pn.png b/mailhops/chrome/content/images/flags/pn.png
new file mode 100644
index 0000000..aa9344f
Binary files /dev/null and b/mailhops/chrome/content/images/flags/pn.png differ
diff --git a/mailhops/chrome/content/images/flags/pr.png b/mailhops/chrome/content/images/flags/pr.png
new file mode 100644
index 0000000..82d9130
Binary files /dev/null and b/mailhops/chrome/content/images/flags/pr.png differ
diff --git a/mailhops/chrome/content/images/flags/ps.png b/mailhops/chrome/content/images/flags/ps.png
new file mode 100644
index 0000000..f5f5477
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ps.png differ
diff --git a/mailhops/chrome/content/images/flags/pt.png b/mailhops/chrome/content/images/flags/pt.png
new file mode 100644
index 0000000..ece7980
Binary files /dev/null and b/mailhops/chrome/content/images/flags/pt.png differ
diff --git a/mailhops/chrome/content/images/flags/pw.png b/mailhops/chrome/content/images/flags/pw.png
new file mode 100644
index 0000000..6178b25
Binary files /dev/null and b/mailhops/chrome/content/images/flags/pw.png differ
diff --git a/mailhops/chrome/content/images/flags/py.png b/mailhops/chrome/content/images/flags/py.png
new file mode 100644
index 0000000..cb8723c
Binary files /dev/null and b/mailhops/chrome/content/images/flags/py.png differ
diff --git a/mailhops/chrome/content/images/flags/qa.png b/mailhops/chrome/content/images/flags/qa.png
new file mode 100644
index 0000000..ed4c621
Binary files /dev/null and b/mailhops/chrome/content/images/flags/qa.png differ
diff --git a/mailhops/chrome/content/images/flags/re.png b/mailhops/chrome/content/images/flags/re.png
new file mode 100644
index 0000000..8332c4e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/re.png differ
diff --git a/mailhops/chrome/content/images/flags/ro.png b/mailhops/chrome/content/images/flags/ro.png
new file mode 100644
index 0000000..57e74a6
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ro.png differ
diff --git a/mailhops/chrome/content/images/flags/rs.png b/mailhops/chrome/content/images/flags/rs.png
new file mode 100644
index 0000000..9439a5b
Binary files /dev/null and b/mailhops/chrome/content/images/flags/rs.png differ
diff --git a/mailhops/chrome/content/images/flags/ru.png b/mailhops/chrome/content/images/flags/ru.png
new file mode 100644
index 0000000..47da421
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ru.png differ
diff --git a/mailhops/chrome/content/images/flags/rw.png b/mailhops/chrome/content/images/flags/rw.png
new file mode 100644
index 0000000..5356491
Binary files /dev/null and b/mailhops/chrome/content/images/flags/rw.png differ
diff --git a/mailhops/chrome/content/images/flags/sa.png b/mailhops/chrome/content/images/flags/sa.png
new file mode 100644
index 0000000..b4641c7
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sa.png differ
diff --git a/mailhops/chrome/content/images/flags/sb.png b/mailhops/chrome/content/images/flags/sb.png
new file mode 100644
index 0000000..a9937cc
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sb.png differ
diff --git a/mailhops/chrome/content/images/flags/sc.png b/mailhops/chrome/content/images/flags/sc.png
new file mode 100644
index 0000000..39ee371
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sc.png differ
diff --git a/mailhops/chrome/content/images/flags/scotland.png b/mailhops/chrome/content/images/flags/scotland.png
new file mode 100644
index 0000000..a0e57b4
Binary files /dev/null and b/mailhops/chrome/content/images/flags/scotland.png differ
diff --git a/mailhops/chrome/content/images/flags/sd.png b/mailhops/chrome/content/images/flags/sd.png
new file mode 100644
index 0000000..eaab69e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sd.png differ
diff --git a/mailhops/chrome/content/images/flags/se.png b/mailhops/chrome/content/images/flags/se.png
new file mode 100644
index 0000000..1994653
Binary files /dev/null and b/mailhops/chrome/content/images/flags/se.png differ
diff --git a/mailhops/chrome/content/images/flags/sg.png b/mailhops/chrome/content/images/flags/sg.png
new file mode 100644
index 0000000..dd34d61
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sg.png differ
diff --git a/mailhops/chrome/content/images/flags/sh.png b/mailhops/chrome/content/images/flags/sh.png
new file mode 100644
index 0000000..4b1d2a2
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sh.png differ
diff --git a/mailhops/chrome/content/images/flags/si.png b/mailhops/chrome/content/images/flags/si.png
new file mode 100644
index 0000000..bb1476f
Binary files /dev/null and b/mailhops/chrome/content/images/flags/si.png differ
diff --git a/mailhops/chrome/content/images/flags/sj.png b/mailhops/chrome/content/images/flags/sj.png
new file mode 100644
index 0000000..160b6b5
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sj.png differ
diff --git a/mailhops/chrome/content/images/flags/sk.png b/mailhops/chrome/content/images/flags/sk.png
new file mode 100644
index 0000000..7ccbc82
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sk.png differ
diff --git a/mailhops/chrome/content/images/flags/sl.png b/mailhops/chrome/content/images/flags/sl.png
new file mode 100644
index 0000000..12d812d
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sl.png differ
diff --git a/mailhops/chrome/content/images/flags/sm.png b/mailhops/chrome/content/images/flags/sm.png
new file mode 100644
index 0000000..3df2fdc
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sm.png differ
diff --git a/mailhops/chrome/content/images/flags/sn.png b/mailhops/chrome/content/images/flags/sn.png
new file mode 100644
index 0000000..eabb71d
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sn.png differ
diff --git a/mailhops/chrome/content/images/flags/so.png b/mailhops/chrome/content/images/flags/so.png
new file mode 100644
index 0000000..4a1ea4b
Binary files /dev/null and b/mailhops/chrome/content/images/flags/so.png differ
diff --git a/mailhops/chrome/content/images/flags/sr.png b/mailhops/chrome/content/images/flags/sr.png
new file mode 100644
index 0000000..5eff927
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sr.png differ
diff --git a/mailhops/chrome/content/images/flags/st.png b/mailhops/chrome/content/images/flags/st.png
new file mode 100644
index 0000000..2978557
Binary files /dev/null and b/mailhops/chrome/content/images/flags/st.png differ
diff --git a/mailhops/chrome/content/images/flags/sv.png b/mailhops/chrome/content/images/flags/sv.png
new file mode 100644
index 0000000..2498799
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sv.png differ
diff --git a/mailhops/chrome/content/images/flags/sy.png b/mailhops/chrome/content/images/flags/sy.png
new file mode 100644
index 0000000..f5ce30d
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sy.png differ
diff --git a/mailhops/chrome/content/images/flags/sz.png b/mailhops/chrome/content/images/flags/sz.png
new file mode 100644
index 0000000..914ee86
Binary files /dev/null and b/mailhops/chrome/content/images/flags/sz.png differ
diff --git a/mailhops/chrome/content/images/flags/tc.png b/mailhops/chrome/content/images/flags/tc.png
new file mode 100644
index 0000000..8fc1156
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tc.png differ
diff --git a/mailhops/chrome/content/images/flags/td.png b/mailhops/chrome/content/images/flags/td.png
new file mode 100644
index 0000000..667f21f
Binary files /dev/null and b/mailhops/chrome/content/images/flags/td.png differ
diff --git a/mailhops/chrome/content/images/flags/tf.png b/mailhops/chrome/content/images/flags/tf.png
new file mode 100644
index 0000000..80529a4
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tf.png differ
diff --git a/mailhops/chrome/content/images/flags/tg.png b/mailhops/chrome/content/images/flags/tg.png
new file mode 100644
index 0000000..3aa00ad
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tg.png differ
diff --git a/mailhops/chrome/content/images/flags/th.png b/mailhops/chrome/content/images/flags/th.png
new file mode 100644
index 0000000..dd8ba91
Binary files /dev/null and b/mailhops/chrome/content/images/flags/th.png differ
diff --git a/mailhops/chrome/content/images/flags/tj.png b/mailhops/chrome/content/images/flags/tj.png
new file mode 100644
index 0000000..617bf64
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tj.png differ
diff --git a/mailhops/chrome/content/images/flags/tk.png b/mailhops/chrome/content/images/flags/tk.png
new file mode 100644
index 0000000..67b8c8c
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tk.png differ
diff --git a/mailhops/chrome/content/images/flags/tl.png b/mailhops/chrome/content/images/flags/tl.png
new file mode 100644
index 0000000..77da181
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tl.png differ
diff --git a/mailhops/chrome/content/images/flags/tm.png b/mailhops/chrome/content/images/flags/tm.png
new file mode 100644
index 0000000..828020e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tm.png differ
diff --git a/mailhops/chrome/content/images/flags/tn.png b/mailhops/chrome/content/images/flags/tn.png
new file mode 100644
index 0000000..183cdd3
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tn.png differ
diff --git a/mailhops/chrome/content/images/flags/to.png b/mailhops/chrome/content/images/flags/to.png
new file mode 100644
index 0000000..f89b8ba
Binary files /dev/null and b/mailhops/chrome/content/images/flags/to.png differ
diff --git a/mailhops/chrome/content/images/flags/tr.png b/mailhops/chrome/content/images/flags/tr.png
new file mode 100644
index 0000000..be32f77
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tr.png differ
diff --git a/mailhops/chrome/content/images/flags/tt.png b/mailhops/chrome/content/images/flags/tt.png
new file mode 100644
index 0000000..2a11c1e
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tt.png differ
diff --git a/mailhops/chrome/content/images/flags/tv.png b/mailhops/chrome/content/images/flags/tv.png
new file mode 100644
index 0000000..28274c5
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tv.png differ
diff --git a/mailhops/chrome/content/images/flags/tw.png b/mailhops/chrome/content/images/flags/tw.png
new file mode 100644
index 0000000..f31c654
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tw.png differ
diff --git a/mailhops/chrome/content/images/flags/tz.png b/mailhops/chrome/content/images/flags/tz.png
new file mode 100644
index 0000000..c00ff79
Binary files /dev/null and b/mailhops/chrome/content/images/flags/tz.png differ
diff --git a/mailhops/chrome/content/images/flags/ua.png b/mailhops/chrome/content/images/flags/ua.png
new file mode 100644
index 0000000..09563a2
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ua.png differ
diff --git a/mailhops/chrome/content/images/flags/ug.png b/mailhops/chrome/content/images/flags/ug.png
new file mode 100644
index 0000000..33f4aff
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ug.png differ
diff --git a/mailhops/chrome/content/images/flags/um.png b/mailhops/chrome/content/images/flags/um.png
new file mode 100644
index 0000000..c1dd965
Binary files /dev/null and b/mailhops/chrome/content/images/flags/um.png differ
diff --git a/mailhops/chrome/content/images/flags/us.png b/mailhops/chrome/content/images/flags/us.png
new file mode 100644
index 0000000..10f451f
Binary files /dev/null and b/mailhops/chrome/content/images/flags/us.png differ
diff --git a/mailhops/chrome/content/images/flags/uy.png b/mailhops/chrome/content/images/flags/uy.png
new file mode 100644
index 0000000..31d948a
Binary files /dev/null and b/mailhops/chrome/content/images/flags/uy.png differ
diff --git a/mailhops/chrome/content/images/flags/uz.png b/mailhops/chrome/content/images/flags/uz.png
new file mode 100644
index 0000000..fef5dc1
Binary files /dev/null and b/mailhops/chrome/content/images/flags/uz.png differ
diff --git a/mailhops/chrome/content/images/flags/va.png b/mailhops/chrome/content/images/flags/va.png
new file mode 100644
index 0000000..b31eaf2
Binary files /dev/null and b/mailhops/chrome/content/images/flags/va.png differ
diff --git a/mailhops/chrome/content/images/flags/vc.png b/mailhops/chrome/content/images/flags/vc.png
new file mode 100644
index 0000000..8fa17b0
Binary files /dev/null and b/mailhops/chrome/content/images/flags/vc.png differ
diff --git a/mailhops/chrome/content/images/flags/ve.png b/mailhops/chrome/content/images/flags/ve.png
new file mode 100644
index 0000000..00c90f9
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ve.png differ
diff --git a/mailhops/chrome/content/images/flags/vg.png b/mailhops/chrome/content/images/flags/vg.png
new file mode 100644
index 0000000..4156907
Binary files /dev/null and b/mailhops/chrome/content/images/flags/vg.png differ
diff --git a/mailhops/chrome/content/images/flags/vi.png b/mailhops/chrome/content/images/flags/vi.png
new file mode 100644
index 0000000..ed26915
Binary files /dev/null and b/mailhops/chrome/content/images/flags/vi.png differ
diff --git a/mailhops/chrome/content/images/flags/vn.png b/mailhops/chrome/content/images/flags/vn.png
new file mode 100644
index 0000000..ec7cd48
Binary files /dev/null and b/mailhops/chrome/content/images/flags/vn.png differ
diff --git a/mailhops/chrome/content/images/flags/vu.png b/mailhops/chrome/content/images/flags/vu.png
new file mode 100644
index 0000000..b3397bc
Binary files /dev/null and b/mailhops/chrome/content/images/flags/vu.png differ
diff --git a/mailhops/chrome/content/images/flags/wales.png b/mailhops/chrome/content/images/flags/wales.png
new file mode 100644
index 0000000..e0d7cee
Binary files /dev/null and b/mailhops/chrome/content/images/flags/wales.png differ
diff --git a/mailhops/chrome/content/images/flags/wf.png b/mailhops/chrome/content/images/flags/wf.png
new file mode 100644
index 0000000..9f95587
Binary files /dev/null and b/mailhops/chrome/content/images/flags/wf.png differ
diff --git a/mailhops/chrome/content/images/flags/ws.png b/mailhops/chrome/content/images/flags/ws.png
new file mode 100644
index 0000000..c169508
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ws.png differ
diff --git a/mailhops/chrome/content/images/flags/ye.png b/mailhops/chrome/content/images/flags/ye.png
new file mode 100644
index 0000000..468dfad
Binary files /dev/null and b/mailhops/chrome/content/images/flags/ye.png differ
diff --git a/mailhops/chrome/content/images/flags/yt.png b/mailhops/chrome/content/images/flags/yt.png
new file mode 100644
index 0000000..c298f37
Binary files /dev/null and b/mailhops/chrome/content/images/flags/yt.png differ
diff --git a/mailhops/chrome/content/images/flags/za.png b/mailhops/chrome/content/images/flags/za.png
new file mode 100644
index 0000000..57c58e2
Binary files /dev/null and b/mailhops/chrome/content/images/flags/za.png differ
diff --git a/mailhops/chrome/content/images/flags/zm.png b/mailhops/chrome/content/images/flags/zm.png
new file mode 100644
index 0000000..c25b07b
Binary files /dev/null and b/mailhops/chrome/content/images/flags/zm.png differ
diff --git a/mailhops/chrome/content/images/flags/zw.png b/mailhops/chrome/content/images/flags/zw.png
new file mode 100644
index 0000000..53c9725
Binary files /dev/null and b/mailhops/chrome/content/images/flags/zw.png differ
diff --git a/mailhops/chrome/content/images/help.png b/mailhops/chrome/content/images/help.png
new file mode 100644
index 0000000..5c87017
Binary files /dev/null and b/mailhops/chrome/content/images/help.png differ
diff --git a/mailhops/chrome/content/images/hop.svg b/mailhops/chrome/content/images/hop.svg
new file mode 100644
index 0000000..53d143b
--- /dev/null
+++ b/mailhops/chrome/content/images/hop.svg
@@ -0,0 +1,126 @@
+
+
+
+
\ No newline at end of file
diff --git a/mailhops/chrome/content/images/host.png b/mailhops/chrome/content/images/host.png
new file mode 100644
index 0000000..720a237
Binary files /dev/null and b/mailhops/chrome/content/images/host.png differ
diff --git a/mailhops/chrome/content/images/info.png b/mailhops/chrome/content/images/info.png
new file mode 100644
index 0000000..12cd1ae
Binary files /dev/null and b/mailhops/chrome/content/images/info.png differ
diff --git a/mailhops/chrome/content/images/ipv6.svg b/mailhops/chrome/content/images/ipv6.svg
new file mode 100644
index 0000000..aea75bd
--- /dev/null
+++ b/mailhops/chrome/content/images/ipv6.svg
@@ -0,0 +1,42 @@
+
+
+
+
diff --git a/mailhops/chrome/content/images/loader.gif b/mailhops/chrome/content/images/loader.gif
new file mode 100644
index 0000000..49b6d85
Binary files /dev/null and b/mailhops/chrome/content/images/loader.gif differ
diff --git a/mailhops/chrome/content/images/local.png b/mailhops/chrome/content/images/local.png
new file mode 100644
index 0000000..ca779f3
Binary files /dev/null and b/mailhops/chrome/content/images/local.png differ
diff --git a/mailhops/chrome/content/images/mailhops-logo.png b/mailhops/chrome/content/images/mailhops-logo.png
new file mode 100644
index 0000000..412803b
Binary files /dev/null and b/mailhops/chrome/content/images/mailhops-logo.png differ
diff --git a/mailhops/chrome/content/images/mailhops-logo.svg b/mailhops/chrome/content/images/mailhops-logo.svg
new file mode 100644
index 0000000..df29dcb
--- /dev/null
+++ b/mailhops/chrome/content/images/mailhops-logo.svg
@@ -0,0 +1,128 @@
+
+
+
+
\ No newline at end of file
diff --git a/mailhops/chrome/content/images/mailhops32.png b/mailhops/chrome/content/images/mailhops32.png
new file mode 100644
index 0000000..894654b
Binary files /dev/null and b/mailhops/chrome/content/images/mailhops32.png differ
diff --git a/mailhops/chrome/content/images/refresh.png b/mailhops/chrome/content/images/refresh.png
new file mode 100644
index 0000000..ac99923
Binary files /dev/null and b/mailhops/chrome/content/images/refresh.png differ
diff --git a/mailhops/chrome/content/images/w3w.png b/mailhops/chrome/content/images/w3w.png
new file mode 100644
index 0000000..9ceef7e
Binary files /dev/null and b/mailhops/chrome/content/images/w3w.png differ
diff --git a/mailhops/chrome/content/images/weather/clear.png b/mailhops/chrome/content/images/weather/clear.png
new file mode 100644
index 0000000..c86a9a9
Binary files /dev/null and b/mailhops/chrome/content/images/weather/clear.png differ
diff --git a/mailhops/chrome/content/images/weather/clear_night.png b/mailhops/chrome/content/images/weather/clear_night.png
new file mode 100644
index 0000000..6b9e48d
Binary files /dev/null and b/mailhops/chrome/content/images/weather/clear_night.png differ
diff --git a/mailhops/chrome/content/images/weather/clouds.png b/mailhops/chrome/content/images/weather/clouds.png
new file mode 100644
index 0000000..3f73eaa
Binary files /dev/null and b/mailhops/chrome/content/images/weather/clouds.png differ
diff --git a/mailhops/chrome/content/images/weather/cloudy.png b/mailhops/chrome/content/images/weather/cloudy.png
new file mode 100644
index 0000000..5856e1d
Binary files /dev/null and b/mailhops/chrome/content/images/weather/cloudy.png differ
diff --git a/mailhops/chrome/content/images/weather/cloudy_night.png b/mailhops/chrome/content/images/weather/cloudy_night.png
new file mode 100644
index 0000000..5c86dd4
Binary files /dev/null and b/mailhops/chrome/content/images/weather/cloudy_night.png differ
diff --git a/mailhops/chrome/content/images/weather/lightning.png b/mailhops/chrome/content/images/weather/lightning.png
new file mode 100644
index 0000000..1d42b36
Binary files /dev/null and b/mailhops/chrome/content/images/weather/lightning.png differ
diff --git a/mailhops/chrome/content/images/weather/rain.png b/mailhops/chrome/content/images/weather/rain.png
new file mode 100644
index 0000000..cb3d54d
Binary files /dev/null and b/mailhops/chrome/content/images/weather/rain.png differ
diff --git a/mailhops/chrome/content/images/weather/snow.png b/mailhops/chrome/content/images/weather/snow.png
new file mode 100644
index 0000000..45bbdf1
Binary files /dev/null and b/mailhops/chrome/content/images/weather/snow.png differ
diff --git a/mailhops/chrome/content/images/weather/sun.png b/mailhops/chrome/content/images/weather/sun.png
new file mode 100644
index 0000000..0156c26
Binary files /dev/null and b/mailhops/chrome/content/images/weather/sun.png differ
diff --git a/mailhops/chrome/content/mailhops-1-utils.js b/mailhops/chrome/content/mailhops-1-utils.js
new file mode 100644
index 0000000..a2302c5
--- /dev/null
+++ b/mailhops/chrome/content/mailhops-1-utils.js
@@ -0,0 +1,213 @@
+var mailHopsUtils = {
+
+countries: ["ad","ae","af","ag","ai","al","am","an","ao","ar","as","at","au","aw","ax","az","ba","bb","bd","be","bf","bg","bh","bi","bj","bm","bn","bo","br","bs","bt","bv","bw","by","bz","ca","catalonia","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cs","cu","cv","cx","cy","cz","de","dj","dk","dm","do","dz","ec","ee","eg","eh","england","er","es","et","europeanunion","fam","fi","fj","fk","fm","fo","fr","ga","gb","gd","ge","gf","gh","gi","gl","gm","gn","gp","gq","gr","gs","gt","gu","gw","gy","hk","hm","hn","hr","ht","hu","id","ie","il","in","io","iq","ir","is","it","jm","jo","jp","ke","kg","kh","ki","km","kn","kp","kr","kw","ky","kz","la","lb","lc","li","lk","lr","ls","lt","lu","lv","ly","ma","mc","md","me","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mt","mu","mv","mw","mx","my","mz","na","nc","ne","nf","ng","ni","nl","no","np","nr","nu","nz","om","pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps","pt","pw","py","qa","re","ro","rs","ru","rw","sa","sb","sc","scotland","sd","se","sg","sh","si","sj","sk","sl","sm","sn","so","sr","st","sv","sy","sz","tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tr","tt","tv","tw","tz","ua","ug","um","us","uy","uz","va","vc","ve","vg","vi","vn","vu","wales","wf","ws","ye","yt","za","zm","zw"],
+
+dkim: function(result){
+
+ switch(result){
+
+ case 'none':
+ return 'The message was not signed.';
+
+ case 'pass':
+ return 'The message was signed, the signature or signatures were acceptable to the verifier, and the signature(s) passed verification tests.';
+
+ case 'fail':
+ case 'hardfail':
+ return 'The message was signed and the signature or signatures were acceptable to the verifier, but they failed the verification test(s).';
+
+ case 'policy':
+ return 'The message was signed but the signature or signatures were not acceptable to the verifier.';
+
+ case 'neutral':
+ return 'The message was signed but the signature or signatures contained syntax errors or were not otherwise able to be processed. This result SHOULD also be used for other failures not covered elsewhere in this list.';
+
+ case 'temperror':
+ return 'The message could not be verified due to some error that is likely transient in nature, such as a temporary inability to retrieve a public key. A later attempt may produce a final result.';
+
+ case 'permerror':
+ return 'The message could not be verified due to some error that is unrecoverable, such as a required header field being absent. A later attempt is unlikely to produce a final result.';
+
+ default:
+ return '';
+ }
+},
+
+spf: function(result){
+
+switch(result){
+
+ case 'none':
+ return 'No policy records were published at the sender\'s DNS domain.';
+
+ case 'neutral':
+ return 'The sender\'s ADMD has asserted that it cannot or does not want to assert whether or not the sending IP address is authorized to send mail using the sender\'s DNS domain.';
+
+ case 'pass':
+ return 'The client is authorized by the sender\'s ADMD to inject or relay mail on behalf of the sender\'s DNS domain.';
+
+ case 'policy':
+ return 'The client is authorized to inject or relay mail on behalf of the sender\'s DNS domain according to the authentication method\'s algorithm, but local policy dictates that the result is unacceptable.'
+
+ case 'hardfail':
+ return 'This client is explicitly not authorized to inject or relay mail using the sender\'s DNS domain.';
+
+ case 'softfail':
+ return 'The sender\'s ADMD believes the client was not authorized to inject or relay mail using the sender\'s DNS domain, but is unwilling to make a strong assertion to that effect.';
+
+ case 'temperror':
+ return 'The message could not be verified due to some error that is likely transient in nature, such as a temporary inability to retrieve a policy record from DNS. A later attempt may produce a final result.';
+
+ case 'permerror':
+ return 'The message could not be verified due to some error that is unrecoverable, such as a required header field being absent or a syntax error in a retrieved DNS TXT record. A later attempt is unlikely to produce a final result.';
+
+ default:
+ return '';
+ }
+},
+
+dnsbl: function(result,abbr){
+
+ switch(result){
+
+ case '127.0.0.2':
+ case '127.0.0.3':
+ if(abbr)
+ return 'SBL';
+ else
+ return 'Static UBE sources, verified spam services and ROKSO spammers.';
+
+ case '127.0.0.4':
+ case '127.0.0.5':
+ case '127.0.0.6':
+ case '127.0.0.7':
+ if(abbr)
+ return 'XBL';
+ else
+ return 'Illegal 3rd party exploits, including proxies, worms and trojan exploits.';
+
+ case '127.0.0.10':
+ case '127.0.0.11':
+ if(abbr)
+ return 'PBL';
+ else
+ return 'IP ranges which should not be delivering unauthenticated SMTP email.';
+
+ default:
+ return '';
+ }
+},
+
+addCommas: function(nStr){
+ nStr += '';
+ var x = nStr.split('.');
+ var x1 = x[0];
+ var x2 = x.length > 1 ? '.' + x[1] : '';
+ var rgx = /(\d+)(\d{3})/;
+ while (rgx.test(x1)) {
+ x1 = x1.replace(rgx, '$1' + ',' + '$2');
+ }
+ return x1 + x2;
+},
+
+launchExternalURL: function(url){
+ var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance().QueryInterface(Components.interfaces.nsIMessenger);
+ messenger.launchExternalURL(url);
+},
+
+launchWhoIs: function(ip){
+ this.launchExternalURL('https://www.mailhops.com/whois/' + ip);
+},
+
+launchSpamHausURL: function(ip){
+ this.launchExternalURL('http://www.spamhaus.org/query/bl?ip=' + ip);
+},
+
+launchMap: function(route,options){
+
+ if(route != ''){
+ var lookupURL=this.getAPIUrl(options)+'/map/?'+this.getAPIUrlParams(options)+'&l='+options.lan+'&u='+options.unit+'&r='+String(route);
+
+ if(options.fkey != '')
+ lookupURL += '&fkey='+options.fkey;
+
+ if(options.map_provider)
+ lookupURL += '&mp='+options.map_provider;
+
+ window.openDialog("chrome://mailhops/content/mailhopsMap.xul","MailHops",'toolbar=no,location=no,directories=no,menubar=yes,scrollbars=yes,close=yes,width=1024,height=768,resizable=yes', {src: lookupURL});
+ }
+},
+
+getAPIUrl: function(options){
+ return options.api_http+options.api_host+'/v2';
+},
+
+getAPIUrlParams: function(options){
+ if(!!options.api_key && options.api_key != '')
+ return 'app='+options.version+'&api_key='+options.api_key;
+ return 'app='+options.version;
+},
+
+getSecureTrans: function(ip, message){
+ for(var i=0; i= 4 && hr <= 18)?'day':'night';
+ return 'chrome://mailhops/content/images/weather/'+forecast_icons[icon][time]+'.png';
+},
+
+getDistance: function(from, to, unit) {
+ if(!from || !to || !from['lat'] || !to['lat'])
+ return 0;
+
+ var lat = parseFloat(from['lat']);
+ var lon1 = parseFloat(from['lng']);
+ var lat2 = parseFloat(to['lat']);
+ var lon2 = parseFloat(to['lng']);
+ unit = unit || 'mi';//mi or km
+
+ lat *= (Math.PI/180);
+ lon1 *= (Math.PI/180);
+ lat2 *= (Math.PI/180);
+ lon2 *= (Math.PI/180);
+
+ var dist = 2*Math.asin(Math.sqrt( Math.pow((Math.sin((lat-lat2)/2)),2) + Math.cos(lat)*Math.cos(lat2)*Math.pow((Math.sin((lon1-lon2)/2)),2))) * 6378.137;
+
+ if (unit == 'mi') {
+ dist = (dist / 1.609344);
+ }
+ return dist;
+ },
+
+ getOriginatingCountryCode: function(route) {
+ if(route && route.length){
+ for(var r=0; r','');
+ if(href.indexOf('mailto:')!=-1){
+ if(href.toLowerCase().indexOf('subject=')==-1){
+ if(href.indexOf('?')==-1)
+ href+='?subject=Unsubscribe';
+ else
+ href+='&subject=Unsubscribe';
+ }
+ }
+ this.mailhopsUnsubscribe.setAttribute('href',href);
+ }
+ }
+ }
+ },
+
+ auth: function( header_xmailer, header_useragent, header_xmimeole, header_auth, header_spf ){
+ //SPF
+ if(header_spf){
+ header_spf=header_spf.replace(/^\s+/,"");
+ var headerSPFArr=header_spf.split(' ');
+ this.mailhopsDataPaneSPF.setAttribute('value','SPF: '+headerSPFArr[0]);
+ this.mailhopsDataPaneSPF.style.backgroundImage = "url('chrome://mailhops/content/images/auth/"+headerSPFArr[0]+".png')";
+ this.mailhopsDataPaneSPF.setAttribute('tooltiptext',header_spf+'\n'+mailHopsUtils.spf(headerSPFArr[0]));
+ this.mailhopsDataPaneSPF.style.display='block';
+ } else {
+ this.mailhopsDataPaneSPF.style.display='none';
+ }
+ //Authentication-Results
+ //http://tools.ietf.org/html/rfc5451
+ if(header_auth){
+ var headerAuthArr=header_auth.split(';');
+ var dkim_result;
+ var spf_result;
+ for(var h=0;h 0)
+ distanceText = mailHopsUtils.addCommas(Math.round(response.distance.kilometers))+' km traveled';
+ else if(response.distance.miles > 0)
+ distanceText = mailHopsUtils.addCommas(Math.round(response.distance.miles))+' mi traveled';
+ } else if(displayText=='')
+ displayText = ' Local message.';
+ }
+
+ if(!!message.time && message.time >= 0){
+ message.time = message.time/1000;
+ if(message.time < 60)
+ distanceText += ' in '+message.time+' sec.';
+ else if(message.time < 3600) //something is wrong if it takes this long
+ distanceText += ' in '+Math.round(message.time/60)+' min.';
+ else //something is wrong if it takes this long
+ distanceText += ' in '+Math.round(message.time/60/60)+' hr.';
+ }
+
+ if(header_route)
+ this.resultText.setAttribute("data-route", header_route);
+ else
+ this.resultText.removeAttribute("data-route");
+
+ this.resultText.setAttribute('value', displayText+' ( '+distanceText+' )');
+ this.resultText.style.backgroundImage = "url('"+image+"')";
+
+ if(meta && meta.message){
+ this.mailHopsAccountMessage.style.display = 'inline';
+ if(meta.message.text)
+ this.mailHopsAccountMessage.value = meta.message.text;
+ if(meta.message.url)
+ this.mailHopsAccountMessage.setAttribute('href', meta.message.url);
+ } else {
+ this.mailHopsAccountMessage.style.display = 'none';
+ }
+ }, //end route
+
+ toggleMailHopsBar: function(show){
+ if(show && this.mhBox.style.display == 'none')
+ this.mhBox.style.display = '';
+ else if(!show && this.mhBox.style.display == '')
+ this.mhBox.style.display = 'none';
+ }
+};
diff --git a/mailhops/chrome/content/mailhops-3.js b/mailhops/chrome/content/mailhops-3.js
new file mode 100644
index 0000000..975ba58
--- /dev/null
+++ b/mailhops/chrome/content/mailhops-3.js
@@ -0,0 +1,513 @@
+/*
+* @author: Andrew Van Tassel
+* @email: andrew@andrewvantassel.com
+* @website: http://mailhops.com
+*/
+
+var mailHops = {
+ msgURI: null,
+ isLoaded: false,
+ options: {
+ 'version':'MailHops Plugin 3.6.8',
+ 'lan':'en',
+ 'unit':'mi',
+ 'api_http':'https://',
+ 'api_host':'api.mailhops.com',
+ 'debug':false,
+ 'hide_compact':false,
+ 'bar_color': '#5E7A9B',
+ 'font_color': '#ffffff',
+ 'font_size': '14px',
+ 'country_tag':false,
+ 'travel_time_junk':false,
+ 'country_filter':[]
+ },
+ message: {
+ secure:[]
+ ,time: null
+ }
+};
+
+mailHops.LOG = function(msg) {
+ if(!mailHops.options.debug)
+ return;
+ var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
+ consoleService.logStringMessage('MailHops: '+msg);
+};
+
+mailHops.init = function() {
+ //load preferences
+ mailHops.loadPref();
+
+ document.getElementById("mailhopsLogo").addEventListener("click", function () {
+ window.openDialog("chrome://mailhops/content/preferences.xul","","chrome, dialog, modal, centerscreen").focus();
+ });
+
+ document.getElementById("mailhopsDataPaneRefresh").addEventListener("click", function () {
+ mailHops.refreshCache();
+ });
+
+ mailHops.isLoaded = true;
+
+};
+
+mailHops.loadPref = function(reload)
+{
+ mailHops.LOG('load MailHops prefs');
+ //get preferences
+ mailHops.options.lan = mailHops.getCharPref('mail.mailHops.lang','en');
+ mailHops.options.unit = mailHops.getCharPref('mail.mailHops.unit','mi');
+ mailHops.options.fkey = mailHops.getCharPref('mail.mailHops.fkey','');//forecast.io api_key
+
+ //Display
+ mailHops.options.bar_color = mailHops.getCharPref('mail.mailHops.bar_color','#5E7A9B');
+
+ mailHops.options.font_color = mailHops.getCharPref('mail.mailHops.font_color','#ffffff');
+
+ mailHops.options.font_size = mailHops.getCharPref('mail.mailHops.font_size','14px');
+
+ mailHops.options.debug = mailHops.getCharPref('mail.mailHops.debug','false')=='true'?true:false;
+
+ mailHops.options.hide_compact = mailHops.getCharPref('mail.mailHops.hide_compact','false')=='true'?true:false;
+
+ mailHops.options.api_host = mailHops.getCharPref('mail.mailHops.api_host','api.mailhops.com');
+
+ mailHops.options.api_http = mailHops.getCharPref('mail.mailHops.api_http','https://');
+
+ mailHops.options.api_key = mailHops.getCharPref('mail.mailHops.api_key','');
+
+ mailHops.options.map_provider = mailHops.getCharPref('mail.mailHops.map_provider','OpenStreetMap.Mapnik');
+
+ mailHops.options.country_tag = mailHops.getCharPref('mail.mailHops.country_tag','false')=='true'?true:false;
+
+ mailHops.options.travel_time_junk = mailHops.getCharPref('mail.mailHops.travel_time_junk','false')=='true'?true:false;
+
+ mailHops.options.country_filter = mailHops.getCharPref('mail.mailHops.country_filter',[]);
+
+ //init display
+ mailHopsDisplay.init( mailHops.options, reload );
+};
+
+mailHops.StreamListener =
+{
+ content: "" ,
+ found: false ,
+ onDataAvailable: function ( request, inputStream, offset, count )
+ {
+ try {
+ var sis = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance ( Components.interfaces.nsIScriptableInputStream ) ;
+ sis.init( inputStream ) ;
+
+ if( !this.found )
+ {
+ this.content += sis.read ( count ) ;
+ this.content = this.content.replace ( /\r/g , "" ) ;
+ var pos = this.content.indexOf ( "\n\n" ) ;
+
+ if ( pos > -1 )
+ {
+ // last header line must end with LF -> pos+1 !!!
+ this.content = this.content.substr ( 0 , pos + 1 ) ;
+ this.found = true ;
+ }
+ }
+ } catch(e) {
+ //failed to read input stream
+ mailHops.LOG('StreamListener Error: '+JSON.stringify(e));
+ }
+ },
+ onStartRequest: function ( request )
+ {
+ this.content = "" ;
+ this.found = false ;
+ },
+ onStopRequest: function ( aRequest , aStatusCode )
+ {
+ mailHops.headers = Components.classes["@mozilla.org/messenger/mimeheaders;1"].createInstance ( Components.interfaces.nsIMimeHeaders ) ;
+ mailHops.headers.initialize(this.content, this.content.length);
+ mailHops.headerData = this.content;
+ console.log(this.content);
+ mailHops.getRoute() ;
+ }
+};
+
+/**
+* loop through the header, find out if we have received-from headers
+*/
+mailHops.loadHeaderData = function() {
+
+ if(!!mailHops.options.hide_compact){
+ // CompactHeader toggle header logic
+ var compactHeadersView = document.getElementById('CompactHeader_collapsedHeaderView');
+ if(!!compactHeadersView){
+ if(compactHeadersView.collapsed===true){
+ mailHopsDisplay.toggleMailHopsBar(true);
+ } else if(compactHeadersView.collapsed===false){
+ mailHopsDisplay.toggleMailHopsBar(false);
+ return;
+ }
+ }
+ }
+
+ var msgURI = null ;
+
+ if ( gDBView ){
+ msgURI = gDBView.URIForFirstSelectedMessage;
+ }
+ if ( msgURI == null ){
+ return;
+ }
+ mailHops.msgURI = msgURI;
+ var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance ( Components.interfaces.nsIMessenger ) ;
+ var msgService = messenger.messageServiceFromURI ( msgURI ) ;
+ msgService.CopyMessage ( msgURI , mailHops.StreamListener , false , null , msgWindow , {} ) ;
+};
+
+mailHops.getRoute = function(){
+ //IP regex
+ var regexIp=/(1\d{0,2}|2(?:[0-4]\d{0,1}|[6789]|5[0-5]?)?|[3-9]\d?|0)\.(1\d{0,2}|2(?:[0-4]\d{0,1}|[6789]|5[0-5]?)?|[3-9]\d?|0)\.(1\d{0,2}|2(?:[0-4]\d{0,1}|[6789]|5[0-5]?)?|[3-9]\d?|0)\.(1\d{0,2}|2(?:[0-4]\d{0,1}|[6789]|5[0-5]?)?|[3-9]\d?|0)(\/(?:[012]\d?|3[012]?|[456789])){0,1}$/;
+ var regexAllIp = /(1\d{0,2}|2(?:[0-4]\d{0,1}|[6789]|5[0-5]?)?|[3-9]\d?|0)\.(1\d{0,2}|2(?:[0-4]\d{0,1}|[6789]|5[0-5]?)?|[3-9]\d?|0)\.(1\d{0,2}|2(?:[0-4]\d{0,1}|[6789]|5[0-5]?)?|[3-9]\d?|0)\.(1\d{0,2}|2(?:[0-4]\d{0,1}|[6789]|5[0-5]?)?|[3-9]\d?|0)(\/(?:[012]\d?|3[012]?|[456789])){0,1}/g;
+ var regexIPV6 = /s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*/g;
+
+ var headReceived = mailHops.headers.extractHeader ( "Received" , true );
+ var headDate = mailHops.headers.extractHeader ( "Date" , true );
+ var headXReceived = mailHops.headers.extractHeader ( "X-Received" , false );
+ var headXOrigIP = mailHops.headers.extractHeader ( "X-Originating-IP" , false );
+ // auth box
+ var headXMailer = mailHops.headers.extractHeader ( "X-Mailer" , false );
+ var headUserAgent = mailHops.headers.extractHeader ( "User-Agent" , false );
+ var headXMimeOLE = mailHops.headers.extractHeader ( "X-MimeOLE" , false );
+ var headReceivedSPF = mailHops.headers.extractHeader ( "Received-SPF" , false );
+ var headAuth = mailHops.headers.extractHeader ( "Authentication-Results" , false );
+ var headListUnsubscribe = mailHops.headers.extractHeader ( "List-Unsubscribe" , false ) ;
+
+ var all_ips = new Array();
+ var rline = '',firstDate=headDate,lastDate;
+ //empty secure and time
+ mailHops.message.secure = [];
+ mailHops.message.time = null;
+
+ mailHopsDisplay.lists( headListUnsubscribe );
+
+ mailHopsDisplay.auth( headXMailer, headUserAgent, headXMimeOLE, headAuth, headReceivedSPF );
+
+ //loop through the received headers and parse for IP addresses
+ if (!!headReceived){
+ var received_ips = new Array();
+ var headReceivedArr = headReceived.split('\n');
+ for( var h=0; h < headReceivedArr.length; h++ ) {
+ //build the received line by concat until semi-colon ; date/time
+ rline += headReceivedArr[h];
+ if(headReceivedArr[h].indexOf(';') === -1)
+ continue;
+ // first and last dates are used to calculate time traveled
+ if(rline.indexOf(';') !== -1){
+ if(!firstDate)
+ firstDate = rline.substring(rline.indexOf(';')+1).trim();
+ if(!lastDate)
+ lastDate = rline.substring(rline.indexOf(';')+1).trim();
+ }
+
+ // IPV6 check
+ rline = rline.replace(/\[IPv6\:/g,'[');
+ if(rline.match(regexIPV6)){
+ all_ips.unshift( rline.match(regexIPV6)[0] );
+ //reset the line
+ rline='';
+ continue;
+ }
+ // parse IPs out of Received line
+ received_ips = rline.match(regexAllIp);
+ //continue if no IPs found
+ if(!received_ips){
+ //reset the line
+ rline='';
+ continue;
+ }
+ //get unique IPs for each Received header
+ received_ips = received_ips.filter(function(item, pos) {
+ return received_ips.indexOf(item) === pos;
+ });
+ for( var r=received_ips.length; r >= 0 ; r-- ){
+ if(regexIp.test(received_ips[r]) && mailHops.testIP(received_ips[r],rline)){
+ all_ips.unshift( received_ips[r] );
+ }
+ }
+ //reset the line
+ rline='';
+ }
+ }
+
+ // parse dates
+ if(firstDate && firstDate.indexOf('(') !==- 1)
+ firstDate = firstDate.substring(0,firstDate.indexOf('(')).trim();
+ if(lastDate && lastDate.indexOf('(') !== -1)
+ lastDate = lastDate.substring(0,lastDate.indexOf('(')).trim();
+ if(firstDate && lastDate){
+ try {
+ firstDate = new Date(firstDate);
+ lastDate = new Date(lastDate);
+ mailHops.message.time = lastDate - firstDate;
+ } catch(e){
+ mailHops.LOG('travel dates parse Error: '+JSON.stringify(e));
+ mailHops.message.time = null;
+ }
+ } else {
+ mailHops.message.time = null;
+ }
+
+ //get the originating IP address
+ if(!!headXOrigIP){
+ headXOrigIP = headXOrigIP.replace(/\[IPv6\:/g,'[');
+ //IPV6 check
+ if(headXOrigIP.match(regexIPV6)){
+ var ip = headXOrigIP.match(regexIPV6)
+ if(!!ip && ip.length && all_ips.indexOf(ip[0])==-1)
+ all_ips.unshift( ip[0] );
+ } else {
+ var ip = headXOrigIP.match(regexAllIp);
+ if(!!ip && ip.length && all_ips.indexOf(ip[0])==-1)
+ all_ips.unshift( ip[0] );
+ }
+ }
+
+ if ( all_ips.length ){
+ mailHops.lookupRoute ( all_ips ) ;
+ } else {
+ mailHopsDisplay.clear( true );
+ }
+};
+//another ip check, dates will throw off the regex
+mailHops.testIP = function(ip,header){
+ var validIP = true;
+
+ try {
+ var firstchar = header.substring(header.indexOf(ip)-1);
+ firstchar = firstchar.substring(0,1);
+ var lastchar = header.substring((header.indexOf(ip)+ip.length));
+ lastchar = lastchar.substring(0,1);
+
+ if(firstchar.match(/\.|\d|\-/)
+ || lastchar.match(/\.|\d|\-/)
+ || ( firstchar == '?' && lastchar == '?' )
+ || (firstchar == ':' || lastchar == ':')
+ || lastchar == ';'
+ || header.toLowerCase().indexOf(' id '+ip) !== -1
+ || parseInt(ip.substring(0,ip.indexOf('.'))) >= 240 //IANA-RESERVED
+ ){
+ //only if there is one instance of this IP
+ if(header.indexOf(ip) == header.lastIndexOf(ip))
+ validIP = false;
+ } else if(header.indexOf('using SSL') !== -1
+ || header.indexOf('using TLS') !== -1
+ || header.indexOf('version=TLSv1/SSLv3') !== -1
+ ){
+ //check if this IP was part of a secure transmission
+ mailHops.message.secure.push(ip);
+ }
+ } catch(e) {
+ mailHops.LOG('testIP Error: '+JSON.stringify(e));
+ }
+ return validIP;
+};
+
+mailHops.setupEventListener = function () {
+ if ( mailHops.isLoaded ){
+ return;
+ }
+ mailHops.LOG("Setting up Message listener");
+
+ mailHops.init();
+ mailHops.registerObserver();
+
+ var listener = {
+ onStartHeaders: function() { mailHopsDisplay.clear(); }
+ , onEndHeaders: mailHops.loadHeaderData
+ };
+ gMessageListeners.push( listener );
+};
+
+//preferences observers
+mailHops.registerObserver = function(){
+ var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService( Components.interfaces.nsIPrefService ) ;
+ mailHops._branch = prefService.getBranch("mail.mailHops.");
+ if (!("addObserver" in mailHops._branch))
+ mailHops._branch.QueryInterface(Components.interfaces.nsIPrefBranch2);
+
+ mailHops._branch.addObserver( "" , mailHops , false ) ;
+};
+
+mailHops.unregisterObserver = function(){
+ if ( !mailHops._branch ){
+ return ;
+ }
+
+ mailHops._branch.removeObserver ( "" , mailHops ) ;
+};
+
+mailHops.observe = function ( aSubject , aTopic , aData )
+{
+ if ( aTopic == "nsPref:changed" )
+ mailHops.loadPref(true);
+};
+
+mailHops.getCharPref = function ( strName , strDefault ){
+ var value;
+ if (!pref){
+ var pref = Components.classes["@mozilla.org/preferences-service;1"].getService( Components.interfaces.nsIPrefBranch ) ;
+ }
+ try {
+ value = pref.getCharPref ( strName ) ;
+ } catch(e){
+ value = strDefault ;
+ }
+ return ( value ) ;
+};
+
+//mailhops lookup
+mailHops.lookupRoute = function(header_route){
+
+ //setup loading
+ mailHopsDisplay.clear();
+
+ var lookupURL = mailHopsUtils.getAPIUrl(mailHops.options)+'/lookup/?'+mailHopsUtils.getAPIUrlParams(mailHops.options)+'&r='+String(header_route)+'&l='+mailHops.options.lan+'&u='+mailHops.options.unit;
+
+ if(mailHops.options.fkey != '')
+ lookupURL += '&fkey='+mailHops.options.fkey;
+ if(mailHops.message.time != null)
+ lookupURL += '&t='+mailHops.message.time;
+
+ //check for cache
+ var cached_results = mailHops.getResults();
+
+ if(cached_results){
+ mailHops.LOG('Found Cached Result');
+ try {
+ cached_results = JSON.parse(cached_results);
+ mailHopsDisplay.route(header_route, mailHops.message, cached_results.response, cached_results.meta, lookupURL);
+ return;
+ } catch(e){
+ mailHops.LOG('Failed to parse cached result: '+JSON.stringify(e));
+ }
+ }
+
+mailHops.LOG(lookupURL);
+
+ //call mailhops api for lookup
+ var xmlhttp = new XMLHttpRequest();
+
+ xmlhttp.open("GET", lookupURL ,true);
+ xmlhttp.onreadystatechange=function() {
+ if (xmlhttp.readyState===4){
+ try {
+ var data = JSON.parse(xmlhttp.responseText);
+ if(xmlhttp.status===200){
+ var d = new Date();
+ data.meta.cached = d.toISOString();
+ //save the result
+ mailHops.saveResults(data, data.response.route);
+ //display the result
+ mailHopsDisplay.route(header_route, mailHops.message, data.response, data.meta, lookupURL);
+ } else if(data.error){
+ mailHops.LOG(JSON.stringify(data));
+ //display the error
+ mailHopsDisplay.error(xmlhttp.status,data);
+ }
+ } catch(e){
+ mailHops.LOG(e);
+ mailHopsDisplay.error();
+ }
+ }
+ };
+ xmlhttp.send(null);
+};
+
+mailHops.saveResults = function(results, route){
+
+ if(!mailHops.msgURI)
+ return false;
+
+ var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance().QueryInterface(Components.interfaces.nsIMessenger);
+ var msgHdr = messenger.messageServiceFromURI(mailHops.msgURI).messageURIToMsgHdr(mailHops.msgURI);
+
+ if(!msgHdr)
+ return false;
+
+ if(!results){
+ msgHdr.setStringProperty( "MH-Route", '' );
+ return false;
+ }
+
+ var countryCode = mailHopsUtils.getOriginatingCountryCode(route);
+
+ if(!!countryCode){
+ results.sender = { countryCode: countryCode };
+ }
+
+ msgHdr.setStringProperty( "MH-Route", JSON.stringify(results) );
+
+ //Add tag
+ if(!!countryCode && !!mailHops.options.api_key){
+ try {
+ var msg = Components.classes["@mozilla.org/array;1"].createInstance(Components.interfaces.nsIMutableArray);
+ msg.clear();
+ msg.appendElement(msgHdr, false);
+
+ if(!!mailHops.options.country_tag){
+ var tagService = Components.classes["@mozilla.org/messenger/tagservice;1"].getService(Components.interfaces.nsIMsgTagService);
+ if(!tagService)
+ return;
+
+ if(!tagService.getKeyForTag(countryCode))
+ tagService.addTag(countryCode,'',0);
+
+ msgHdr.folder.addKeywordsToMessages(msg, countryCode );
+ mailHops.LOG( "Added CountryCode tag: "+countryCode );
+ }
+
+ if(!!mailHops.options.country_filter && mailHops.options.country_filter.length){
+ if(mailHops.options.country_filter.indexOf(countryCode.toLowerCase()) !== -1){
+ msgHdr.folder.setJunkScoreForMessages(msg, "100");
+ mailHops.LOG( "Junk: Country Filter match" );
+ }
+ }
+ // tag as junk if travel time is longer than 10 seconds
+ if(!!mailHops.options.travel_time_junk && mailHops.message.time != null && mailHops.message.time > 10000){
+ msgHdr.folder.setJunkScoreForMessages(msg, "100");
+ mailHops.LOG( "Junk: Travel time match" );
+ }
+
+ } catch(e){
+ mailHops.LOG( "Error adding CountryCode tag: "+e );
+ }
+ }
+};
+
+mailHops.getResults = function(){
+
+ if(!mailHops.msgURI)
+ return false;
+
+ var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance().QueryInterface(Components.interfaces.nsIMessenger);
+ var msgHdr = messenger.messageServiceFromURI(mailHops.msgURI).messageURIToMsgHdr(mailHops.msgURI);
+
+ if(!msgHdr)
+ return false;
+
+ return msgHdr.getStringProperty( "MH-Route" );
+};
+
+mailHops.refreshCache = function(){
+ mailHops.saveResults();
+ mailHops.getRoute();
+};
+
+// window.addEventListener("messagepane-loaded", mailHops.setupEventListener, true);
+window.addEventListener("load", function() {
+ var messagepane = document.getElementById("messagepane");
+ if (messagepane) {
+ messagepane.addEventListener("load", function () {
+ mailHops.setupEventListener();
+ }, true);
+ }
+}, false);
\ No newline at end of file
diff --git a/mailhops/chrome/content/mailhops-4-preferences.js b/mailhops/chrome/content/mailhops-4-preferences.js
new file mode 100644
index 0000000..ac9dd55
--- /dev/null
+++ b/mailhops/chrome/content/mailhops-4-preferences.js
@@ -0,0 +1,268 @@
+if (!pref) {
+ var pref = Components.classes["@mozilla.org/preferences-service;1"].getService ( Components.interfaces.nsIPrefBranch ) ;
+}
+
+var mailHopPreferences = {
+ api_host: 'api.mailhops.com', //mailhops api url
+ api_http: 'https://', //ssl?
+ api_key: '', //api key
+ valid_api_key: false,
+ fkey: '', //forecast.io api key
+ country_filter: [],
+ previewBar: null,
+
+ loadPreferences: function(){
+ var self = this;
+
+ this.api_host = document.getElementById("mailhop.api_host");
+
+ this.api_http = document.getElementById("mailhop.api_http");
+
+ this.api_key = document.getElementById("mailhop.api_key");
+
+ this.fkey = document.getElementById("mailhop.fkey");
+
+ this.previewBar = document.getElementById("display_preview");
+
+ document.getElementById("mailhop.lang").value = pref.getCharPref("mail.mailHops.lang",'en');
+
+ document.getElementById("mailhop.map_provider").value = pref.getCharPref("mail.mailHops.map_provider",'OpenStreetMap.Mapnik');
+
+ if(pref.getCharPref("mail.mailHops.unit",'mi')=='mi')
+ document.getElementById("mailhop.unit").selectedIndex = 0;
+ else
+ document.getElementById("mailhop.unit").selectedIndex = 1;
+
+ //Display Box styles
+ document.getElementById("mailhop.bar_color").value = pref.getCharPref("mail.mailHops.bar_color",'#FFF');
+ document.getElementById("mailhop.font_color").value = pref.getCharPref("mail.mailHops.font_color",'#777');
+ document.getElementById("mailhop.font_size").value = pref.getCharPref("mail.mailHops.font_size",'14px');
+
+ //Update styles
+ this.previewBar.style.background = document.getElementById("mailhop.bar_color").value;
+ this.previewBar.style.color = document.getElementById("mailhop.font_color").value;
+ this.previewBar.style.fontSize = document.getElementById("mailhop.font_size").value;
+
+ if(pref.getCharPref("mail.mailHops.debug",'true')=='true')
+ document.getElementById("mailhop.debug").checked = true;
+ else
+ document.getElementById("mailhop.debug").checked = false;
+
+ // API info
+ this.api_key.value = pref.getCharPref("mail.mailHops.api_key",'');
+
+ this.api_http.value = pref.getCharPref("mail.mailHops.api_http",'https://');
+ if(this.api_http.value=='https://')
+ this.api_http.selectedIndex = 0;
+ else
+ this.api_http.selectedIndex = 1;
+
+ this.api_host.value = pref.getCharPref("mail.mailHops.api_host",'api.mailhops.com');
+
+ this.fkey.value = pref.getCharPref("mail.mailHops.fkey",'');
+
+ // Country Filter and tagging
+ this.country_filter = JSON.parse(pref.getCharPref("mail.mailHops.country_filter",null) || []);
+ if(this.country_filter.length){
+ for(c in this.country_filter){
+ document.getElementById("country_"+this.country_filter[c]).checked=true;
+ }
+ }
+ if(!!this.api_key.value.trim()){
+ document.getElementById("mailhops-membership-link").value='My Account';
+ document.getElementById("mailhops-membership-link").setAttribute('href','https://mailhops.com/account/'+this.api_key.value.trim());
+ }
+ if(pref.getCharPref("mail.mailHops.country_tag",'false')=='false')
+ document.getElementById("mailhop.country_tag").checked = false;
+ else
+ document.getElementById("mailhop.country_tag").checked = true;
+
+ if(pref.getCharPref("mail.mailHops.travel_time_junk",'false')=='false')
+ document.getElementById("mailhop.travel_time_junk").checked = false;
+ else
+ document.getElementById("mailhop.travel_time_junk").checked = true;
+
+ if(pref.getCharPref("mail.mailHops.hide_compact",'false')=='false')
+ document.getElementById("mailhop.hide_compact").checked = false;
+ else
+ document.getElementById("mailhop.hide_compact").checked = true;
+
+ this.saveAPIKey();
+
+ document.getElementById("mailhop.bar_color").addEventListener("input", function () {
+ self.previewBar.style.background = this.value;
+ });
+ document.getElementById("mailhop.font_color").addEventListener("input", function () {
+ self.previewBar.style.color = this.value;
+ });
+ document.getElementById("mailhop.font_size").addEventListener("input", function () {
+ self.previewBar.style.fontSize = this.value;
+ });
+ },
+ savePreferences: function() {
+ pref.setCharPref("mail.mailHops.lang", document.getElementById("mailhop.lang").selectedItem.value);
+ pref.setCharPref("mail.mailHops.map_provider", document.getElementById("mailhop.map_provider").selectedItem.value);
+ pref.setCharPref("mail.mailHops.unit", document.getElementById("mailhop.unit").selectedItem.value);
+ pref.setCharPref("mail.mailHops.bar_color", String(document.getElementById("mailhop.bar_color").value));
+ pref.setCharPref("mail.mailHops.font_color", String(document.getElementById("mailhop.font_color").value));
+ pref.setCharPref("mail.mailHops.font_size", String(document.getElementById("mailhop.font_size").value));
+ pref.setCharPref("mail.mailHops.debug", String(document.getElementById("mailhop.debug").checked));
+ pref.setCharPref("mail.mailHops.hide_compact", String(document.getElementById("mailhop.hide_compact").checked));
+
+ //API vars
+ if(!this.valid_api_key)
+ this.api_key.value='';
+ pref.setCharPref("mail.mailHops.api_key", this.api_key.value.trim());
+ pref.setCharPref("mail.mailHops.api_http", this.api_http.value);
+ pref.setCharPref("mail.mailHops.api_host", this.api_host.value);
+
+ pref.setCharPref("mail.mailHops.fkey", String(this.fkey.value));
+
+ // Country Filter and tagging
+ this.country_filter = [];
+ for(c in mailHopsUtils.countries){
+ if(document.getElementById("country_"+mailHopsUtils.countries[c]).checked)
+ this.country_filter.push(document.getElementById("country_"+mailHopsUtils.countries[c]).getAttribute('value'));
+ }
+ pref.setCharPref("mail.mailHops.country_filter", String(JSON.stringify(this.country_filter)));
+ pref.setCharPref("mail.mailHops.country_tag", String(document.getElementById("mailhop.country_tag").checked));
+ pref.setCharPref("mail.mailHops.travel_time_junk", String(document.getElementById("mailhop.travel_time_junk").checked));
+
+ return true;
+ },
+
+ countryListSelectAll: function(all){
+ if(this.valid_api_key){
+ for(c in mailHopsUtils.countries){
+ document.getElementById("country_"+mailHopsUtils.countries[c]).checked=all;
+ }
+ }
+ },
+ planError: function(error){
+ this.valid_api_key=false;
+ document.getElementById("plan-error").style.display = 'block';
+ document.getElementById("plan-error").value=error;
+ document.getElementById("plan").value='';
+ document.getElementById("status").value='';
+ document.getElementById("rate-limit").value='';
+ document.getElementById("rate-remaining").value='';
+ document.getElementById("rate-reset").value='';
+ document.getElementById("mailhops-membership-link").value='Join MailHops';
+ document.getElementById("mailhops-membership-link").setAttribute('href','https://mailhops.com');
+ var items = document.getElementsByClassName('filters');
+ for(x in items){
+ items[x].disabled = true;
+ }
+ var items = document.getElementsByClassName('country');
+ for(x in items){
+ items[x].disabled = true;
+ if(items[x].label)
+ items[x].label = items[x].label.toUpperCase();
+ }
+ },
+ saveAPIKey: function() {
+
+ if(!!this.api_key && this.api_key.value != ''){
+ var xmlhttp = new XMLHttpRequest();
+ var apiBase = this.api_http.value+this.api_host.value,
+ accountURL = '/v2/accounts/?api_key='+this.api_key.value.trim(),
+ api_key = this.api_key.value.trim(),
+ self = this;
+
+ xmlhttp.open("GET", apiBase+accountURL, true);
+ xmlhttp.onreadystatechange=function() {
+ if (xmlhttp.readyState===4) {
+ try {
+ var data = JSON.parse(xmlhttp.responseText);
+ if(xmlhttp.status===200){
+ self.valid_api_key=true;
+ document.getElementById("plan-error").style.display = 'none';
+ // set plan info
+ document.getElementById("plan").value = "Plan: "+data.account.subscriptions.data[0].plan.name;
+ document.getElementById("status").value = "Status: "+data.account.subscriptions.data[0].status;
+ document.getElementById("rate-limit").value = "Limit: "+data.account.rate.limit;
+ document.getElementById("rate-remaining").value = "Remaining: "+data.account.rate.remaining;
+ if(data.account.rate.reset/60 < 60)
+ document.getElementById("rate-reset").value = "Resets in: "+Math.round(data.account.rate.reset/60)+" min.";
+ else
+ document.getElementById("rate-reset").value = "Resets in: "+Math.round(data.account.rate.reset/60/60)+" hr.";
+ document.getElementById("mailhops-membership-link").value='My Account';
+ document.getElementById("mailhops-membership-link").setAttribute('href','https://mailhops.com/account/'+api_key);
+
+ var items = document.getElementsByClassName('filters');
+ for(x in items){ items[x].disabled = false;}
+ var items = document.getElementsByClassName('country');
+ for(x in items){ items[x].disabled = false; if(items[x].label) items[x].label = items[x].label.toUpperCase();}
+ } else if(!!data.error){
+ self.planError(xmlhttp.status+': '+data.error.message);
+ }
+ } catch (e){
+ self.planError('Connection Failed to\n '+e+'!');
+ }
+ }
+ };
+ xmlhttp.send(null);
+ } else {
+ this.planError('Enter a valid API key above.');
+ }
+ },
+
+ TestConnection: function(){
+ var xmlhttp = new XMLHttpRequest();
+ var apiBase = this.api_http.value+this.api_host.value,
+ lookupURL = '/v1/lookup/?healthcheck';
+
+ xmlhttp.open("GET", apiBase+lookupURL,true);
+ xmlhttp.onreadystatechange=function() {
+ if (xmlhttp.readyState===4) {
+ try{
+ var data = JSON.parse(xmlhttp.responseText);
+ if(xmlhttp.status===200){
+ alert('Connection Succeeded to\n '+apiBase+'!');
+ } else {
+ //display the error
+ alert('Connection Failed to\n '+apiBase+'!');
+ }
+ }
+ catch (ex){
+ alert('Connection Failed to\n '+apiBase+'! '+JSON.stringify(ex));
+ }
+ }
+ };
+ xmlhttp.send(null);
+},
+
+ ResetConnection: function(){
+ this.api_http.value=="https://";
+ this.api_http.selectedIndex = 0;
+ this.api_host.value='api.mailhops.com';
+ },
+
+ ResetDisplay: function(bar,font,size){
+ if(bar){
+ if(bar.indexOf('rgb(')===0)
+ document.getElementById("mailhop.bar_color").value = this.rgb2hex(bar);
+ else
+ document.getElementById("mailhop.bar_color").value = bar;
+ }
+ if(font) {
+ if(font.indexOf('rgb(')===0)
+ document.getElementById("mailhop.font_color").value = this.rgb2hex(font);
+ else
+ document.getElementById("mailhop.font_color").value = font;
+ }
+ if(size) document.getElementById("mailhop.font_size").value = size;
+ this.previewBar.style.background = document.getElementById("mailhop.bar_color").value;
+ this.previewBar.style.color = document.getElementById("mailhop.font_color").value;
+ this.previewBar.style.fontSize = document.getElementById("mailhop.font_size").value;
+ },
+
+ rgb2hex: function(rgb) {
+ rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
+ function hex(x) {
+ return ("0" + parseInt(x).toString(16)).slice(-2);
+ }
+ return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
+ }
+
+ };
diff --git a/mailhops/chrome/content/mailhops-5-msgListColumn.js b/mailhops/chrome/content/mailhops-5-msgListColumn.js
new file mode 100644
index 0000000..8cace5e
--- /dev/null
+++ b/mailhops/chrome/content/mailhops-5-msgListColumn.js
@@ -0,0 +1,75 @@
+var columnHandler = {
+ getCellText: function(row, col) {return null;},
+ getSortStringForRow: function(msgHdr) {
+ msgHdr.getStringProperty( "MH-Route" );
+ var countryCode = null;
+ var cached_results = msgHdr.getStringProperty( "MH-Route" );
+ if(cached_results){
+ try {
+ cached_results = JSON.parse(cached_results);
+ if(cached_results.sender && cached_results.sender.countryCode){
+ countryCode = cached_results.sender.countryCode;
+ } else {
+ countryCode = mailHopsUtils.getOriginatingCountryCode(cached_results.response.route);
+ }
+ if(countryCode){
+ return 'chrome://mailhops/content/images/flags/'+countryCode.toLowerCase()+'.png';
+ }
+ } catch(e) {
+ return countryCode;
+ }
+ }
+ return countryCode;
+ },
+ isString: function() {return true;},
+
+ getCellProperties: function (row, col, props) {
+ return 'colMailHops';
+ },
+ getRowProperties: function(row, props){},
+ getImageSrc: function (row, col) {
+ var msgKey = gDBView.getKeyAt(row);
+ var msgHdr = gDBView.db.GetMsgHdrForKey(msgKey);
+ var countryCode = null;
+ var cached_results = msgHdr.getStringProperty( "MH-Route" );
+ if(cached_results){
+ try {
+ cached_results = JSON.parse(cached_results);
+ if(cached_results.sender && cached_results.sender.countryCode){
+ countryCode = cached_results.sender.countryCode;
+ } else {
+ countryCode = mailHopsUtils.getOriginatingCountryCode(cached_results.response.route);
+ }
+ if(countryCode){
+ return 'chrome://mailhops/content/images/flags/'+countryCode.toLowerCase()+'.png';
+ }
+ } catch(e) {
+ return null;
+ }
+ }
+ return null;
+ },
+ getSortLongForRow: function(hdr) {return 0;}
+ };
+
+var CreateDbObserver = {
+ // Components.interfaces.nsIObserver
+ observe: function(aMsgFolder, aTopic, aData)
+ {
+ addCustomColumnHandler();
+ }
+};
+
+function doOnceLoaded() {
+ var ObserverService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
+ ObserverService.addObserver(CreateDbObserver, "MsgCreateDBView", false);
+}
+
+function addCustomColumnHandler() {
+ gDBView.addColumnHandler("colMailHops", columnHandler);
+ if ("COLUMNS_MAP_NOSORT" in gFolderDisplay) {
+ gFolderDisplay.COLUMNS_MAP_NOSORT.add("colMailHops");
+ }
+}
+
+window.addEventListener("load", doOnceLoaded, false);
\ No newline at end of file
diff --git a/mailhops/chrome/content/mailhopsMap.xul b/mailhops/chrome/content/mailhopsMap.xul
new file mode 100644
index 0000000..708b33f
--- /dev/null
+++ b/mailhops/chrome/content/mailhopsMap.xul
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/mailhops/chrome/content/msgListColumn.xul b/mailhops/chrome/content/msgListColumn.xul
new file mode 100644
index 0000000..29470f5
--- /dev/null
+++ b/mailhops/chrome/content/msgListColumn.xul
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mailhops/chrome/content/msgNotificationBar.xul b/mailhops/chrome/content/msgNotificationBar.xul
new file mode 100644
index 0000000..fe9af61
--- /dev/null
+++ b/mailhops/chrome/content/msgNotificationBar.xul
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/content/preferences.xul b/mailhops/chrome/content/preferences.xul
new file mode 100644
index 0000000..ad5c45b
--- /dev/null
+++ b/mailhops/chrome/content/preferences.xul
@@ -0,0 +1,618 @@
+
+
+
+
+
+
+%MailHopsDTD;
+]>
+
+
diff --git a/mailhops/chrome/locale/de/prefs.dtd b/mailhops/chrome/locale/de/prefs.dtd
new file mode 100644
index 0000000..246dc99
--- /dev/null
+++ b/mailhops/chrome/locale/de/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/de/strings.dtd b/mailhops/chrome/locale/de/strings.dtd
new file mode 100644
index 0000000..e808497
--- /dev/null
+++ b/mailhops/chrome/locale/de/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/en/prefs.dtd b/mailhops/chrome/locale/en/prefs.dtd
new file mode 100644
index 0000000..00e7e42
--- /dev/null
+++ b/mailhops/chrome/locale/en/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/en/strings.dtd b/mailhops/chrome/locale/en/strings.dtd
new file mode 100644
index 0000000..ffb003c
--- /dev/null
+++ b/mailhops/chrome/locale/en/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/es/prefs.dtd b/mailhops/chrome/locale/es/prefs.dtd
new file mode 100644
index 0000000..7a8d1b9
--- /dev/null
+++ b/mailhops/chrome/locale/es/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/es/strings.dtd b/mailhops/chrome/locale/es/strings.dtd
new file mode 100644
index 0000000..d8d2c35
--- /dev/null
+++ b/mailhops/chrome/locale/es/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/fr/prefs.dtd b/mailhops/chrome/locale/fr/prefs.dtd
new file mode 100644
index 0000000..033b2b2
--- /dev/null
+++ b/mailhops/chrome/locale/fr/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/fr/strings.dtd b/mailhops/chrome/locale/fr/strings.dtd
new file mode 100644
index 0000000..516019d
--- /dev/null
+++ b/mailhops/chrome/locale/fr/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/ja/prefs.dtd b/mailhops/chrome/locale/ja/prefs.dtd
new file mode 100644
index 0000000..d1feea4
--- /dev/null
+++ b/mailhops/chrome/locale/ja/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/ja/strings.dtd b/mailhops/chrome/locale/ja/strings.dtd
new file mode 100644
index 0000000..c130b6d
--- /dev/null
+++ b/mailhops/chrome/locale/ja/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/pl/prefs.dtd b/mailhops/chrome/locale/pl/prefs.dtd
new file mode 100644
index 0000000..fbdbfac
--- /dev/null
+++ b/mailhops/chrome/locale/pl/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/pl/strings.dtd b/mailhops/chrome/locale/pl/strings.dtd
new file mode 100644
index 0000000..ee2295a
--- /dev/null
+++ b/mailhops/chrome/locale/pl/strings.dtd
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/pt-BR/prefs.dtd b/mailhops/chrome/locale/pt-BR/prefs.dtd
new file mode 100644
index 0000000..289f30e
--- /dev/null
+++ b/mailhops/chrome/locale/pt-BR/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/pt-BR/strings.dtd b/mailhops/chrome/locale/pt-BR/strings.dtd
new file mode 100644
index 0000000..57fa712
--- /dev/null
+++ b/mailhops/chrome/locale/pt-BR/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/ru/prefs.dtd b/mailhops/chrome/locale/ru/prefs.dtd
new file mode 100644
index 0000000..3d72d34
--- /dev/null
+++ b/mailhops/chrome/locale/ru/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/ru/strings.dtd b/mailhops/chrome/locale/ru/strings.dtd
new file mode 100644
index 0000000..d942635
--- /dev/null
+++ b/mailhops/chrome/locale/ru/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/zh-CN/prefs.dtd b/mailhops/chrome/locale/zh-CN/prefs.dtd
new file mode 100644
index 0000000..263e744
--- /dev/null
+++ b/mailhops/chrome/locale/zh-CN/prefs.dtd
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/locale/zh-CN/strings.dtd b/mailhops/chrome/locale/zh-CN/strings.dtd
new file mode 100644
index 0000000..4dd569b
--- /dev/null
+++ b/mailhops/chrome/locale/zh-CN/strings.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/mailhops/chrome/skin/classic/msgNotificationBar.css b/mailhops/chrome/skin/classic/msgNotificationBar.css
new file mode 100644
index 0000000..62a9119
--- /dev/null
+++ b/mailhops/chrome/skin/classic/msgNotificationBar.css
@@ -0,0 +1,144 @@
+@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
+
+ #mailhopsResultText { padding-left:20px; background-repeat: no-repeat; }
+
+#mailhopsNoficationBox menuitem .menu-iconic-icon { width: 16px; height: 11px; }
+
+#mailhopsNoficationBox .auth-item { display: none; background-repeat: no-repeat; padding-left: 18px; }
+
+#mhTabs .act { padding-left: 20px; background-repeat: no-repeat; outline : none;}
+
+#mailhopsResultWeather { display: none; background-repeat: no-repeat; padding-left: 18px; }
+
+#mailHopsPreferences {
+ font-family: 'Raleway',Arial,sans-serif;
+ font-size: 14px;
+}
+
+#mailHopsPreferences textbox {
+ font-size: 14px;
+ padding: 5px;
+ color: #777;
+}
+
+#mailHopsPreferences tab {
+ font-size: 14px;
+ padding: 5px;
+ color: #333;
+}
+
+#mailhopsResult label {
+ margin-top: 8px;
+}
+
+#mailhopsNoficationBox {
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ font-size: 14px;
+ line-height: 24px;
+ font-weight: normal;
+ background: #5E7A9B;
+ display: block;
+ position: relative;
+ padding: 5px;
+}
+
+#mailhopsResult {
+ position: relative;
+ display: inline-flex;
+}
+
+#mailhopsNoficationBox .bar-link {
+ cursor: pointer;
+ text-decoration: none;
+}
+
+#mailhopsNoficationBox .bar-link:hover {
+ text-decoration: underline;
+}
+
+#mailhopsNoficationBox #mailhopsDataPanePrefsLink {
+ border-radius: 20px;
+ background-color: #CCC;
+ letter-spacing: .1em;
+ right: 0;
+}
+
+#mailhopsLogo,
+#mailhopsResultText,
+#mailhopsResultWeather,
+#mailhopsUnsubscribe,
+#mailhopsDataPaneDNSBL,
+#mailhopsDataPaneDKIM,
+#mailhopsDataPaneSPF,
+#mailhopsDataPaneMailer {
+ color: #fff;
+}
+
+#mailhopsLogo,
+#mailhopsResultText,
+#mailhopsResultWeather,
+#mailhopsUnsubscribe {
+ cursor: pointer;
+}
+
+#mailhopsNoficationBox .unsubscribe {
+ color: #CCC;
+}
+
+#mailhopsLogo {
+ -webkit-filter: grayscale(100%);
+ filter: grayscale(100%);
+}
+
+#mailhopsLogo:hover {
+ -webkit-filter: none;
+ filter: none;
+}
+
+#mailHopsAccountMessage {
+ border-radius: 10px;
+ display: none;
+ padding: 10px;
+ border: 1px solid #CCC;
+ color: #777;
+ background-color: #FFF;
+}
+
+#mailhopsDataPaneDetails {
+ border-radius: 10px;
+ display: none;
+ padding: 10px;
+ border: 1px solid #CCC;
+ color: #333;
+ background-color: #FFF;
+ position: absolute;
+ margin-top: 0;
+ z-index: 10000;
+}
+
+#mailhopsDataPaneDetails .hop {
+ background-repeat: no-repeat;
+ display: block;
+ position: relative;
+ padding-left: 22px;
+}
+
+#mailhopsDataPaneDetails .host {
+ background-repeat: no-repeat;
+ display: block;
+ position: relative;
+ color: #777;
+ padding-left: 22px;
+ margin-left: 22px;
+}
+
+#mailhopsNoficationBox .toolbarbutton {
+ font-family: Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;
+ margin: 0 .25em 0 0;
+ padding: 0px 9px 9px 9px;
+ width: 75px;
+ font-weight: 400;
+ border-radius: .28571429rem;
+ box-shadow: 0 0 0 1px #1b1c1d inset!important;
+ color: #1b1c1d!important;
+}
\ No newline at end of file
diff --git a/mailhops/chrome/skin/classic/prefs.css b/mailhops/chrome/skin/classic/prefs.css
new file mode 100644
index 0000000..711513e
--- /dev/null
+++ b/mailhops/chrome/skin/classic/prefs.css
@@ -0,0 +1,25 @@
+#mailHopsPreferences {
+ font-family: 'Raleway',Arial,sans-serif;
+ font-size: 14px;
+}
+
+#mailHopsPreferences textbox {
+ font-size: 14px;
+ padding: 5px;
+ color: #777;
+}
+
+#mailHopsPreferences tab {
+ font-size: 14px;
+ padding: 5px;
+ color: #333;
+}
+
+#mailHopsPreferences button{
+ height: 35px;
+ color: #333;
+}
+
+#mailHopsPreferences .grid-color{
+ margin-top: 7px;
+}
diff --git a/mailhops/manifest.json b/mailhops/manifest.json
new file mode 100644
index 0000000..da29b01
--- /dev/null
+++ b/mailhops/manifest.json
@@ -0,0 +1,27 @@
+{
+ "manifest_version": 2,
+ "name": "__MSG_appName__",
+ "description": "__MSG_appDesc__",
+ "version": "3.6.8",
+ "author": "Hopsware LLC",
+ "developer": {
+ "name": "Andrew Van Tassel",
+ "url": "https://www.mailhops.com"
+ },
+ "applications": {
+ "gecko": {
+ "id": "thunderbird@mailhops.com",
+ "strict_min_version": "60.*"
+ }
+ },
+ "default_locale": "en",
+ "icons": {
+ "32": "chrome/content/images/mailhops32.png"
+ },
+ "legacy": {
+ "options": {
+ "page": "chrome://mailhops/content/preferences.xul",
+ "open_in_tab": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..aeecd8b
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,27 @@
+{
+ "manifest_version": 2,
+ "name": "__MSG_appName__",
+ "description": "__MSG_appDesc__",
+ "version": "3.6.8",
+ "author": "Hopsware LLC",
+ "developer": {
+ "name": "Andrew Van Tassel",
+ "url": "https://www.mailhops.com"
+ },
+ "applications": {
+ "gecko": {
+ "id": "thunderbird@mailhops.com",
+ "strict_min_version": "68.0"
+ }
+ },
+ "default_locale": "en",
+ "icons": {
+ "32": "chrome/content/images/mailhops32.png"
+ },
+ "legacy": {
+ "options": {
+ "page": "chrome://mailhops/content/preferences.xul",
+ "open_in_tab": false
+ }
+ }
+}
\ No newline at end of file