diff --git a/chrome/content/exchangeSettings.js b/chrome/content/exchangeSettings.js index f26221cf..407592d4 100644 --- a/chrome/content/exchangeSettings.js +++ b/chrome/content/exchangeSettings.js @@ -266,6 +266,8 @@ exchExchangeSettings.prototype = { this._document.getElementById("exchWebService-autoprocessingproperties-markeventtentative").checked = this.globalFunctions.safeGetBoolPref(exchWebServicesCalPrefs, "ecautoprocessingmarkeventtentative", false); this._document.getElementById("exchWebService-syncMailItems-Interval").value = this.globalFunctions.safeGetIntPref(exchWebServicesCalPrefs, "syncMailItems.Interval", 15); + this._document.getElementById("exchWebService-syncMailItems-active").checked = this.globalFunctions.safeGetBoolPref(exchWebServicesCalPrefs, "mailsync.active",false); + if ( this.globalFunctions.safeGetCharPref(exchWebServicesCalPrefs, "ecFolderbase", "") == "calendar" ){ this._document.getElementById("mailItemsPropertiesTab").hidden = false; @@ -333,6 +335,7 @@ exchExchangeSettings.prototype = { if ( this.globalFunctions.safeGetCharPref(exchWebServicesCalPrefs, "ecFolderbase", "") == "calendar" ){ exchWebServicesCalPrefs.setIntPref("syncMailItems.Interval", this._document.getElementById("exchWebService-syncMailItems-Interval").value); + exchWebServicesCalPrefs.setBoolPref("mailsync.active", this._document.getElementById("exchWebService-syncMailItems-active").checked); } //exchWebServicesCalPrefs.setBoolPref("ecPollInbox", this._document.getElementById("exchWebService-poll-inbox").checked); diff --git a/chrome/content/exchangeSettings.xul b/chrome/content/exchangeSettings.xul index 7ebd45e6..af0b5761 100644 --- a/chrome/content/exchangeSettings.xul +++ b/chrome/content/exchangeSettings.xul @@ -417,6 +417,10 @@ increment="1" min="15" type="number" value="15" /> + + + diff --git a/chrome/content/exchangeSettingsOverlay.js b/chrome/content/exchangeSettingsOverlay.js index 30ff0c53..dbcf5965 100644 --- a/chrome/content/exchangeSettingsOverlay.js +++ b/chrome/content/exchangeSettingsOverlay.js @@ -235,11 +235,17 @@ exchSettingsOverlay.prototype = { exchWebServicesDoUserChanged: function _exchWebServicesDoUserChanged(aTextBox) { this.exchWebServicesgUser = aTextBox.value; - if (this.exchWebServicesgUser.indexOf("@") > -1) { + if ((this.exchWebServicesgUser.indexOf("@") > -1) || (this.exchWebServicesgUser.indexOf("\\") > -1) ){ this._document.getElementById("exchWebService_windowsdomain").disabled = true; this._document.getElementById("exchWebService_windowsdomain").value = ""; //this._document.getElementById("exchWebService_windowsdomain").setAttribute("required", false); this.exchWebServicesgDomain = ""; + + if(this.exchWebServicesgUser.indexOf("\\") > -1){ + var newArray = this.exchWebServicesgUser.split("\\"); + this.exchWebServicesgUser = newArray[1]; + this.exchWebServicesgDomain = newArray[0]; + } } else { this._document.getElementById("exchWebService_windowsdomain").disabled = false; @@ -308,7 +314,7 @@ exchSettingsOverlay.prototype = { exchWebServicesGetUsername: function _exchWebServicesGetUsername() { - if (this.exchWebServicesgUser.indexOf("@") > -1) { + if (this.exchWebServicesgUser.indexOf("@") > -1) { return this.exchWebServicesgUser; } else { diff --git a/chrome/content/rtews.js b/chrome/content/rtews.js index 9890d8ab..9188c93f 100644 --- a/chrome/content/rtews.js +++ b/chrome/content/rtews.js @@ -18,6 +18,7 @@ Cu.import("resource://exchangecalendar/erSubscribe.js"); Cu.import("resource://exchangecalendar/erGetEvents.js"); Cu.import("resource://exchangecalendar/erFindItems.js"); Cu.import("resource://exchangecalendar/erUpdateItem.js"); +Cu.import("resource://exchangecalendar/erUnsubscribe.js"); const eventTypes = ["NewMailEvent","ModifiedEvent","MovedEvent","CopiedEvent","CreatedEvent"]; @@ -202,14 +203,19 @@ rtews.Tags = { function rtews(identity){ this.identity = identity; // fixing bug #270 - - if( identity.domain){ - this.user = identity.domain +"\\"+identity.username ; - } - else { - this.user = identity.username ; - } - + + if (identity.username.indexOf("@") > -1) { + this.user = identity.username ; + } + else { + if (identity.domain == "") { + this.user = identity.username ; + } + else { + this.user = identity.domain +"\\"+identity.username ; + } + } + this.mailbox = identity.email ; this.serverUrl = identity.ewsUrl ; @@ -229,17 +235,38 @@ function rtews(identity){ this.prefs = identity.prefs ; if( this.prefs ){ - this.pollOffset = this.globalFunctions.safeGetIntPref(this.prefs, "syncMailItems.Interval" ,15) * 1000 ;//time for getevents + this.pollOffset = this.globalFunctions.safeGetIntPref(this.prefs, "syncMailItems.Interval" ,15) * 1000 ;//time for getevents + this.loadBalancer = Cc["@1st-setup.nl/exchange/loadbalancer;1"] + .getService(Ci.mivExchangeLoadBalancer); } else{ this.prefs = null; - this.pollOffset = 15000;//time for getevents + this.pollOffset = 30000;//time for getevents } this.subscriptionTimeout = "1440"; } rtews.prototype = { + /* + *use Calendar queue for xml request + */ + addToQueue: function _addToQueue(aRequest, aArgument, aCbOk, aCbError, aListener) + { + if ( mivFunctions.safeGetBoolPref(this.prefs, "mailsync.active", false) == false ){ + exchangeGlobalFunction("Not adding to queue because we are disabled, " + this.serverUrl ,this.user); + this.Running = false; + return; + } + //if (!aArgument["ServerVersion"]) aArgument["ServerVersion"] = this.exchangeStatistics.getServerVersion(this.serverUrl); + + this.loadBalancer.addToQueue({ calendar: this.prefs, + ecRequest:aRequest, + arguments: aArgument, + cbOk: aCbOk, + cbError: aCbError, + listener: aListener}); + }, /* * Gets the ItemId element from response of the FindItem SOAP request * @@ -248,7 +275,7 @@ rtews.prototype = { exchangeGlobalFunction("Find all the folderd in msgfolderroot, " + this.serverUrl ,this.user); //Call API var self = this; - var tmpObject = new erFindInboxFolderRequest( + this.addToQueue( erFindInboxFolderRequest, {user:this.user, mailbox: this.mailbox, serverUrl:this.serverUrl, @@ -272,7 +299,7 @@ rtews.prototype = { subscribe: function _subscribe(folders){ exchangeGlobalFunction("Trying to subscribe " ,this.user); var self = this; - var tmpObject = new erSubscribeRequest( + this.addToQueue( erSubscribeRequest, {user: this.user, mailbox: this.mailbox, serverUrl: this.serverUrl, @@ -296,10 +323,10 @@ rtews.prototype = { }, unsubscribe: function _unsubscribe(){ - var that = this; - that.Running = true; - - var tmpObject = new erUnsubscribeRequest( + exchangeGlobalFunction("Error occured Unsubscribing user.",this.user); + this.Running = false; + var that = this; + this.addToQueue( erUnsubscribeRequest, {user: this.user, mailbox: this.mailbox, serverUrl: this.serverUrl, @@ -312,13 +339,11 @@ rtews.prototype = { }, unsubscribeOK: function _unsubscribeOK(erUnsubscribeRequest, aResp){ - this.Running =false; exchangeGlobalFunction("Unsubscribed user.",this.user); }, unsubscribeError: function _unsubscribeError(erUnsubscribeRequest, aCode, aMsg){ - this.Running =false; - exchangeGlobalFunction("unsubscribeError: "+ aMsg); + exchangeGlobalFunction("unsubscribeError: "+ aMsg); }, poll: function _poll() { @@ -440,7 +465,7 @@ rtews.prototype = { getAndUpdateItems: function _getAndUpdateItems(aIds) { exchangeGlobalFunction("Received request to update messages, total items to be requested - " + aIds.length, this.user); var that = this; - var tmpObject = new erGetItemsRequest( + this.addToQueue( erGetItemsRequest, {user: this.user, mailbox: this.mailbox, serverUrl: this.serverUrl, @@ -456,7 +481,7 @@ rtews.prototype = { this.Running = true; var that = this; - var tmpObject = new erGetEventsRequest( + this.addToQueue( erGetEventsRequest, {user: this.user, mailbox: this.mailbox, serverUrl: this.serverUrl, @@ -680,7 +705,7 @@ rtews.prototype = { continue; } - var tmpObject = new erFindItemsRequest( + this.addToQueue( erFindItemsRequest, {user: this.user, mailbox: this.mailbox, serverUrl: this.serverUrl, @@ -695,7 +720,7 @@ rtews.prototype = { } else{ exchangeGlobalFunction("Syncing tags not finding any items in server for Ids. " + JSON.stringify(messageId), that.user); - } + } }, function(erFindItemsRequest, aCode, aMsg) { exchangeGlobalFunction("findItemsError: aCode:" + aCode + " aMsg: " + aMsg ); @@ -725,14 +750,17 @@ rtews.prototype = { } else{ exchangeGlobalFunction("Toggle tags not finding any items in server for Ids. " + JSON.stringify(messageId), that.user); + //when no mail item is find toggle tags locally + exchangeGlobalFunction("Update tags locally",that.user); + rtews.fallBackTagUpdate(msgHdr, identity, toggleType, categories, key, addKey); } } function findItemsError(erFindItemsRequest, aCode, aMsg){ exchangeGlobalFunction("findItemsError: aCode:" + aCode + " aMsg: " + aMsg ); - } + } - var tmpObject = new erFindItemsRequest( + this.addToQueue( erFindItemsRequest, {user: this.user, mailbox: this.mailbox, serverUrl: this.serverUrl, @@ -774,7 +802,8 @@ rtews.prototype = { exchangeGlobalFunction("UpdateItem with changes " + changes, this.user); - var tmpObject = new erUpdateItemRequest({user: this.user, + this.addToQueue( erUpdateItemRequest, + {user: this.user, mailbox: this.mailbox, folderBase: this.folderBase, serverUrl: this.serverUrl, @@ -806,6 +835,18 @@ rtews.prototype = { }, }; + +/* + * On remote fails + */ +rtews.fallBackTagUpdate = function(msgHdr, identity, toggleType, categories, key, addKey){ + if (toggleType == "removeAll") { + rtews.removeAllMessageTagsPostEwsUpdate(msgHdr); + } else { + rtews.toggleMessageTagPostEwsUpdate(key, addKey, msgHdr); + } +}; + /* * Custom method for remove all tags menuitem */ @@ -923,12 +964,14 @@ rtews.addSyncMenu = function (menuPopup) { */ rtews.getIdentity = function(server) { var ids = identities; - for (var x = 0, len = ids.length; x < len; x++) { - if (ids[x] && ids[x].enabled == true && ids[x].server == server) { - return ids[x]; - } + if( ids ){ + for (var x = 0, len = ids.length; x < len; x++) { + if (ids[x] && ids[x].enabled == true && ids[x].server == server) { + return ids[x]; + } + } } - return null; + return null; }; //Get all the identities @@ -1034,36 +1077,25 @@ function getAllAccounts(){ var identity = identities.queryElementAt(index, Ci.nsIMsgIdentity); var calAccount = getCalendarPref(identity.email); var enabled = false; - exchangeGlobalFunction("Account exists for email address - " + identity.email); + exchangeGlobalFunction("Account exists for email address - " + identity.email); var details = null; - if(calAccount){ - enabled = true; - details = { - "server":account.incomingServer.prettyName, - "serverURI":account.incomingServer.serverURI, - "email":calAccount.getCharPref("ecMailbox"), - "username":calAccount.getCharPref("ecUser"), - "name":identity.fullName, - "domain":calAccount.getCharPref("ecDomain"), - "enabled":enabled, - "ewsUrl":calAccount.getCharPref("ecServer"), - "prefs" : calAccount ,}; - } - else{ - details = { - "server":account.incomingServer.prettyName, - "serverURI":account.incomingServer.serverURI, - "email":null, - "username":null, - "name":identity.fullName, - "domain":null, - "enabled":enabled, - "ewsUrl":null, - "prefs" : null ,}; - } - - if( details.enabled == true){ + + if(calAccount && mivFunctions ){ + enabled = mivFunctions.safeGetBoolPref(calAccount, "mailsync.active", false) ; + details = { + "server":account.incomingServer.prettyName, + "serverURI":account.incomingServer.serverURI, + "email":mivFunctions.safeGetCharPref(calAccount,"ecMailbox"), + "username":mivFunctions.safeGetCharPref(calAccount,"ecUser"), + "name":identity.fullName, + "domain":mivFunctions.safeGetCharPref(calAccount,"ecDomain"), + "enabled":enabled, + "ewsUrl":mivFunctions.safeGetCharPref(calAccount,"ecServer"), + "prefs" : calAccount , + }; + } + if( details.enabled == true){ _accounts.push(details); } } @@ -1086,33 +1118,22 @@ function getAllAccounts(){ exchangeGlobalFunction("Account exists for email address - " + identity.email); let details = null; - if(calAccount){ - enabled = true; - details = { - "server":account.incomingServer.prettyName, - "serverURI":account.incomingServer.serverURI, - "email":calAccount.getCharPref("ecMailbox"), - "username":calAccount.getCharPref("ecUser"), - "name":identity.fullName, - "domain":calAccount.getCharPref("ecDomain"), - "enabled":enabled, - "ewsUrl":calAccount.getCharPref("ecServer"), - "prefs" : calAccount ,}; - } - else{ - details = { - "server":account.incomingServer.prettyName, - "serverURI":account.incomingServer.serverURI, - "email":null, - "username":null, - "name":identity.fullName, - "domain":null, - "enabled":enabled, - "ewsUrl":null, - "prefs" : null ,}; - } - if( details.enabled == true ){ + if(calAccount && mivFunctions ){ + enabled = mivFunctions.safeGetBoolPref(calAccount, "mailsync.active", false) ; + details = { + "server":account.incomingServer.prettyName, + "serverURI":account.incomingServer.serverURI, + "email":mivFunctions.safeGetCharPref(calAccount,"ecMailbox"), + "username":mivFunctions.safeGetCharPref(calAccount,"ecUser"), + "name":identity.fullName, + "domain":mivFunctions.safeGetCharPref(calAccount,"ecDomain"), + "enabled":enabled, + "ewsUrl":mivFunctions.safeGetCharPref(calAccount,"ecServer"), + "prefs" : calAccount , + }; + } + if( details.enabled == true ){ _accounts.push(details); } } diff --git a/components/ecExchangeRequest.js b/components/ecExchangeRequest.js index 4dace04e..32464bfe 100644 --- a/components/ecExchangeRequest.js +++ b/components/ecExchangeRequest.js @@ -1109,7 +1109,7 @@ try { } } else { - var rm = xml2json.XPath(aResp,"/s:Envelope/s:Body/*/m:ResponseMessages/*[@ResponseClass='Error']"); + var rm = aResp.XPath("/s:Envelope/s:Body/*/m:ResponseMessages/*[@ResponseClass='Error']"); var result; if (rm.length > 0) { result = rm[0].getTagValue("m:MessageText").value+"("+rm[0].getTagValue("m:ResponseCode")+")"; diff --git a/interfaces/exchangeAuthPrompt2/mivExchangeAuthPrompt2.js b/interfaces/exchangeAuthPrompt2/mivExchangeAuthPrompt2.js index 503662b4..63f88617 100644 --- a/interfaces/exchangeAuthPrompt2/mivExchangeAuthPrompt2.js +++ b/interfaces/exchangeAuthPrompt2/mivExchangeAuthPrompt2.js @@ -131,45 +131,41 @@ mivExchangeAuthPrompt2.prototype = { When no password at al always ask. */ - var password=null; + var password; + if (this.passwordCache[username+"|"+aURL+"|"+realm]) { + this.logInfo("getPassword: There is a password in the passwordCache["+username+"|"+aURL+"|"+realm+"]"); + password = this.passwordCache[username+"|"+aURL+"|"+realm]; + } + else { + this.logInfo("getPassword: There is no password in the passwordCache["+username+"|"+aURL+"|"+realm+"]"); + } + if (this.showPassword) { + this.logInfo("getPassword: password(1)="+password); + } + else { + this.logInfo("getPassword: password(1)=********"); + } - if (!password) { - this.logInfo("getPassword: Going to see if there is one in the passwordManager."); + var oldSavedPassword; + if (!password) { + this.logInfo("getPassword: There is no password in the cache. Going to see if there is one in the passwordManager."); var savedPassword = this.passwordManagerGet(username, aURL, realm); if (savedPassword.result) { this.logInfo("getPassword: There is a password stored in the passwordManager."); password = savedPassword.password; + oldSavedPassword = savedPassword.password; } else { this.logInfo("getPassword: There is no password stored in the passwordManager."); } } - if (this.showPassword) { - this.logInfo("getPassword: password(1)="+password); + this.logInfo("getPassword: password(2)="+password); } else { - this.logInfo("getPassword: password(1)=********"); + this.logInfo("getPassword: password(2)=********"); } - - if (!password) { - this.logInfo("getPassword: Going to see if there is one in the passwordCache."); - if (this.passwordCache[username+"|"+aURL+"|"+realm]) { - this.logInfo("getPassword: There is a password in the passwordCache["+username+"|"+aURL+"|"+realm+"]"); - password = this.passwordCache[username+"|"+aURL+"|"+realm]; - } - else { - this.logInfo("getPassword: There is no password in the passwordCache["+username+"|"+aURL+"|"+realm+"]"); - } - if (this.showPassword) { - this.logInfo("getPassword: password(2)="+password); - } - else { - this.logInfo("getPassword: password(2)=********"); - } - } - if ((password) && (aChannel) && (aChannel.URI.password) && (decodeURIComponent(aChannel.URI.password) != "")) { this.logInfo("getPassword: There was a password in cache or passwordManager and one on the channel. Going to see if they are the same."); if ((password == decodeURIComponent(aChannel.URI.password)) && (!useCached)) { @@ -177,9 +173,13 @@ mivExchangeAuthPrompt2.prototype = { if ((this.details[aURL]) && (this.details[aURL].ntlmCount == 1)) { this.logInfo("getPassword: There was a password in cache or passwordManager and one on the channel. And they are the same. But it is a first pass on an NTLM authentication. Using stored password and going to see if it can be used."); } - else { + else { this.logInfo("getPassword: There was a password in cache or passwordManager and one on the channel. And they are the same. Going to ask user to provide a new password."); - password = null; + var channel = aChannel.QueryInterface(Ci.nsIHttpChannel); + if( channel.responseStatus == 401 ){ + password=null; + this.logInfo("getPassword: Login Failed, Going to ask user to provide a new password."); + } } } else { @@ -190,7 +190,7 @@ mivExchangeAuthPrompt2.prototype = { this.logInfo("getPassword: There was a password in cache or passwordManager and one on the channel. And useCached specified."); } if (this.showPassword) { - this.logInfo("getPassword: cached/store='"+password+"', on channel='"+decodeURIComponent(aChannel.URI.password)+"'."); + this.logInfo("getPassword: cached/store='"+password+"', on channel='"+decodeURIComponent(aChannel.URI.password)+"', useCached='"+useCached+"'."); } else { this.logInfo("getPassword: cached/store='********', on channel='********'."); @@ -230,6 +230,10 @@ mivExchangeAuthPrompt2.prototype = { this.logInfo("getPassword: User requested to store password in passwordmanager."); this.passwordManagerSave(username, password, aURL, realm); } + else{ + this.logInfo("getPassword: User requested not to store password in passwordmanager."); + this.passwordManagerRemove(username, oldSavedPassword, aURL, realm); + } this.passwordCache[username+"|"+aURL+"|"+realm] = password; this.details[aURL].showing = false; } @@ -367,14 +371,16 @@ mivExchangeAuthPrompt2.prototype = { authInfo.username = username.substr(username.indexOf("\\")+1); this.logInfo("asyncPromptAuthNotifyCallback: We have a domainname part in the username. Going to use it. domain="+authInfo.domain); } - else if (username.indexOf("@") > -1) { - authInfo.username = username; - authInfo.domain = undefined; - this.logInfo("asyncPromptAuthNotifyCallback: We have an E-Mail address as username, therefore discarding the domain property."); - } else { - this.logInfo("asyncPromptAuthNotifyCallback: We do not have a domainname part in the username. Specifying empty one."); - authInfo.username = username; + if (username.indexOf("@") > -1) { + authInfo.username = username.substr(0,username.indexOf("@")); + authInfo.domain = username.substr(username.indexOf("@")+1); + this.logInfo("asyncPromptAuthNotifyCallback: We have a domainname part in the username. Going to use it. domain="+authInfo.domain); + } + else { + this.logInfo("asyncPromptAuthNotifyCallback: We do not have a domainname part in the username. Specifying empty one."); + authInfo.username = username; + } } } else { @@ -632,7 +638,43 @@ mivExchangeAuthPrompt2.prototype = { } return { result: false }; }, + + passwordManagerRemove: function _passwordManagerRemove(aUsername, aPassword, aURL, aRealm) + { + if ((!aUsername) || (!aURL) || (!aRealm)) { + this.logInfo("passwordManagerRemove: username or hostname or realm is empty. Not allowed!!!"); + return; + } + + try { + var loginManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); + var logins = loginManager.findLogins({}, aURL, null, aRealm); + + var newLoginInfo = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(Ci.nsILoginInfo); + newLoginInfo.init(aURL, null, aRealm, aUsername, aPassword, "", ""); + + if (logins.length > 0) { + var modified = false; + for each (let loginInfo in logins) { + if (loginInfo.username == aUsername) { + this.logInfo("Login credentials updated:username="+aUsername+", aURL="+aURL+", aRealm="+aRealm); + loginManager.removeLogin(loginInfo); + modified = true; + break; + } + } + if (!modified) { + this.logInfo("Login credentials saved:username="+aUsername+", aURL="+aURL+", aRealm="+aRealm); + } + } else { + this.logInfo("Login credentials saved:username="+aUsername+", aURL="+aURL+", aRealm="+aRealm); + } + } catch (exc) { + this.logInfo(exc); + } + }, + /** * Helper to insert/update an entry to the password manager. * diff --git a/locale/exchangecalendar/de/calExchangeCalendar.properties b/locale/exchangecalendar/de/calExchangeCalendar.properties index 781cf174..9cb592b5 100644 --- a/locale/exchangecalendar/de/calExchangeCalendar.properties +++ b/locale/exchangecalendar/de/calExchangeCalendar.properties @@ -16,7 +16,7 @@ ewsMeetingResponsEventMessage=Besprechungsanfrage "%1$S" beantwortet mit "%2$S" ecErrorServerCheck=Fehler bei Abfrage des Servers:%1$S (%2$S) ecErrorAutodiscovery=Fehler bei Autodiscovery:%1$S (%2$S) -ecErrorAutodiscoveryURLInvalid=Die Postfacheinstellungen konnten nicht durch Autodiscovery mit dem Domainnamen des Postfachs ermittelt werden. (%1$S).\nNormalerweise bedeutet dies, dass kein Autodiscovery-Server mit dem Domainnamen als Hostnamen definiert ist. +ecErrorAutodiscoveryURLInvalid=Die Postfacheinstellungen konnten nicht durch Autodiscovery in der Domäne des Postfachs ermittelt werden. (%1$S).\nNormalerweise bedeutet dies, dass kein Autodiscovery-Server mit dem Name der Domäne als Hostname definiert ist. ecErrorServerCheckURLInvalid=Server "%1$S" existiert nicht. ecErrorServerAndMailboxCheck=Fehler bei der Abfrage des Servers und des Postfachs:%1$S (Code: %2$S) diff --git a/locale/exchangecalendar/de/delegate-calendar-dialog.dtd b/locale/exchangecalendar/de/delegate-calendar-dialog.dtd index 52eb16c2..760cf541 100644 --- a/locale/exchangecalendar/de/delegate-calendar-dialog.dtd +++ b/locale/exchangecalendar/de/delegate-calendar-dialog.dtd @@ -7,10 +7,10 @@ - + - - + + diff --git a/locale/exchangecalendar/de/delegate-folder.dtd b/locale/exchangecalendar/de/delegate-folder.dtd index 2ce88d16..cf59c8d1 100644 --- a/locale/exchangecalendar/de/delegate-folder.dtd +++ b/locale/exchangecalendar/de/delegate-folder.dtd @@ -1,45 +1,45 @@ - + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - + + + + - + - - + + - - - - + + + + - - - - - - - - + + + + + + + + - - + + diff --git a/locale/exchangecalendar/de/exchangeSettings.dtd b/locale/exchangecalendar/de/exchangeSettings.dtd index 37084b31..7189b21f 100644 --- a/locale/exchangecalendar/de/exchangeSettings.dtd +++ b/locale/exchangecalendar/de/exchangeSettings.dtd @@ -44,6 +44,8 @@ - - - + + + + + diff --git a/locale/exchangecalendar/de/exchangeSettingsOverlay.dtd b/locale/exchangecalendar/de/exchangeSettingsOverlay.dtd index c1790510..2e86f2e2 100644 --- a/locale/exchangecalendar/de/exchangeSettingsOverlay.dtd +++ b/locale/exchangecalendar/de/exchangeSettingsOverlay.dtd @@ -41,7 +41,7 @@ - + diff --git a/locale/exchangecalendar/de/manageEWSAccounts.dtd b/locale/exchangecalendar/de/manageEWSAccounts.dtd index b3ac5336..ab937944 100644 --- a/locale/exchangecalendar/de/manageEWSAccounts.dtd +++ b/locale/exchangecalendar/de/manageEWSAccounts.dtd @@ -7,7 +7,7 @@ - + diff --git a/locale/exchangecalendar/de/rtews.dtd b/locale/exchangecalendar/de/rtews.dtd index b60f11fd..00af607b 100755 --- a/locale/exchangecalendar/de/rtews.dtd +++ b/locale/exchangecalendar/de/rtews.dtd @@ -1,15 +1,15 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/locale/exchangecalendar/de/timezonePreference.dtd b/locale/exchangecalendar/de/timezonePreference.dtd index a61aa649..e0dd46ac 100644 --- a/locale/exchangecalendar/de/timezonePreference.dtd +++ b/locale/exchangecalendar/de/timezonePreference.dtd @@ -1 +1 @@ - + diff --git a/locale/exchangecalendar/en-US/exchangeSettings.dtd b/locale/exchangecalendar/en-US/exchangeSettings.dtd index 7788d246..e2150494 100644 --- a/locale/exchangecalendar/en-US/exchangeSettings.dtd +++ b/locale/exchangecalendar/en-US/exchangeSettings.dtd @@ -48,4 +48,5 @@ + diff --git a/locale/exchangecalendar/fr-FR/exchangeSettings.dtd b/locale/exchangecalendar/fr-FR/exchangeSettings.dtd index f79090d6..539338e2 100644 --- a/locale/exchangecalendar/fr-FR/exchangeSettings.dtd +++ b/locale/exchangecalendar/fr-FR/exchangeSettings.dtd @@ -50,3 +50,4 @@ + diff --git a/locale/exchangecalendar/ja-JP/exchangeSettings.dtd b/locale/exchangecalendar/ja-JP/exchangeSettings.dtd index ac3f37d4..480e60b9 100644 --- a/locale/exchangecalendar/ja-JP/exchangeSettings.dtd +++ b/locale/exchangecalendar/ja-JP/exchangeSettings.dtd @@ -49,3 +49,4 @@ + diff --git a/locale/exchangecalendar/nl/exchangeSettings.dtd b/locale/exchangecalendar/nl/exchangeSettings.dtd index b5706bfd..476b4043 100644 --- a/locale/exchangecalendar/nl/exchangeSettings.dtd +++ b/locale/exchangecalendar/nl/exchangeSettings.dtd @@ -50,3 +50,4 @@ + diff --git a/locale/exchangecalendar/ru/exchangeSettings.dtd b/locale/exchangecalendar/ru/exchangeSettings.dtd index 521eb830..0578e03f 100644 --- a/locale/exchangecalendar/ru/exchangeSettings.dtd +++ b/locale/exchangecalendar/ru/exchangeSettings.dtd @@ -49,3 +49,4 @@ + diff --git a/locale/exchangecalendar/sv/exchangeSettings.dtd b/locale/exchangecalendar/sv/exchangeSettings.dtd index 13fa28b7..15e3cf77 100644 --- a/locale/exchangecalendar/sv/exchangeSettings.dtd +++ b/locale/exchangecalendar/sv/exchangeSettings.dtd @@ -48,3 +48,4 @@ + diff --git a/locale/exchangecalendar/tr/exchangeSettings.dtd b/locale/exchangecalendar/tr/exchangeSettings.dtd index 1cfd499b..fec7ab5b 100644 --- a/locale/exchangecalendar/tr/exchangeSettings.dtd +++ b/locale/exchangecalendar/tr/exchangeSettings.dtd @@ -49,3 +49,4 @@ +