--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: bookworm
User: release.debian....@packages.debian.org
Usertags: pu
X-Debbugs-Cc: tbs...@packages.debian.org, mechti...@debian.org
Control: affects -1 + src:tbsync
[ Reason ]
This package is an extension to thunderbird. After thunderbird is
updated to version 115.* in bookwork it is necessary to update this
extension too.
[ Impact ]
Otherwise this extension doesn't work anymore
[ Risks ]
Only dav4tbsync and eas4tbsync are affected and will be updated too
[ Checklist ]
[X] *all* changes are documented in the d/changelog
[X] I reviewed all changes and I approve them
[X] attach debdiff against the package in (old)stable
[X] the issue is verified as fixed in unstable
[ Changes ]
There is a new version of tbsync to work with thunderbird 115.x
[ Other info ]
The output von debdiff (stable vs stable-pu is attached)
dav4tbsync and eas4tbsync will follow
Kind regards to the release team
Mechtilde
--
Mechtilde Stehmann
## Debian Developer
## PGP encryption welcome
## F0E3 7F3D C87A 4998 2899 39E7 F287 7BBA 141A AD7F
diffstat for tbsync-4.3 tbsync-4.7
_locales/bg/messages.json | 7
_locales/cs/messages.json | 7
_locales/de/messages.json | 91 +--
_locales/en-US/messages.json | 7
_locales/es/messages.json | 7
_locales/et/messages.json | 7
_locales/fr/messages.json | 7
_locales/gl/messages.json | 9
_locales/hu/messages.json | 7
_locales/it/messages.json | 7
_locales/ja/messages.json | 7
_locales/ko/messages.json | 7
_locales/pl/messages.json | 7
_locales/pt_BR/messages.json | 7
_locales/ro/messages.json | 7
_locales/ru/messages.json | 7
_locales/sv/messages.json | 7
content/api/BootstrapLoader/CHANGELOG.md | 15
content/api/BootstrapLoader/implementation.js | 676 ++++++++++++++++++++------
content/api/BootstrapLoader/schema.json | 4
content/manager/accounts.js | 12
content/manager/accounts.xhtml | 4
content/manager/editAccount.js | 3
content/manager/editAccount.xhtml | 7
content/manager/eventlog/eventlog.js | 9
content/manager/eventlog/eventlog.xhtml | 14
content/modules/db.js | 13
content/modules/io.js | 4
content/modules/lightning.js | 2
content/modules/manager.js | 11
content/passwordPrompt/passwordPrompt.css | 13
content/passwordPrompt/passwordPrompt.js | 8
content/passwordPrompt/passwordPrompt.xhtml | 44 -
content/tbsync.jsm | 3
debian/changelog | 26 +
debian/control | 6
debian/gbp.conf | 2
manifest.json | 4
38 files changed, 800 insertions(+), 285 deletions(-)
diff -Nru tbsync-4.3/content/api/BootstrapLoader/CHANGELOG.md tbsync-4.7/content/api/BootstrapLoader/CHANGELOG.md
--- tbsync-4.3/content/api/BootstrapLoader/CHANGELOG.md 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/api/BootstrapLoader/CHANGELOG.md 2023-08-29 22:22:49.000000000 +0200
@@ -1,3 +1,18 @@
+Version: 1.21
+-------------
+- Explicitly set hasAddonManagerEventListeners flag to false on uninstall
+
+Version: 1.20
+-------------
+- hard fork BootstrapLoader v1.19 implementation and continue to serve it for
+ Thunderbird 111 and older
+- BootstrapLoader v1.20 has removed a lot of unnecessary code used for backward
+ compatibility
+
+Version: 1.19
+-------------
+- fix race condition which could prevent the AOM tab to be monkey patched correctly
+
Version: 1.18
-------------
- be precise on which revision the wrench symbol should be displayed, instead of
diff -Nru tbsync-4.3/content/api/BootstrapLoader/implementation.js tbsync-4.7/content/api/BootstrapLoader/implementation.js
--- tbsync-4.3/content/api/BootstrapLoader/implementation.js 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/api/BootstrapLoader/implementation.js 2023-08-29 22:22:49.000000000 +0200
@@ -2,7 +2,7 @@
* This file is provided by the addon-developer-support repository at
* https://github.com/thundernest/addon-developer-support
*
- * Version: 1.18
+ * Version: 1.21
*
* Author: John Bieling (j...@thunderbird.net)
*
@@ -17,70 +17,65 @@
var { AddonManager } = ChromeUtils.import("resource://gre/modules/AddonManager.jsm");
var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-var BootstrapLoader = class extends ExtensionCommon.ExtensionAPI {
- getMessenger(context) {
- let apis = [
- "storage",
- "runtime",
- "extension",
- "i18n",
- ];
-
- function getStorage() {
- let localstorage = null;
- try {
- localstorage = context.apiCan.findAPIPath("storage");
- localstorage.local.get = (...args) =>
- localstorage.local.callMethodInParentProcess("get", args);
- localstorage.local.set = (...args) =>
- localstorage.local.callMethodInParentProcess("set", args);
- localstorage.local.remove = (...args) =>
- localstorage.local.callMethodInParentProcess("remove", args);
- localstorage.local.clear = (...args) =>
- localstorage.local.callMethodInParentProcess("clear", args);
- } catch (e) {
- console.info("Storage permission is missing");
- }
- return localstorage;
- }
-
- let messenger = {};
- for (let api of apis) {
- switch (api) {
- case "storage":
- XPCOMUtils.defineLazyGetter(messenger, "storage", () =>
- getStorage()
- );
- break;
+function getThunderbirdVersion() {
+ let parts = Services.appinfo.version.split(".");
+ return {
+ major: parseInt(parts[0]),
+ minor: parseInt(parts[1]),
+ revision: parts.length > 2 ? parseInt(parts[2]) : 0,
+ }
+}
- default:
- XPCOMUtils.defineLazyGetter(messenger, api, () =>
- context.apiCan.findAPIPath(api)
- );
- }
+function getMessenger(context) {
+ let apis = ["storage", "runtime", "extension", "i18n"];
+
+ function getStorage() {
+ let localstorage = null;
+ try {
+ localstorage = context.apiCan.findAPIPath("storage");
+ localstorage.local.get = (...args) =>
+ localstorage.local.callMethodInParentProcess("get", args);
+ localstorage.local.set = (...args) =>
+ localstorage.local.callMethodInParentProcess("set", args);
+ localstorage.local.remove = (...args) =>
+ localstorage.local.callMethodInParentProcess("remove", args);
+ localstorage.local.clear = (...args) =>
+ localstorage.local.callMethodInParentProcess("clear", args);
+ } catch (e) {
+ console.info("Storage permission is missing");
}
- return messenger;
+ return localstorage;
}
- getThunderbirdVersion() {
- let parts = Services.appinfo.version.split(".");
- return {
- major: parseInt(parts[0]),
- minor: parseInt(parts[1]),
- revision: parts.length > 2 ? parseInt(parts[2]) : 0,
+ let messenger = {};
+ for (let api of apis) {
+ switch (api) {
+ case "storage":
+ XPCOMUtils.defineLazyGetter(messenger, "storage", () =>
+ getStorage()
+ );
+ break;
+
+ default:
+ XPCOMUtils.defineLazyGetter(messenger, api, () =>
+ context.apiCan.findAPIPath(api)
+ );
}
}
-
+ return messenger;
+}
+
+var BootstrapLoader_102 = class extends ExtensionCommon.ExtensionAPI {
getCards(e) {
// This gets triggered by real events but also manually by providing the outer window.
// The event is attached to the outer browser, get the inner one.
let doc;
-
+
// 78,86, and 87+ need special handholding. *Yeah*.
- if (this.getThunderbirdVersion().major < 86) {
+ if (getThunderbirdVersion().major < 86) {
let ownerDoc = e.document || e.target.ownerDocument;
doc = ownerDoc.getElementById("html-view-browser").contentDocument;
- } else if (this.getThunderbirdVersion().major < 87) {
+ } else if (getThunderbirdVersion().major < 87) {
let ownerDoc = e.document || e.target;
doc = ownerDoc.getElementById("html-view-browser").contentDocument;
} else {
@@ -88,42 +83,42 @@
}
return doc.querySelectorAll("addon-card");
}
-
+
// Add pref entry to 68
add68PrefsEntry(event) {
let id = this.menu_addonPrefs_id + "_" + this.uniqueRandomID;
// Get the best size of the icon (16px or bigger)
- let iconSizes = this.extension.manifest.icons
+ let iconSizes = this.extension.manifest.icons
? Object.keys(this.extension.manifest.icons)
: [];
- iconSizes.sort((a,b)=>a-b);
+ iconSizes.sort((a, b) => a - b);
let bestSize = iconSizes.filter(e => parseInt(e) >= 16).shift();
let icon = bestSize ? this.extension.manifest.icons[bestSize] : "";
let name = this.extension.manifest.name;
let entry = icon
? event.target.ownerGlobal.MozXULElement.parseXULToFragment(
- `<menuitem class="menuitem-iconic" id="${id}" image="${icon}" label="${name}" />`)
- : event.target.ownerGlobal.MozXULElement.parseXULToFragment(
- `<menuitem id="${id}" label="${name}" />`);
-
+ `<menuitem class="menuitem-iconic" id="${id}" image="${icon}" label="${name}" />`)
+ : event.target.ownerGlobal.MozXULElement.parseXULToFragment(
+ `<menuitem id="${id}" label="${name}" />`);
+
event.target.appendChild(entry);
let noPrefsElem = event.target.querySelector('[disabled="true"]');
// using collapse could be undone by core, so we use display none
// noPrefsElem.setAttribute("collapsed", "true");
noPrefsElem.style.display = "none";
event.target.ownerGlobal.document.getElementById(id).addEventListener("command", this);
- }
+ }
// Event handler for the addon manager, to update the state of the options button.
- handleEvent(e) {
+ handleEvent(e) {
switch (e.type) {
// 68 add-on options menu showing
case "popupshowing": {
this.add68PrefsEntry(e);
}
- break;
+ break;
// 78/88 add-on options menu/button click
case "click": {
@@ -131,31 +126,31 @@
e.stopPropagation();
let BL = {}
BL.extension = this.extension;
- BL.messenger = this.getMessenger(this.context);
+ BL.messenger = getMessenger(this.context);
let w = Services.wm.getMostRecentWindow("mail:3pane");
- w.openDialog(this.pathToOptionsPage, "AddonOptions", "chrome,resizable,centerscreen", BL);
+ w.openDialog(this.pathToOptionsPage, "AddonOptions", "chrome,resizable,centerscreen", BL);
}
- break;
-
+ break;
+
// 68 add-on options menu command
case "command": {
let BL = {}
BL.extension = this.extension;
- BL.messenger = this.getMessenger(this.context);
+ BL.messenger = getMessenger(this.context);
e.target.ownerGlobal.openDialog(this.pathToOptionsPage, "AddonOptions", "chrome,resizable,centerscreen", BL);
}
- break;
-
+ break;
+
// update, ViewChanged and manual call for add-on manager options overlay
default: {
let cards = this.getCards(e);
for (let card of cards) {
// Setup either the options entry in the menu or the button
if (card.addon.id == this.extension.id) {
- let optionsMenu =
- (this.getThunderbirdVersion().major > 78 && this.getThunderbirdVersion().major < 88) ||
- (this.getThunderbirdVersion().major == 78 && this.getThunderbirdVersion().minor < 10) ||
- (this.getThunderbirdVersion().major == 78 && this.getThunderbirdVersion().minor == 10 && this.getThunderbirdVersion().revision < 2);
+ let optionsMenu =
+ (getThunderbirdVersion().major > 78 && getThunderbirdVersion().major < 88) ||
+ (getThunderbirdVersion().major == 78 && getThunderbirdVersion().minor < 10) ||
+ (getThunderbirdVersion().major == 78 && getThunderbirdVersion().minor == 10 && getThunderbirdVersion().revision < 2);
if (optionsMenu) {
// Options menu in 78.0-78.10 and 79-87
let addonOptionsLegacyEntry = card.querySelector(".extension-options-legacy");
@@ -204,10 +199,10 @@
}
}
}
- }
- }
-
-// Some tab/add-on-manager related functions
+ }
+ }
+
+ // Some tab/add-on-manager related functions
getTabMail(window) {
return window.document.getElementById("tabmail");
}
@@ -215,7 +210,7 @@
// returns the outer browser, not the nested browser of the add-on manager
// events must be attached to the outer browser
getAddonManagerFromTab(tab) {
- if (tab.browser) {
+ if (tab.browser && tab.mode.name == "contentTab") {
let win = tab.browser.contentWindow;
if (win && win.location.href == "about:addons") {
return win;
@@ -226,9 +221,28 @@
getAddonManagerFromWindow(window) {
let tabMail = this.getTabMail(window);
for (let tab of tabMail.tabInfo) {
- let win = this.getAddonManagerFromTab(tab)
- if (win) {
- return win;
+ let managerWindow = this.getAddonManagerFromTab(tab);
+ if (managerWindow) {
+ return managerWindow;
+ }
+ }
+ }
+
+ async getAddonManagerFromWindowWaitForLoad(window) {
+ let { setTimeout } = Services.wm.getMostRecentWindow("mail:3pane");
+
+ let tabMail = this.getTabMail(window);
+ for (let tab of tabMail.tabInfo) {
+ if (tab.browser && tab.mode.name == "contentTab") {
+ // Instead of registering a load observer, wait until its loaded. Not nice,
+ // but gets aroud a lot of edge cases.
+ while (!tab.pageLoaded) {
+ await new Promise(r => setTimeout(r, 150));
+ }
+ let managerWindow = this.getAddonManagerFromTab(tab);
+ if (managerWindow) {
+ return managerWindow;
+ }
}
}
}
@@ -237,15 +251,16 @@
if (!managerWindow) {
return;
}
- if (managerWindow
- && managerWindow[this.uniqueRandomID]
- && managerWindow[this.uniqueRandomID].hasAddonManagerEventListeners
+ if (
+ managerWindow &&
+ managerWindow[this.uniqueRandomID] &&
+ managerWindow[this.uniqueRandomID].hasAddonManagerEventListeners
) {
return;
}
managerWindow.document.addEventListener("ViewChanged", this);
managerWindow.document.addEventListener("update", this);
- managerWindow.document.addEventListener("view-loaded", this);
+ managerWindow.document.addEventListener("view-loaded", this);
managerWindow[this.uniqueRandomID] = {};
managerWindow[this.uniqueRandomID].hasAddonManagerEventListeners = true;
if (forceLoad) {
@@ -262,13 +277,13 @@
this.pathToOptionsPage = null;
this.chromeHandle = null;
this.chromeData = null;
- this.resourceData = null;
+ this.resourceData = null;
this.bootstrappedObj = {};
// make the extension object and the messenger object available inside
// the bootstrapped scope
this.bootstrappedObj.extension = context.extension;
- this.bootstrappedObj.messenger = this.getMessenger(this.context);
+ this.bootstrappedObj.messenger = getMessenger(this.context);
this.BOOTSTRAP_REASONS = {
APP_STARTUP: 1,
@@ -283,49 +298,413 @@
const aomStartup = Cc["@mozilla.org/addons/addon-manager-startup;1"].getService(Ci.amIAddonManagerStartup);
const resProto = Cc["@mozilla.org/network/protocol;1?name=resource"].getService(Ci.nsISubstitutingProtocolHandler);
-
+
let self = this;
// TabMonitor to detect opening of tabs, to setup the options button in the add-on manager.
this.tabMonitor = {
- onTabTitleChanged(aTab) {},
- onTabClosing(aTab) {},
- onTabPersist(aTab) {},
- onTabRestored(aTab) {},
- onTabSwitched(aNewTab, aOldTab) {
- //self.setupAddonManager(self.getAddonManagerFromTab(aNewTab));
+ onTabTitleChanged(tab) { },
+ onTabClosing(tab) { },
+ onTabPersist(tab) { },
+ onTabRestored(tab) { },
+ onTabSwitched(aNewTab, aOldTab) { },
+ async onTabOpened(tab) {
+ if (tab.browser && tab.mode.name == "contentTab") {
+ let { setTimeout } = Services.wm.getMostRecentWindow("mail:3pane");
+ // Instead of registering a load observer, wait until its loaded. Not nice,
+ // but gets aroud a lot of edge cases.
+ while (!tab.pageLoaded) {
+ await new Promise(r => setTimeout(r, 150));
+ }
+ self.setupAddonManager(self.getAddonManagerFromTab(tab));
+ }
},
- async onTabOpened(aTab) {
- if (aTab.browser) {
- if (!aTab.pageLoaded) {
- // await a location change if browser is not loaded yet
- await new Promise(resolve => {
- let reporterListener = {
- QueryInterface: ChromeUtils.generateQI([
- "nsIWebProgressListener",
- "nsISupportsWeakReference",
- ]),
- onStateChange() {},
- onProgressChange() {},
- onLocationChange(
- /* in nsIWebProgress*/ aWebProgress,
- /* in nsIRequest*/ aRequest,
- /* in nsIURI*/ aLocation
- ) {
- aTab.browser.removeProgressListener(reporterListener);
- resolve();
- },
- onStatusChange() {},
- onSecurityChange() {},
- onContentBlockingEvent() {}
- }
- aTab.browser.addProgressListener(reporterListener);
+ };
+
+ return {
+ BootstrapLoader: {
+
+ registerOptionsPage(optionsUrl) {
+ self.pathToOptionsPage = optionsUrl.startsWith("chrome://")
+ ? optionsUrl
+ : context.extension.rootURI.resolve(optionsUrl);
+ },
+
+ openOptionsDialog(windowId) {
+ let window = context.extension.windowManager.get(windowId, context).window
+ let BL = {}
+ BL.extension = self.extension;
+ BL.messenger = getMessenger(self.context);
+ window.openDialog(self.pathToOptionsPage, "AddonOptions", "chrome,resizable,centerscreen", BL);
+ },
+
+ registerChromeUrl(data) {
+ let chromeData = [];
+ let resourceData = [];
+ for (let entry of data) {
+ if (entry[0] == "resource") resourceData.push(entry);
+ else chromeData.push(entry)
+ }
+
+ if (chromeData.length > 0) {
+ const manifestURI = Services.io.newURI(
+ "manifest.json",
+ null,
+ context.extension.rootURI
+ );
+ self.chromeHandle = aomStartup.registerChrome(manifestURI, chromeData);
+ }
+
+ for (let res of resourceData) {
+ // [ "resource", "shortname" , "path" ]
+ let uri = Services.io.newURI(
+ res[2],
+ null,
+ context.extension.rootURI
+ );
+ resProto.setSubstitutionWithFlags(
+ res[1],
+ uri,
+ resProto.ALLOW_CONTENT_ACCESS
+ );
+ }
+
+ self.chromeData = chromeData;
+ self.resourceData = resourceData;
+ },
+
+ registerBootstrapScript: async function (aPath) {
+ self.pathToBootstrapScript = aPath.startsWith("chrome://")
+ ? aPath
+ : context.extension.rootURI.resolve(aPath);
+
+ // Get the addon object belonging to this extension.
+ let addon = await AddonManager.getAddonByID(context.extension.id);
+ //make the addon globally available in the bootstrapped scope
+ self.bootstrappedObj.addon = addon;
+
+ // add BOOTSTRAP_REASONS to scope
+ for (let reason of Object.keys(self.BOOTSTRAP_REASONS)) {
+ self.bootstrappedObj[reason] = self.BOOTSTRAP_REASONS[reason];
+ }
+
+ // Load registered bootstrap scripts and execute its startup() function.
+ try {
+ if (self.pathToBootstrapScript) Services.scriptloader.loadSubScript(self.pathToBootstrapScript, self.bootstrappedObj, "UTF-8");
+ if (self.bootstrappedObj.startup) self.bootstrappedObj.startup.call(self.bootstrappedObj, self.extension.addonData, self.BOOTSTRAP_REASONS[self.extension.startupReason]);
+ } catch (e) {
+ Components.utils.reportError(e)
+ }
+
+ // Register window listener for main TB window
+ if (self.pathToOptionsPage) {
+ ExtensionSupport.registerWindowListener("injectListener_" + self.uniqueRandomID, {
+ chromeURLs: [
+ "chrome://messenger/content/messenger.xul",
+ "chrome://messenger/content/messenger.xhtml",
+ ],
+ async onLoadWindow(window) {
+ if (getThunderbirdVersion().major < 78) {
+ let element_addonPrefs = window.document.getElementById(self.menu_addonPrefs_id);
+ element_addonPrefs.addEventListener("popupshowing", self);
+ } else {
+ // Add a tabmonitor, to be able to setup the options button/menu in the add-on manager.
+ self.getTabMail(window).registerTabMonitor(self.tabMonitor);
+ window[self.uniqueRandomID] = {};
+ window[self.uniqueRandomID].hasTabMonitor = true;
+ // Setup the options button/menu in the add-on manager, if it is already open.
+ let managerWindow = await self.getAddonManagerFromWindowWaitForLoad(window);
+ self.setupAddonManager(managerWindow, true);
+ }
+ },
+
+ onUnloadWindow(window) {
+ }
});
}
- // Setup the ViewChange event listener in the outer browser of the add-on,
- // but do not actually add the button/menu, as the inner browser is not yet ready,
- // let the ViewChange event do it
- self.setupAddonManager(self.getAddonManagerFromTab(aTab));
+ }
+ }
+ };
+ }
+
+ onShutdown(isAppShutdown) {
+ if (isAppShutdown) {
+ return; // the application gets unloaded anyway
+ }
+
+ //remove our entry in the add-on options menu
+ if (this.pathToOptionsPage) {
+ for (let window of Services.wm.getEnumerator("mail:3pane")) {
+ if (getThunderbirdVersion().major < 78) {
+ let element_addonPrefs = window.document.getElementById(this.menu_addonPrefs_id);
+ element_addonPrefs.removeEventListener("popupshowing", this);
+ // Remove our entry.
+ let entry = window.document.getElementById(this.menu_addonPrefs_id + "_" + this.uniqueRandomID);
+ if (entry) entry.remove();
+ // Do we have to unhide the noPrefsElement?
+ if (element_addonPrefs.children.length == 1) {
+ let noPrefsElem = element_addonPrefs.querySelector('[disabled="true"]');
+ noPrefsElem.style.display = "inline";
+ }
+ } else {
+ // Remove event listener for addon manager view changes
+ let managerWindow = this.getAddonManagerFromWindow(window);
+ if (
+ managerWindow &&
+ managerWindow[this.uniqueRandomID] &&
+ managerWindow[this.uniqueRandomID].hasAddonManagerEventListeners
+ ) {
+ managerWindow.document.removeEventListener("ViewChanged", this);
+ managerWindow.document.removeEventListener("update", this);
+ managerWindow.document.removeEventListener("view-loaded", this);
+ managerWindow[this.uniqueRandomID].hasAddonManagerEventListeners = false;
+
+ let cards = this.getCards(managerWindow);
+ if (getThunderbirdVersion().major < 88) {
+ // Remove options menu in 78-87
+ for (let card of cards) {
+ let addonOptionsLegacyEntry = card.querySelector(".extension-options-legacy");
+ if (addonOptionsLegacyEntry) addonOptionsLegacyEntry.remove();
+ }
+ } else {
+ // Remove options button in 88
+ for (let card of cards) {
+ if (card.addon.id == this.extension.id) {
+ let addonOptionsButton = card.querySelector(".extension-options-button2");
+ if (addonOptionsButton) addonOptionsButton.remove();
+ break;
+ }
+ }
+ }
+ }
+
+ // Remove tabmonitor
+ if (window[this.uniqueRandomID].hasTabMonitor) {
+ this.getTabMail(window).unregisterTabMonitor(this.tabMonitor);
+ window[this.uniqueRandomID].hasTabMonitor = false;
+ }
+
+ }
+ }
+ // Stop listening for new windows.
+ ExtensionSupport.unregisterWindowListener("injectListener_" + this.uniqueRandomID);
+ }
+
+ // Execute registered shutdown()
+ try {
+ if (this.bootstrappedObj.shutdown) {
+ this.bootstrappedObj.shutdown(
+ this.extension.addonData,
+ isAppShutdown
+ ? this.BOOTSTRAP_REASONS.APP_SHUTDOWN
+ : this.BOOTSTRAP_REASONS.ADDON_DISABLE);
+ }
+ } catch (e) {
+ Components.utils.reportError(e)
+ }
+
+ if (this.resourceData) {
+ const resProto = Cc["@mozilla.org/network/protocol;1?name=resource"].getService(Ci.nsISubstitutingProtocolHandler);
+ for (let res of this.resourceData) {
+ // [ "resource", "shortname" , "path" ]
+ resProto.setSubstitution(
+ res[1],
+ null,
+ );
+ }
+ }
+
+ if (this.chromeHandle) {
+ this.chromeHandle.destruct();
+ this.chromeHandle = null;
+ }
+ // Flush all caches
+ Services.obs.notifyObservers(null, "startupcache-invalidate");
+ console.log("BootstrapLoader for " + this.extension.id + " unloaded!");
+ }
+};
+
+// Removed all extra code for backward compatibility for better maintainability.
+var BootstrapLoader_115 = class extends ExtensionCommon.ExtensionAPI {
+ getCards(e) {
+ // This gets triggered by real events but also manually by providing the outer window.
+ // The event is attached to the outer browser, get the inner one.
+ let doc = e.document || e.target;
+ return doc.querySelectorAll("addon-card");
+ }
+
+ // Event handler for the addon manager, to update the state of the options button.
+ handleEvent(e) {
+ switch (e.type) {
+ case "click": {
+ e.preventDefault();
+ e.stopPropagation();
+ let BL = {}
+ BL.extension = this.extension;
+ BL.messenger = getMessenger(this.context);
+ let w = Services.wm.getMostRecentWindow("mail:3pane");
+ w.openDialog(
+ this.pathToOptionsPage,
+ "AddonOptions",
+ "chrome,resizable,centerscreen",
+ BL
+ );
+ }
+ break;
+
+
+ // update, ViewChanged and manual call for add-on manager options overlay
+ default: {
+ let cards = this.getCards(e);
+ for (let card of cards) {
+ // Setup either the options entry in the menu or the button
+ if (card.addon.id == this.extension.id) {
+ // Add-on button
+ let addonOptionsButton = card.querySelector(
+ ".windowlistener-options-button"
+ );
+ if (card.addon.isActive && !addonOptionsButton) {
+ let origAddonOptionsButton = card.querySelector(".extension-options-button")
+ origAddonOptionsButton.setAttribute("hidden", "true");
+
+ addonOptionsButton = card.ownerDocument.createElement("button");
+ addonOptionsButton.classList.add("windowlistener-options-button");
+ addonOptionsButton.classList.add("extension-options-button");
+ card.optionsButton.parentNode.insertBefore(
+ addonOptionsButton,
+ card.optionsButton
+ );
+ card
+ .querySelector(".windowlistener-options-button")
+ .addEventListener("click", this);
+ } else if (!card.addon.isActive && addonOptionsButton) {
+ addonOptionsButton.remove();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Some tab/add-on-manager related functions
+ getTabMail(window) {
+ return window.document.getElementById("tabmail");
+ }
+
+ // returns the outer browser, not the nested browser of the add-on manager
+ // events must be attached to the outer browser
+ getAddonManagerFromTab(tab) {
+ if (tab.browser && tab.mode.name == "contentTab") {
+ let win = tab.browser.contentWindow;
+ if (win && win.location.href == "about:addons") {
+ return win;
+ }
+ }
+ }
+
+ getAddonManagerFromWindow(window) {
+ let tabMail = this.getTabMail(window);
+ for (let tab of tabMail.tabInfo) {
+ let managerWindow = this.getAddonManagerFromTab(tab);
+ if (managerWindow) {
+ return managerWindow;
+ }
+ }
+ }
+
+ async getAddonManagerFromWindowWaitForLoad(window) {
+ let { setTimeout } = Services.wm.getMostRecentWindow("mail:3pane");
+
+ let tabMail = this.getTabMail(window);
+ for (let tab of tabMail.tabInfo) {
+ if (tab.browser && tab.mode.name == "contentTab") {
+ // Instead of registering a load observer, wait until its loaded. Not nice,
+ // but gets aroud a lot of edge cases.
+ while (!tab.pageLoaded) {
+ await new Promise(r => setTimeout(r, 150));
+ }
+ let managerWindow = this.getAddonManagerFromTab(tab);
+ if (managerWindow) {
+ return managerWindow;
+ }
+ }
+ }
+ }
+
+ setupAddonManager(managerWindow, forceLoad = false) {
+ if (!managerWindow) {
+ return;
+ }
+ if (!this.pathToOptionsPage) {
+ return;
+ }
+ if (
+ managerWindow &&
+ managerWindow[this.uniqueRandomID] &&
+ managerWindow[this.uniqueRandomID].hasAddonManagerEventListeners
+ ) {
+ return;
+ }
+
+ managerWindow.document.addEventListener("ViewChanged", this);
+ managerWindow.document.addEventListener("update", this);
+ managerWindow.document.addEventListener("view-loaded", this);
+ managerWindow[this.uniqueRandomID] = {};
+ managerWindow[this.uniqueRandomID].hasAddonManagerEventListeners = true;
+ if (forceLoad) {
+ this.handleEvent(managerWindow);
+ }
+ }
+
+ getAPI(context) {
+ this.uniqueRandomID = "AddOnNS" + context.extension.instanceId;
+ this.menu_addonPrefs_id = "addonPrefs";
+
+
+ this.pathToBootstrapScript = null;
+ this.pathToOptionsPage = null;
+ this.chromeHandle = null;
+ this.chromeData = null;
+ this.resourceData = null;
+ this.bootstrappedObj = {};
+
+ // make the extension object and the messenger object available inside
+ // the bootstrapped scope
+ this.bootstrappedObj.extension = context.extension;
+ this.bootstrappedObj.messenger = getMessenger(this.context);
+
+ this.BOOTSTRAP_REASONS = {
+ APP_STARTUP: 1,
+ APP_SHUTDOWN: 2,
+ ADDON_ENABLE: 3,
+ ADDON_DISABLE: 4,
+ ADDON_INSTALL: 5,
+ ADDON_UNINSTALL: 6, // not supported
+ ADDON_UPGRADE: 7,
+ ADDON_DOWNGRADE: 8,
+ };
+
+ const aomStartup = Cc["@mozilla.org/addons/addon-manager-startup;1"].getService(Ci.amIAddonManagerStartup);
+ const resProto = Cc["@mozilla.org/network/protocol;1?name=resource"].getService(Ci.nsISubstitutingProtocolHandler);
+
+ let self = this;
+
+ // TabMonitor to detect opening of tabs, to setup the options button in the add-on manager.
+ this.tabMonitor = {
+ onTabTitleChanged(tab) { },
+ onTabClosing(tab) { },
+ onTabPersist(tab) { },
+ onTabRestored(tab) { },
+ onTabSwitched(aNewTab, aOldTab) { },
+ async onTabOpened(tab) {
+ if (tab.browser && tab.mode.name == "contentTab") {
+ let { setTimeout } = Services.wm.getMostRecentWindow("mail:3pane");
+ // Instead of registering a load observer, wait until its loaded. Not nice,
+ // but gets aroud a lot of edge cases.
+ while (!tab.pageLoaded) {
+ await new Promise(r => setTimeout(r, 150));
+ }
+ self.setupAddonManager(self.getAddonManagerFromTab(tab));
}
},
};
@@ -343,8 +722,8 @@
let window = context.extension.windowManager.get(windowId, context).window
let BL = {}
BL.extension = self.extension;
- BL.messenger = self.getMessenger(self.context);
- window.openDialog(self.pathToOptionsPage, "AddonOptions", "chrome,resizable,centerscreen", BL);
+ BL.messenger = getMessenger(self.context);
+ window.openDialog(self.pathToOptionsPage, "AddonOptions", "chrome,resizable,centerscreen", BL);
},
registerChromeUrl(data) {
@@ -382,7 +761,7 @@
self.resourceData = resourceData;
},
- registerBootstrapScript: async function(aPath) {
+ registerBootstrapScript: async function (aPath) {
self.pathToBootstrapScript = aPath.startsWith("chrome://")
? aPath
: context.extension.rootURI.resolve(aPath);
@@ -404,32 +783,30 @@
} catch (e) {
Components.utils.reportError(e)
}
-
+
// Register window listener for main TB window
if (self.pathToOptionsPage) {
ExtensionSupport.registerWindowListener("injectListener_" + self.uniqueRandomID, {
chromeURLs: [
"chrome://messenger/content/messenger.xul",
- "chrome://messenger/content/messenger.xhtml",
+ "chrome://messenger/content/messenger.xhtml",
],
async onLoadWindow(window) {
- if (self.getThunderbirdVersion().major < 78) {
+ if (getThunderbirdVersion().major < 78) {
let element_addonPrefs = window.document.getElementById(self.menu_addonPrefs_id);
element_addonPrefs.addEventListener("popupshowing", self);
} else {
- // Setup the options button/menu in the add-on manager, if it is already open.
- self.setupAddonManager(
- self.getAddonManagerFromWindow(window),
- true
- );
// Add a tabmonitor, to be able to setup the options button/menu in the add-on manager.
self.getTabMail(window).registerTabMonitor(self.tabMonitor);
window[self.uniqueRandomID] = {};
window[self.uniqueRandomID].hasTabMonitor = true;
+ // Setup the options button/menu in the add-on manager, if it is already open.
+ let managerWindow = await self.getAddonManagerFromWindowWaitForLoad(window);
+ self.setupAddonManager(managerWindow, true);
}
},
- onUnloadWindow(window) {
+ onUnloadWindow(window) {
}
});
}
@@ -442,11 +819,11 @@
if (isAppShutdown) {
return; // the application gets unloaded anyway
}
-
+
//remove our entry in the add-on options menu
if (this.pathToOptionsPage) {
for (let window of Services.wm.getEnumerator("mail:3pane")) {
- if (this.getThunderbirdVersion().major < 78) {
+ if (getThunderbirdVersion().major < 78) {
let element_addonPrefs = window.document.getElementById(this.menu_addonPrefs_id);
element_addonPrefs.removeEventListener("popupshowing", this);
// Remove our entry.
@@ -454,19 +831,24 @@
if (entry) entry.remove();
// Do we have to unhide the noPrefsElement?
if (element_addonPrefs.children.length == 1) {
- let noPrefsElem = element_addonPrefs.querySelector('[disabled="true"]');
- noPrefsElem.style.display = "inline";
- }
+ let noPrefsElem = element_addonPrefs.querySelector('[disabled="true"]');
+ noPrefsElem.style.display = "inline";
+ }
} else {
// Remove event listener for addon manager view changes
let managerWindow = this.getAddonManagerFromWindow(window);
- if (managerWindow && managerWindow[this.uniqueRandomID] && managerWindow[this.uniqueRandomID].hasAddonManagerEventListeners) {
+ if (
+ managerWindow &&
+ managerWindow[this.uniqueRandomID] &&
+ managerWindow[this.uniqueRandomID].hasAddonManagerEventListeners
+ ) {
managerWindow.document.removeEventListener("ViewChanged", this);
managerWindow.document.removeEventListener("update", this);
managerWindow.document.removeEventListener("view-loaded", this);
-
+ managerWindow[this.uniqueRandomID].hasAddonManagerEventListeners = false;
+
let cards = this.getCards(managerWindow);
- if (this.getThunderbirdVersion().major < 88) {
+ if (getThunderbirdVersion().major < 88) {
// Remove options menu in 78-87
for (let card of cards) {
let addonOptionsLegacyEntry = card.querySelector(".extension-options-legacy");
@@ -483,13 +865,13 @@
}
}
}
-
+
// Remove tabmonitor
if (window[this.uniqueRandomID].hasTabMonitor) {
this.getTabMail(window).unregisterTabMonitor(this.tabMonitor);
window[this.uniqueRandomID].hasTabMonitor = false;
}
-
+
}
}
// Stop listening for new windows.
@@ -529,3 +911,7 @@
console.log("BootstrapLoader for " + this.extension.id + " unloaded!");
}
};
+
+var BootstrapLoader = getThunderbirdVersion().major < 111
+ ? BootstrapLoader_102
+ : BootstrapLoader_115;
diff -Nru tbsync-4.3/content/api/BootstrapLoader/schema.json tbsync-4.7/content/api/BootstrapLoader/schema.json
--- tbsync-4.3/content/api/BootstrapLoader/schema.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/api/BootstrapLoader/schema.json 2023-08-29 22:22:49.000000000 +0200
@@ -35,7 +35,7 @@
"type": "array",
"items": {
"type": "array",
- "items" : {
+ "items": {
"type": "string"
}
},
@@ -58,4 +58,4 @@
}
]
}
-]
+]
\ Kein Zeilenumbruch am Dateiende.
diff -Nru tbsync-4.3/content/manager/accounts.js tbsync-4.7/content/manager/accounts.js
--- tbsync-4.3/content/manager/accounts.js 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/manager/accounts.js 2023-08-29 22:22:49.000000000 +0200
@@ -370,9 +370,9 @@
//add icon (use "install provider" icon, if provider not installed)
let itemType = document.createXULElement("image");
- itemType.setAttribute("width", "16");
- itemType.setAttribute("height", "16");
- itemType.setAttribute("style", "margin: 0px 0px 0px 5px;");
+ //itemType.setAttribute("width", "16");
+ //itemType.setAttribute("height", "16");
+ itemType.setAttribute("style", "margin: 0px 0px 0px 5px; width:16px; height:16px");
newListItem.appendChild(itemType);
//add account name
@@ -382,9 +382,9 @@
//add account status
let itemStatus = document.createXULElement("image");
- itemStatus.setAttribute("width", "16");
- itemStatus.setAttribute("height", "16");
- itemStatus.setAttribute("style", "margin: 0px 5px;");
+ //itemStatus.setAttribute("width", "16");
+ //itemStatus.setAttribute("height", "16");
+ itemStatus.setAttribute("style", "margin: 0px 5px; width:16px; height:16px");
newListItem.appendChild(itemStatus);
accountsList.appendChild(newListItem);
diff -Nru tbsync-4.3/content/manager/accounts.xhtml tbsync-4.7/content/manager/accounts.xhtml
--- tbsync-4.3/content/manager/accounts.xhtml 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/manager/accounts.xhtml 2023-08-29 22:22:49.000000000 +0200
@@ -45,9 +45,9 @@
<richlistbox
id="tbSyncAccounts.accounts"
flex="1"
- style="margin: 0 1px"
+ style="margin: 0 1px; width: 200px;"
seltype="single"
- context="tbsync.accountmanger.ContextMenu"
+ context="tbsync.accountmanger.ContextMenu"
onkeypress="if (event.keyCode == 46) {tbSyncAccounts.deleteAccount();}"
onselect="tbSyncAccounts.loadSelectedAccount();">
<listheader style="border-bottom: 1px solid lightgrey;">
diff -Nru tbsync-4.3/content/manager/editAccount.js tbsync-4.7/content/manager/editAccount.js
--- tbsync-4.3/content/manager/editAccount.js 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/manager/editAccount.js 2023-08-29 22:22:49.000000000 +0200
@@ -9,7 +9,6 @@
"use strict";
var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-var { OS } =ChromeUtils.import("resource://gre/modules/osfile.jsm");
var { TbSync } = ChromeUtils.import("chrome://tbsync/content/tbsync.jsm");
var tbSyncAccountSettings = {
@@ -104,7 +103,7 @@
document.getElementById('tbsync.accountsettings.frame').hidden = false;
tbSyncAccountSettings.updateFolderList();
- if (OS.Constants.Sys.Name == "Darwin") { //we might need to find a way to detect MacOS like styling, other themes move the header bar into the tabpanel as well
+ if (Services.appinfo.OS == "Darwin") { //we might need to find a way to detect MacOS like styling, other themes move the header bar into the tabpanel as well
document.getElementById('manager.tabpanels').style["padding-top"] = "3ex";
}
},
diff -Nru tbsync-4.3/content/manager/editAccount.xhtml tbsync-4.7/content/manager/editAccount.xhtml
--- tbsync-4.3/content/manager/editAccount.xhtml 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/manager/editAccount.xhtml 2023-08-29 22:22:49.000000000 +0200
@@ -39,11 +39,11 @@
<label class="header" style="margin-left:0; margin-bottom:1ex;" value="__TBSYNCMSG_manager.tabs.status.general__" />
<checkbox id="tbsync.accountsettings.enabled" oncommand="tbSyncAccountSettings.toggleEnableState(this);" label="__TBSYNCMSG_manager.tabs.status.enableThisAccount__" />
- <vbox class="showIfEnabled">
+ <vbox class="showIfEnabled" style="height:100px; overflow-x: hidden; overflow-y:hidden">
<hbox flex="1">
<vbox flex="1">
<label class="header" style="margin-left:0; margin-bottom:1ex; margin-top:2ex;" value="__TBSYNCMSG_manager.status__" />
- <description flex="1" id="syncstate"></description>
+ <description id="syncstate"></description>
</vbox>
<vbox flex="0">
<label class="header" style="margin-left:0; margin-bottom:1ex; margin-top:1ex; visibility: hidden" value="nix" />
@@ -58,8 +58,7 @@
<description>__TBSYNCMSG_manager.tabs.status.resources.intro__</description>
<richlistbox
id="tbsync.accountsettings.folderlist"
- flex="1"
- style="margin: 0 1px 1px 1ex;padding:0;"
+ style="margin: 0 1px 1px 1ex;padding:0; height:225px; overflow-x: hidden;"
context="tbsync.accountsettings.FolderListContextMenu"
seltype="single">
<listheader id="tbsync.accountsettings.folderlist.header" style="border-bottom: 1px solid lightgrey;">
diff -Nru tbsync-4.3/content/manager/eventlog/eventlog.js tbsync-4.7/content/manager/eventlog/eventlog.js
--- tbsync-4.3/content/manager/eventlog/eventlog.js 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/manager/eventlog/eventlog.js 2023-08-29 22:22:49.000000000 +0200
@@ -25,12 +25,10 @@
let item = tbSyncEventLog.addLogEntry(events[i]);
eventlog.appendChild(item);
}
-
eventlog.hidden = false;
eventlog.ensureIndexIsVisible(eventlog.getRowCount()-1);
- document.documentElement.getButton("extra1").onclick = tbSyncEventLog.onclear;
- document.documentElement.getButton("extra1").label = TbSync.getString("eventlog.clear");
- document.documentElement.getButton("cancel").label = TbSync.getString("eventlog.close");
+ document.getElementById("tbsync.eventlog.clear").addEventListener("click", tbSyncEventLog.onclear);
+ document.getElementById("tbsync.eventlog.close").addEventListener("click", () => window.close());
},
onclear: function () {
@@ -71,7 +69,8 @@
//left column
let leftColumn = document.createXULElement("vbox");
- leftColumn.setAttribute("width", "24");
+ //leftColumn.setAttribute("width", "24");
+ leftColumn.setAttribute("style", "width: 24px;");
let image = document.createXULElement("image");
let src = entry.type.endsWith("_rerun") ? "sync" : entry.type;
diff -Nru tbsync-4.3/content/manager/eventlog/eventlog.xhtml tbsync-4.7/content/manager/eventlog/eventlog.xhtml
--- tbsync-4.3/content/manager/eventlog/eventlog.xhtml 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/manager/eventlog/eventlog.xhtml 2023-08-29 22:22:49.000000000 +0200
@@ -1,11 +1,8 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
-<dialog
- width="600"
- height="400"
+<window
title="__TBSYNCMSG_eventlog.title__"
- buttons="cancel, extra1"
onload="tbSyncEventLog.onload();"
onunload="tbSyncEventLog.onunload();"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
@@ -14,6 +11,11 @@
<script type="text/javascript" src="chrome://tbsync/content/scripts/locales.js" />
<vbox flex="1">
- <richlistbox id="tbsync.eventlog" flex="1" seltype="single" disabled="true"/>
+ <richlistbox id="tbsync.eventlog" style="padding:5px; height:360px" seltype="single" disabled="true"/>
+ <hbox style="padding: 5px">
+ <vbox flex="1"></vbox>
+ <button id="tbsync.eventlog.clear" label="__TBSYNCMSG_eventlog.clear__" />
+ <button id="tbsync.eventlog.close" label="__TBSYNCMSG_eventlog.close__" />
+ </hbox>
</vbox>
-</dialog>
+</window>
diff -Nru tbsync-4.3/content/modules/db.js tbsync-4.7/content/modules/db.js
--- tbsync-4.3/content/modules/db.js 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/modules/db.js 2023-08-29 22:22:49.000000000 +0200
@@ -41,12 +41,11 @@
this.files[f].write = new DeferredTask(() => this.writeAsync(f), 6000);
try {
- let data = await OS.File.read(TbSync.io.getAbsolutePath(this.files[f].name));
- this[f] = JSON.parse(TbSync.decoder.decode(data));
+ this[f] = await IOUtils.readJSON(TbSync.io.getAbsolutePath(this.files[f].name));
this.files[f].found = true;
} catch (e) {
//if there is no file, there is no file...
- this[f] = JSON.parse(this.files[f].default);
+ this[f] = JSON.parse(this.files[f].default);
this.files[f].found = false;
Components.utils.reportError(e);
}
@@ -66,8 +65,7 @@
// try to migrate old accounts file from TB60
if (!this.files["accounts"].found) {
try {
- let data = await OS.File.read(TbSync.io.getAbsolutePath("accounts.json"));
- let accounts = JSON.parse(TbSync.decoder.decode(data));
+ let accounts = await IOUtils.readJSON(TbSync.io.getAbsolutePath("accounts.json"));
for (let d of Object.values(accounts.data)) {
console.log("Migrating: " + JSON.stringify(d));
@@ -141,10 +139,7 @@
}
let filepath = TbSync.io.getAbsolutePath(this.files[f].name);
- let json = TbSync.encoder.encode(JSON.stringify(this[f]));
-
- await OS.File.makeDir(TbSync.io.storageDirectory);
- await OS.File.writeAtomic(filepath, json, {tmpPath: filepath + ".tmp"});
+ await IOUtils.writeJSON(filepath, this[f]);
},
diff -Nru tbsync-4.3/content/modules/io.js tbsync-4.7/content/modules/io.js
--- tbsync-4.3/content/modules/io.js 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/modules/io.js 2023-08-29 22:22:49.000000000 +0200
@@ -10,7 +10,7 @@
var io = {
- storageDirectory : OS.Path.join(OS.Constants.Path.profileDir, "TbSync"),
+ storageDirectory : PathUtils.join(PathUtils.profileDir, "TbSync"),
load: async function () {
},
@@ -19,7 +19,7 @@
},
getAbsolutePath: function(filename) {
- return OS.Path.join(this.storageDirectory, filename);
+ return PathUtils.join(this.storageDirectory, filename);
},
initFile: function (filename) {
diff -Nru tbsync-4.3/content/modules/lightning.js tbsync-4.7/content/modules/lightning.js
--- tbsync-4.3/content/modules/lightning.js 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/modules/lightning.js 2023-08-29 22:22:49.000000000 +0200
@@ -387,7 +387,7 @@
if (pretagChangelogWithByServerEntry) {
tbItem.changelogStatus = "added_by_server";
}
- return await this._calendar.adoptItem(tbItem._item);
+ return await this._calendar.addItem(tbItem._item);
}
async modifyItem(tbNewItem, tbOldItem, pretagChangelogWithByServerEntry = true) {
diff -Nru tbsync-4.3/content/modules/manager.js tbsync-4.7/content/modules/manager.js
--- tbsync-4.3/content/modules/manager.js 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/modules/manager.js 2023-08-29 22:22:49.000000000 +0200
@@ -236,7 +236,8 @@
if (itemACL) itemHGroup1.appendChild(itemACL);
let itemVGroup1 = document.createXULElement("vbox");
- itemVGroup1.setAttribute("width", "93");
+ //itemVGroup1.setAttribute("width", "93");
+ itemVGroup1.setAttribute("style", "width: 93px");
itemVGroup1.appendChild(itemHGroup1);
//group2
@@ -246,8 +247,8 @@
itemHGroup2.appendChild(itemLabel);
let itemVGroup2 = document.createXULElement("vbox");
- itemVGroup2.setAttribute("width", "150");
- itemVGroup2.setAttribute("style", "padding: 3px");
+ //itemVGroup2.setAttribute("width", "150");
+ itemVGroup2.setAttribute("style", "padding: 3px; width: 150px");
itemVGroup2.appendChild(itemHGroup2);
//group3
@@ -256,8 +257,8 @@
itemHGroup3.appendChild(itemStatus);
let itemVGroup3 = document.createXULElement("vbox");
- itemVGroup3.setAttribute("width", "250");
- itemVGroup3.setAttribute("style", "padding: 3px");
+ //itemVGroup3.setAttribute("width", "250");
+ itemVGroup3.setAttribute("style", "padding: 3px; width: 250px");
itemVGroup3.appendChild(itemHGroup3);
//final row
diff -Nru tbsync-4.3/content/passwordPrompt/passwordPrompt.css tbsync-4.7/content/passwordPrompt/passwordPrompt.css
--- tbsync-4.3/content/passwordPrompt/passwordPrompt.css 1970-01-01 01:00:00.000000000 +0100
+++ tbsync-4.7/content/passwordPrompt/passwordPrompt.css 2023-08-29 22:22:49.000000000 +0200
@@ -0,0 +1,13 @@
+ .grid-container {
+ display: grid;
+ grid-template-columns: auto 1fr;
+ grid-template-rows: auto auto auto;
+ gap: 1px;
+ width: 250px;
+ margin: 2ex auto;
+ }
+
+ .grid-item {
+ padding: 2px;
+ text-align: left;
+ }
diff -Nru tbsync-4.3/content/passwordPrompt/passwordPrompt.js tbsync-4.7/content/passwordPrompt/passwordPrompt.js
--- tbsync-4.3/content/passwordPrompt/passwordPrompt.js 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/passwordPrompt/passwordPrompt.js 2023-08-29 22:22:49.000000000 +0200
@@ -23,19 +23,21 @@
this.userfield.value = data.username;
this.userfield.disabled = data.usernameLocked;
- document.addEventListener("dialogaccept", tbSyncPassword.doOK.bind(this));
window.addEventListener("unload", tbSyncPassword.doCANCEL.bind(this));
document.getElementById("tbsync.password").focus();
+ document.getElementById("tbsync.password.ok").addEventListener("click", tbSyncPassword.doOK.bind(this));
+ document.getElementById("tbsync.password.cancel").addEventListener("click", () => window.close());
},
- doOK: function (event) {
+ doOK: function (event) {
if (!this.resolved) {
this.resolved = true
this.resolve({username: this.userfield.value, password: this.passfield.value});
+ window.close();
}
},
- doCANCEL: function (event) {
+ doCANCEL: function (event) {
if (!this.resolved) {
this.resolved = true
this.resolve(false);
diff -Nru tbsync-4.3/content/passwordPrompt/passwordPrompt.xhtml tbsync-4.7/content/passwordPrompt/passwordPrompt.xhtml
--- tbsync-4.3/content/passwordPrompt/passwordPrompt.xhtml 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/passwordPrompt/passwordPrompt.xhtml 2023-08-29 22:22:49.000000000 +0200
@@ -1,38 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<?xml-stylesheet href="chrome://tbsync/content/passwordPrompt/passwordPrompt.css" type="text/css"?>
-<dialog
+<window
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:html="http://www.w3.org/1999/xhtml"
title="__TBSYNCMSG_password.title__"
- buttons="accept,cancel"
onload="tbSyncPassword.onload();">
<script type="application/javascript" src="chrome://tbsync/content/passwordPrompt/passwordPrompt.js"/>
<script type="text/javascript" src="chrome://tbsync/content/scripts/locales.js" />
- <vbox>
- <description style="width: 350px;">__TBSYNCMSG_password.description__</description>
- <grid style="margin:1ex;">
- <columns>
- <column flex="0"/>
- <column flex="1"/>
- </columns>
- <rows>
- <row style="margin-bottom:1ex;">
- <label value="__TBSYNCMSG_password.account__"/>
- <label class="header" id="tbsync.account" />
- </row>
- <row align="center">
- <label value="__TBSYNCMSG_password.user__"/>
- <html:input id="tbsync.user" />
- </row>
- <row align="center">
- <label value="__TBSYNCMSG_password.password__"/>
- <html:input type="password" id="tbsync.password"/>
- </row>
- </rows>
- </grid>
+ <vbox flex="1">
+ <description style="padding: 5px; width: 350px;">__TBSYNCMSG_password.description__</description>
+
+ <html:div class="grid-container">
+ <html:div class="grid-item"><label value="__TBSYNCMSG_password.account__"/></html:div>
+ <html:div class="grid-item"><label class="header" id="tbsync.account" /></html:div>
+ <html:div class="grid-item"><label value="__TBSYNCMSG_password.user__"/></html:div>
+ <html:div class="grid-item"><html:input id="tbsync.user" /></html:div>
+ <html:div class="grid-item"><label value="__TBSYNCMSG_password.password__"/></html:div>
+ <html:div class="grid-item"><html:input type="password" id="tbsync.password"/></html:div>
+ </html:div>
+ <hbox style="padding: 5px">
+ <vbox flex="1"></vbox>
+ <button id="tbsync.password.ok" label="__TBSYNCMSG_password.ok__" />
+ <button id="tbsync.password.cancel" label="__TBSYNCMSG_password.cancel__" />
+ </hbox>
</vbox>
-</dialog>
+</window>
diff -Nru tbsync-4.3/content/tbsync.jsm tbsync-4.7/content/tbsync.jsm
--- tbsync-4.3/content/tbsync.jsm 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/content/tbsync.jsm 2023-08-29 22:22:49.000000000 +0200
@@ -12,7 +12,6 @@
var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
var { FileUtils } = ChromeUtils.import("resource://gre/modules/FileUtils.jsm");
-var { OS } =ChromeUtils.import("resource://gre/modules/osfile.jsm");
var { AddonManager } = ChromeUtils.import("resource://gre/modules/AddonManager.jsm");
var { NetUtil } = ChromeUtils.import("resource://gre/modules/NetUtil.jsm");
var { MailServices } = ChromeUtils.import("resource:///modules/MailServices.jsm");
@@ -53,7 +52,7 @@
this.dump("TbSync init","Start (" + this.addon.version.toString() + ")");
//print information about Thunderbird version and OS
- this.dump(Services.appinfo.name, Services.appinfo.version + " on " + OS.Constants.Sys.Name);
+ this.dump(Services.appinfo.name, Services.appinfo.version + " on " + Services.appinfo.OS);
// register modules to be used by TbSync
this.modules.push({name: "db", state: 0});
diff -Nru tbsync-4.3/debian/changelog tbsync-4.7/debian/changelog
--- tbsync-4.3/debian/changelog 2022-10-14 13:32:30.000000000 +0200
+++ tbsync-4.7/debian/changelog 2023-10-14 09:22:21.000000000 +0200
@@ -1,3 +1,29 @@
+tbsync (4.7-1~deb12u1) bookworm; urgency=medium
+
+ [ Mechtilde ]
+ * [f9e272f] Adjust version of dependencies
+ * Prepared for release in bookworm (proposed-updates)
+
+ -- Mechtilde Stehmann <mechti...@debian.org> Sat, 14 Oct 2023 09:22:21 +0200
+
+tbsync (4.7-1) unstable; urgency=medium
+
+ [ Mechtilde ]
+ * [c727b2e] New upstream version 4.7
+ * [3187154] Compression is now tar.gz
+
+ -- Mechtilde Stehmann <mechti...@debian.org> Tue, 12 Sep 2023 19:31:30 +0200
+
+tbsync (4.3+git20230524+9459652-1) experimental; urgency=medium
+
+ [ Mechtilde ]
+ * [70d9fd8] New upstream version 4.3+git20230524+9459652
+ Made it fit for thunderbird 115.*
+ * [70d9fd8] New upstream version 4.3+git20230524+9459652
+ * [6321440] Changed coompression for zip file
+
+ -- Mechtilde Stehmann <mechti...@debian.org> Wed, 26 Jul 2023 18:08:25 +0200
+
tbsync (4.3-1) unstable; urgency=medium
[ Mechtilde ]
diff -Nru tbsync-4.3/debian/control tbsync-4.7/debian/control
--- tbsync-4.3/debian/control 2022-09-22 19:40:48.000000000 +0200
+++ tbsync-4.7/debian/control 2023-10-11 20:36:34.000000000 +0200
@@ -13,9 +13,9 @@
Package: webext-tbsync
Architecture: all
Depends: ${misc:Depends}
- , thunderbird (>= 1:102.2)
-Recommends: webext-dav4tbsync (>= 4.0)
- , webext-eas4tbsync (>= 2.0)
+ , thunderbird (>= 1:115.3)
+Recommends: webext-dav4tbsync (>= 4.7)
+ , webext-eas4tbsync (>= 4.7)
Description: Thunderbird/Lightning Add-On to support MS Exchange Calendar etc.
Synchronize Exchange ActiveSync accounts (contacts, tasks and
calendars) to Thunderbird, supports Office 365, Outlook.com,
diff -Nru tbsync-4.3/debian/gbp.conf tbsync-4.7/debian/gbp.conf
--- tbsync-4.3/debian/gbp.conf 2022-04-17 13:18:05.000000000 +0200
+++ tbsync-4.7/debian/gbp.conf 2023-09-12 19:11:02.000000000 +0200
@@ -4,7 +4,7 @@
# use pristine-tar:
pristine-tar = True
# generate gz compressed orig file
-compression = gz
+# compression = xz
debian-branch = debian/sid
upstream-branch = upstream
diff -Nru tbsync-4.3/_locales/bg/messages.json tbsync-4.7/_locales/bg/messages.json
--- tbsync-4.3/_locales/bg/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/bg/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Синхронизирай информацията от всички TbSync регистрации със сървърите"
+ },
+ "password.ok": {
+ "message": "ОК"
+ },
+ "password.cancel": {
+ "message": "Отказ"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/cs/messages.json tbsync-4.7/_locales/cs/messages.json
--- tbsync-4.3/_locales/cs/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/cs/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Synchronizovat poslední změny"
+ },
+ "password.ok": {
+ "message": "OK"
+ },
+ "password.cancel": {
+ "message": "Zrušit"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/de/messages.json tbsync-4.7/_locales/de/messages.json
--- tbsync-4.3/_locales/de/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/de/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -3,28 +3,28 @@
"message": "Um diesen Fehler zu beheben, können Sie einen Fehlerbericht an den Entwickler von TbSync schicken. Soll der Fehlerbericht jetzt angefertigt werden?"
},
"NoDebugLog": {
- "message": "Es liegen keine aussagekräftigen Debug-Meldungen vor. Bitte aktivieren Sie den Debug-Modus, starten Thunderbird neu und wiederholen dann alle Schritte um das fehlerhafte Verhalten zu reproduzieren."
+ "message": "Es liegen keine aussagekräftigen Debug-Meldungen vor. Bitte aktivieren Sie den Debug-Modus, starten Thunderbird neu und wiederholen dann alle Schritte, um das fehlerhafte Verhalten zu reproduzieren."
},
"OopsMessage": {
- "message": "Oops! TbSync konnte nicht starten!"
+ "message": "Hoppla! TbSync konnte nicht starten!"
},
"RestartThunderbirdAndTryAgain": {
- "message": "Der TbSync Debug-Modus wurde aktiviert, bitte starten Sie Thunderbird neu und versuchen Sie dann noch einmal TbSync zu öffnen."
+ "message": "Das TbSync-Debug-Protokoll wurde eingeschaltet. Bitte starten Sie Thunderbird neu, und versuchen Sie dann noch einmal, TbSync zu öffnen!"
},
"UnableToTraceError": {
- "message": "Es ist im Augenblick nicht möglich, diesen Fehler zu untersuchen, da der TbSync Debug-Modus nicht aktiviert ist. Soll der Debug-Modus aktiviert werden, damit dieser Fehler untersucht und behoben werden kann?"
+ "message": "Dieser Fehler kann nicht untersucht werden, solange das Debug-Protokoll deaktiviert ist. Soll das Protokoll jetzt aktiviert werden, damit dieser Fehler untersucht und behoben werden kann?"
},
"accountacctions.delete": {
- "message": "Konto '##accountname##' löschen"
+ "message": "Konto „##accountname##” löschen"
},
"accountacctions.disable": {
"message": "Konto '##accountname##' deaktivieren"
},
"accountacctions.enable": {
- "message": "Konto '##accountname##' aktivieren & Server kontaktieren"
+ "message": "Konto „##accountname##” aktivieren und Server kontaktieren"
},
"accountacctions.sync": {
- "message": "Konto '##accountname##' synchronisieren"
+ "message": "Konto „##accountname##” synchronisieren"
},
"addressbook.searchall": {
"message": "Alle Adressbücher durchsuchen"
@@ -60,25 +60,25 @@
"message": "Leerlauf"
},
"installProvider.header": {
- "message": "Provider '##replace.1##' für TbSync ist noch nicht installiert."
+ "message": "Provider „##replace.1##” für TbSync ist noch nicht installiert."
},
"manager.AccountActions": {
- "message": "Konto Aktionen"
+ "message": "Konto-Aktionen"
},
"manager.AddAccount": {
- "message": "Neues Konto hinzufügen"
+ "message": "Konto hinzufügen"
},
"manager.DeleteAccount": {
- "message": "Konto löschen"
+ "message": "Konto entfernen"
},
"manager.DisableAccount": {
"message": "Konto deaktivieren"
},
"manager.EnableAccount": {
- "message": "Konto aktivieren & mit dem Server verbinden"
+ "message": "Konto aktivieren und mit dem Server verbinden"
},
"manager.RetryConnectAccount": {
- "message": "Erneut versuchen mit dem Server zu verbinden"
+ "message": "Erneut versuchen, mit dem Server zu verbinden"
},
"manager.ShowEventLog": {
"message": "Ereignisprotokoll anzeigen"
@@ -96,10 +96,10 @@
"message": "Kontoeinstellungen"
},
"manager.catman.text": {
- "message": "TbSync synchronisiert auch Kontaktkategorien, die einen effizienten Ersatz für die nicht synchronisierbaren Kontaktlisten darstellen. Um diese im Thunderbird Adressbuch zu nutzen, können Sie das Add-On 'Category Manager' installieren. Dieses Add-On ermöglicht die Verwaltung überlappender kategoriebasierter Kontaktgruppen und stellt eine Reihe anderer kategoriespezifischer Funktionen bereit. Es kann aus dem offiziellen Mozilla Add-On Repository heruntergeladen werden:"
+ "message": "TbSync synchronisiert auch Kontaktkategorien, die einen effizienten Ersatz für die nicht synchronisierbaren Kontaktlisten darstellen. Um diese im Thunderbird-Adressbuch zu nutzen, können Sie das Add-On „Category Manager” installieren. Dieses Add-On ermöglicht die Verwaltung überlappender kategoriebasierter Kontaktgruppen und stellt eine Reihe anderer kategoriespezifischer Funktionen bereit. Es kann aus dem offiziellen Mozilla Add-On Repository heruntergeladen werden:"
},
"manager.community": {
- "message": "Community"
+ "message": "Nutzergemeinschaft"
},
"manager.connecting": {
"message": "Verbindung wird hergestellt"
@@ -120,7 +120,7 @@
"message": "Aktiviert: Protokolliert alle Fehler"
},
"manager.help.debuglevel.2": {
- "message": "Aktiviert: Protokolliert alle gesendeten & empfangenen Daten"
+ "message": "Aktiviert: Protokolliert alle gesendeten und empfangenen Daten"
},
"manager.help.debuglevel.3": {
"message": "Aktiviert: Protokolliert alle Daten und einige interne Debug-Werte"
@@ -138,25 +138,25 @@
"message": "Benötigen Sie Hilfe?"
},
"manager.help.viewdebuglog": {
- "message": "Debug-Log anzeigen"
+ "message": "Debug-Protokoll anzeigen"
},
"manager.help.wiki": {
- "message": "Besuchen Sie die Wikiseiten des TbSync Projektes, diese beinhalten zusätzliche Informationen, Benutzeranleitungen und detaillierte Konfigurationsbeschreibungen."
+ "message": "Besuchen Sie die Wikiseiten des TbSync-Projekts, diese enthalten zusätzliche Informationen, Benutzeranleitungen und detaillierte Konfigurationsbeschreibungen."
},
"manager.installprovider.link": {
- "message": "Klicken Sie auf den folgenden Link, um die Informationsseite des fehlenden Provider aufzurufen. Auf dieser Seite finden Sie weitere Informationen zu dem Provider und haben die Möglichkeit, diesen zu installieren:"
+ "message": "Klicken Sie auf den folgenden Link, um die Informationsseite des fehlenden Synchronisations-Providers aufzurufen. Dort finden Sie weitere Informationen dazu und haben die Möglichkeit, diesen zu installieren:"
},
"manager.installprovider.warning": {
- "message": "Dieser Provider stammt nicht aus dem offiziellen Thunderbird Add-On Verzeichnis und wurde demnach nicht von Thunderbird-Mitarbeitern überprüft. Dieser Provider könnte schlimme Dinge mit Ihrem System anstellen. Benutzung auf eigene Gefahr."
+ "message": "Dieser Provider stammt nicht aus der offiziellen Thunderbird-Add-On-Sammlung und wurde demnach nicht von Thunderbird-Mitarbeitern überprüft. Es könnte sich um Schad-Software handeln, deshalb verwenden Sie es auf eigene Gefahr."
},
"manager.lockedsettings.description": {
"message": "Um Synchronisierungsfehler zu vermeiden, können einige Einstellungen nicht bearbeitet werden, während das Konto aktiviert ist."
},
"manager.missingprovider": {
- "message": "Dieses Konto benötigt den ##provider## Synchronisationsprovider, der zur Zeit aber nicht installiert ist."
+ "message": "Dieses Konto benötigt den ##provider##-Synchronisations-Provider, noch nicht installiert ist."
},
"manager.noaccounts": {
- "message": "Es sind aktuell noch keine Konten konfiguriert."
+ "message": "Es sind noch keine Konten definiert."
},
"manager.provider": {
"message": "Provider installieren"
@@ -174,13 +174,13 @@
"message": "Status"
},
"manager.supporter.contributors": {
- "message": "Mitwirkende & Übersetzer"
+ "message": "Mitwirkende und Übersetzer"
},
"manager.supporter.details": {
"message": "Details"
},
"manager.supporter.sponsors": {
- "message": "Sponsoren von Test-Accounts"
+ "message": "Sponsoren von Testkonten"
},
"manager.tabs.status": {
"message": "Synchronisationsstatus"
@@ -195,7 +195,7 @@
"message": "Allgemein"
},
"manager.tabs.status.never": {
- "message": "Eine Einstellung von 0 deaktiviert periodische Synchronisation. Push Synchronisation wird noch nicht unterstützt."
+ "message": "Eine Einstellung von 0 deaktiviert periodische Synchronisation. Push-Synchronisation wird noch nicht unterstützt."
},
"manager.tabs.status.resources": {
"message": "Verfügbare Ressourcen"
@@ -207,13 +207,13 @@
"message": "Jetzt synchronisieren"
},
"manager.tabs.status.tryagain": {
- "message": "Erneut versuchen mit dem Server zu verbinden"
+ "message": "Erneut versuchen, mit dem Server zu verbinden"
},
"manager.title": {
"message": "TbSync Kontoverwaltung"
},
"manager.tryagain": {
- "message": "Erneut versuchen mit dem Server zu verbinden"
+ "message": "Erneut versuchen, mit dem Server zu verbinden"
},
"menu.settingslabel": {
"message": "Synchronisationseinstellungen (TbSync)"
@@ -228,13 +228,13 @@
"message": "Passwort:"
},
"password.title": {
- "message": "TbSync Anmeldeinformationen"
+ "message": "TbSync-Anmeldeinformationen"
},
"password.user": {
- "message": "Benutzer:"
+ "message": "Nutzer:"
},
"popup.opensettings": {
- "message": "TbSync Kontoverwaltung öffnen"
+ "message": "TbSync-Kontoverwaltung öffnen"
},
"prompt.DeleteAccount": {
"message": "Sind Sie sicher, dass Sie das Konto ##accountName## löschen möchten?"
@@ -243,37 +243,37 @@
"message": "Sind Sie sicher, dass Sie dieses Konto deaktivieren möchten? Alle lokalen Veränderungen, die noch nicht synchronisiert wurden, gehen dabei verloren!"
},
"prompt.Erase": {
- "message": "Sind Sie sicher, dass Sie dieses Konto eines unbekannten Providers aus der Kontoliste entfernen möchten?"
+ "message": "Sind Sie sicher, dass Sie dieses Konto eines unbekannten Anbieters aus der Kontoliste entfernen möchten?"
},
"prompt.Unsubscribe": {
"message": "Sind Sie sicher, dass Sie dieses Element nicht länger abonnieren möchten? Alle lokalen Veränderungen, die noch nicht synchronisiert wurden, gehen dabei verloren!"
},
"status.JavaScriptError": {
- "message": "Javascript Fehler! Bitte prüfen Sie das Ereignisprotokoll für weitere Details."
+ "message": "Javascript-Fehler! Bitte prüfen Sie das Ereignisprotokoll für weitere Details!"
},
"status.OAuthAbortError": {
- "message": "OAuth 2.0 Authentifizierungsprozess vom Benutzer abgebrochen."
+ "message": "OAuth 2.0-Authentifizierungsprozess vom Nutzer abgebrochen."
},
"status.OAuthHttpError": {
- "message": "OAuth 2.0 Authentifizierungsprozess fehlgeschlagen (HTTP Error ##replace.1##)."
+ "message": "OAuth-2.0-Authentifizierungsprozess fehlgeschlagen (HTTP Error ##replace.1##)."
},
"status.OAuthNetworkError": {
- "message": "Verbindung zum OAuth 2.0 Authentifizierungsserver nicht möglich."
+ "message": "Verbindung zum OAuth-2.0-Authentifizierungsserver nicht möglich."
},
"status.OAuthServerError": {
- "message": " OAuth 2.0 Authentifizierungsserver meldet: ##replace.1##"
+ "message": " OAuth-2.0-Authentifizierungsserver meldet: ##replace.1##"
},
"status.aborted": {
"message": "Nicht synchronisiert"
},
"status.apiError": {
- "message": "API Implementierungsfehler"
+ "message": "API-Implementierungsfehler"
},
"status.disabled": {
"message": "Konto ist deaktiviert, Synchronisation ist ausgeschaltet."
},
"status.foldererror": {
- "message": "Bei mindestens einer Resource trat ein Synchronisationsfehler auf. Bitte prüfen sie das Ereignisprotokoll für weitere Details."
+ "message": "Bei mindestens einer Ressource trat ein Synchronisationsfehler auf. Bitte prüfen Sie das Ereignisprotokoll für weitere Details!"
},
"status.modified": {
"message": "Lokale Änderungen"
@@ -282,10 +282,10 @@
"message": "Verbindung zum Server fehlgeschlagen (##replace.1##)."
},
"status.no-folders-found-on-server": {
- "message": "Auf dem Server wurden keine Resourcen gefunden."
+ "message": "Auf dem Server wurden keine Ressourcen gefunden."
},
"status.notargets": {
- "message": "Synchronisation abgebrochen da die Elemente zum Synchronisieren nicht erstellt werden konnten."
+ "message": "Synchronisation abgebrochen, da die Elemente zum Synchronisieren nicht erstellt werden konnten."
},
"status.notsyncronized": {
"message": "Konto muss synchronisiert werden."
@@ -294,7 +294,7 @@
"message": "Warten auf Synchronisation"
},
"status.security": {
- "message": "Fehler beim Aufbau einer sicherern Verbindung. Benutzen Sie eventuell ein selbst signiertes Zertifikat oder ein andersartiges nicht vertrauenswürdiges Zertifikat welches nicht in Thunderbird importiert ist? (##replace.1##)"
+ "message": "Fehler beim Aufbau einer sicheren Verbindung. Benutzen Sie eventuell ein selbst signiertes oder anderweitig nicht vertrauenswürdiges Zertifikat, das nicht in Thunderbird importiert ist? (##replace.1##)"
},
"status.skipped": {
"message": "Nicht unterstützt"
@@ -354,6 +354,12 @@
"message": "Synchronisiere alle TbSync Konten"
},
"toolbar.tooltiptext": {
- "message": "Gleiche alle TbSync Konten mit den Servern ab"
+ "message": "Gleiche alle TbSync-Konten mit den Servern ab"
+ },
+ "password.ok": {
+ "message": "OK"
+ },
+ "password.cancel": {
+ "message": "Abbrechen"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/en-US/messages.json tbsync-4.7/_locales/en-US/messages.json
--- tbsync-4.3/_locales/en-US/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/en-US/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Synchronize latest changes"
+ },
+ "password.ok": {
+ "message": "OK"
+ },
+ "password.cancel": {
+ "message": "Cancel"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/es/messages.json tbsync-4.7/_locales/es/messages.json
--- tbsync-4.3/_locales/es/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/es/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Sincronizar los últimos cambios"
+ },
+ "password.ok": {
+ "message": "Aceptar"
+ },
+ "password.cancel": {
+ "message": "Cancelar"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/et/messages.json tbsync-4.7/_locales/et/messages.json
--- tbsync-4.3/_locales/et/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/et/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Synchronize latest changes"
+ },
+ "password.ok": {
+ "message": "OK"
+ },
+ "password.cancel": {
+ "message": "Tühista"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/fr/messages.json tbsync-4.7/_locales/fr/messages.json
--- tbsync-4.3/_locales/fr/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/fr/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Synchroniser les dernières modifications"
+ },
+ "password.ok": {
+ "message": "OK"
+ },
+ "password.cancel": {
+ "message": "Annuler"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/gl/messages.json tbsync-4.7/_locales/gl/messages.json
--- tbsync-4.3/_locales/gl/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/gl/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -141,7 +141,7 @@
"message": "Ver rexistro de depuración"
},
"manager.help.wiki": {
- "message": "Abrir as páxinas wiki do proxecto TbSync nas que facilitan información adicional, guías e descricións detalladas da configuración."
+ "message": "Abre o wiki do proxecto TbSync no que se facilita información adicional, guías e descricións detalladas da configuración."
},
"manager.installprovider.link": {
"message": "Preme no seguinte enlace para abrir a páxina de información do provedor de sincronización que falta. Aí atoparás máis información sobre o provedor e terás a opción de instalalo:"
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Sincronizar os últimos cambios"
+ },
+ "password.ok": {
+ "message": "Aceptar"
+ },
+ "password.cancel": {
+ "message": "Cancelar"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/hu/messages.json tbsync-4.7/_locales/hu/messages.json
--- tbsync-4.3/_locales/hu/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/hu/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "A legújabb változtatások szinkronizálása"
+ },
+ "password.ok": {
+ "message": "Rendben"
+ },
+ "password.cancel": {
+ "message": "Mégse"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/it/messages.json tbsync-4.7/_locales/it/messages.json
--- tbsync-4.3/_locales/it/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/it/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Sincronizza le ultime modifiche"
+ },
+ "password.ok": {
+ "message": "OK"
+ },
+ "password.cancel": {
+ "message": "Annulla"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/ja/messages.json tbsync-4.7/_locales/ja/messages.json
--- tbsync-4.3/_locales/ja/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/ja/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "最新の変更を同期"
+ },
+ "password.ok": {
+ "message": "OK"
+ },
+ "password.cancel": {
+ "message": "キャンセル"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/ko/messages.json tbsync-4.7/_locales/ko/messages.json
--- tbsync-4.3/_locales/ko/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/ko/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Synchronize latest changes"
+ },
+ "password.ok": {
+ "message": "확인"
+ },
+ "password.cancel": {
+ "message": "취소"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/pl/messages.json tbsync-4.7/_locales/pl/messages.json
--- tbsync-4.3/_locales/pl/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/pl/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Synchronizuj najnowsze zmiany"
+ },
+ "password.ok": {
+ "message": "OK"
+ },
+ "password.cancel": {
+ "message": "Anuluj"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/pt_BR/messages.json tbsync-4.7/_locales/pt_BR/messages.json
--- tbsync-4.3/_locales/pt_BR/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/pt_BR/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Sincronizar as alterações mais recentes"
+ },
+ "password.ok": {
+ "message": "OK"
+ },
+ "password.cancel": {
+ "message": "Cancelar"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/ro/messages.json tbsync-4.7/_locales/ro/messages.json
--- tbsync-4.3/_locales/ro/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/ro/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Synchronize latest changes"
+ },
+ "password.ok": {
+ "message": "OK"
+ },
+ "password.cancel": {
+ "message": "Anulare"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/ru/messages.json tbsync-4.7/_locales/ru/messages.json
--- tbsync-4.3/_locales/ru/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/ru/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Синхронизировать последние изменения"
+ },
+ "password.ok": {
+ "message": "ОК"
+ },
+ "password.cancel": {
+ "message": "Отмена"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/_locales/sv/messages.json tbsync-4.7/_locales/sv/messages.json
--- tbsync-4.3/_locales/sv/messages.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/_locales/sv/messages.json 2023-08-29 22:22:49.000000000 +0200
@@ -355,5 +355,11 @@
},
"toolbar.tooltiptext": {
"message": "Synchronize latest changes"
+ },
+ "password.ok": {
+ "message": "OK"
+ },
+ "password.cancel": {
+ "message": "Avbryt"
}
-}
\ Kein Zeilenumbruch am Dateiende.
+}
diff -Nru tbsync-4.3/manifest.json tbsync-4.7/manifest.json
--- tbsync-4.3/manifest.json 2022-10-12 21:40:25.000000000 +0200
+++ tbsync-4.7/manifest.json 2023-08-29 22:22:49.000000000 +0200
@@ -3,12 +3,12 @@
"gecko": {
"id": "tbs...@jobisoft.de",
"strict_min_version": "102.3.0",
- "strict_max_version": "102.*"
+ "strict_max_version": "115.*"
}
},
"manifest_version": 2,
"name": "TbSync",
- "version": "4.3",
+ "version": "4.7",
"author": "John Bieling",
"homepage_url": "https://github.com/jobisoft/TbSync",
"default_locale": "en-US",
OpenPGP_signature.asc
Description: OpenPGP digital signature
--- End Message ---