QuoteColors Updates für 68 und 78

  • jobisoft

    Ich habe QuoteColors für Thunderbird 68 komplett korrekt zum Laufen gebracht - jedenfalls fallen mir erstmal keine Fehler mehr auf. Im Gegensatz zu "meinem Vorgänger" auf ATN funktionieren jetzt auch die Optionen wieder korrekt. Ich werde mich bei beiden Autoren (altes "QuoteColor" und "New QuoteColor" melden, um das wieder unter einen Hut zu bekommen.


    Für Thunderbird 78 habe ich mir nun ein Herz gefasst und habe Deine Wrapper API eingebaut. Die Optionen funktionieren schon komplett. Ich scheitere aber noch am JS Injection, um die alten Overlays nun zum Laufen zu bekommen. Die drei alten Overlays enthalten quasi Keinen XUL-Code, sondern jeweils nur eingebundene weitere JS Dateien und jeweils einen CDATA-Block mit in bisschen Iinline JavaScript.


    Hier ein Beispiel eines alten Overlays:


    Daraus habe ich folgende neue JS-Datei gemacht:


    Meine background.js sieht so aus:


    Das erneuerte Overlay (wie auch immer ich das jetzt bezeichnen soll, wenn es jetzt diese neue JS-Datei ist) bleibt letztlich wirkungslos. Fehlermeldungen in der Konsole gibt es keine.

  • Also onload und onunload event funktionieren nicht, sondern dumusst das jeweils in onLoad() und onUnload() packen. Nicht vergessen window. vor deine Funktionsaufrufe dranzuhängen, weil deine JS files ja in window geladen wurden.


    ich denke so müsste das funktionieren. Geht das?

    Geht das?

  • Blöd gefragt: muss ich window. dann quer durch die 3 JS Dateien hinzufügen, in denen diese Variablen / Objekte drin sind?

    Ne, dein code läuft im window scope ganz normal wie früher. Der Injector aber nicht (die onLoad und onUnload Funktionen). Der hat also keinen direkten Zugriff auf Objekte in window, daher musst du in den beiden Funktionen window. mit angeben.

  • Mhhh, dat will noch nicht.


    Ich habe daraus jetzt mal ein GitLab-Projekt gemacht:


    master-Branch ist für den 78er:

    https://gitlab.com/ThunderbirdMailDE/quote-colors


    Im Branch Thunderbird_68 kann man die alten Overlays noch sehen, die so im 68er auch korrekt funktionieren.

  • Du hast da einen MixMax gemacht. Dein manifest sagt ab 78, deine background.js registriert aber deine JS files für 68er XUL files.


    Phase 1 und Phase 2 des updates (Wechsel auf WindowListener) werden in 68 gemacht. Erst wenn in 68 alles klappt, dann kommt der Wechsel auf 78 und da musst du alle xul files in xhtml files umbenennen (auch die core files, auf die der WL reagieren soll).


    In Phase 3 musst du dann deinen eigentlichen code evtl noch an Änderungen von 68->78 anpassen. Ich wollte aber nicht das du beide Baustellen gleichzeitig hast (WL setup UND 68->78 changes). Deswegen sagt der guide gaz klar: Erst im letzten Schritt wechseln wir auf 78.


    Wenn ich dein add-on anpasse und in 68 lade, kann ich console.log() Einträge im onload sehen. Ich weiß aber nicht wie das add-on sonst funktioniert und konnte es nicht weiter testen


    in qc_globals.js musst du die top level const los werden, weil die beim neu laden (z.B. Updates, oder remove und neu installieren ohne TB neu zu starten) nicht überschrieben werden können und Fehler werfen und weil du kein try catch um den entsprechenden scriptload hast dein ganzen load script stirbt. Ich würde da ein var QCGlobals = {} empfehlen und die dinger da drin definieren.

  • Oder du lädst qc_globals.js nicht in window sondern in window.QCGlobals , welches du vor dem scriptload aufruf mit window.QCGlobals = {} platt machst.

  • (auch die core files, auf die der WL reagieren soll).

    Autsch. Die hätte ich in der background.js natürlich umbenennen müssen. Ich bin tatsächlich daran gescheitert dies gestern zu verstehen und hatte mich gewundert wie bzw. "welche" core files ich umbenennen soll. Ich habe jetzt ein QCGlobals = {} draus gemacht.


    Das Add-on läuft jetzt zumindest bei der Anzeige der Mails korrekt. Es scheitert noch der PrintMode - da passiert noch nichts. Hier ist die Änderung mit den QCGlobals: https://gitlab.com/Thunderbird…edd48a32056e25a5b723f3406


    Danke Dir schonmal!

  • Bei meinen Tests (jetzt in TB78) ging es hier nicht weiter

    https://gitlab.com/Thunderbird…t/quotecolors.js#L276-280


    D.h. es gibt keinen zweiten Call. gnPrintMsgCnt ist -1 und du macht einen early return. Dann ist Ende.


    Hat das denn in TB68 (mit dem WindowListener) funktioniert? Also ist das ein Problem bei der Umstellung auf den WindowListener oder ein Problem das durch TB78 verurscaht wird?

  • Mhh, vielleicht hatte ich mich eh geirrt und das Ganze beim Drucken hatte schon vorher (also komplett vor allen Migrations-Arbeiten) nicht funktioniert. Das stelle ich momentan mal hinten an.


    Eine andere Frage, an der ich schon ewig immer wieder scheitere:

    Ich muss einen prefsObserver im Code ändern, da er schlichtweg versagt. Ich bekomme den observer zum Laufen, möchte diesen aber auf den "quotecolors." Branch begrenzen. Daran scheitere ich.

  • D.h. es gibt keinen zweiten Call. gnPrintMsgCnt ist -1 und du macht einen early return. Dann ist Ende.

    Das hatte so bis Tb 60 funktioniert - warum auch immer. Ab Tb 68 und jetz im Tb 78 musste ich einfach die return Zeile auskommentieren. Dann läuft es korrekt - auch wenn man mehrere Mails auf einmal druckt.


    Die prefsObserver könnte ich später noch optimieren. Und die optischen Gruppierungen der Optionen in Thunderbird 78 (weil die captions da ja anders umgesetzt wurden) kann ich später noch verbessern.


    Ansonsten habe ich jetzt fertige, wirklich funktionierende Versionen sowohl für Tb 68 als auch Tb 78.


    Ich hatte Malte Rücker per E-Mail versucht zu kontaktieren. Immerhin kam die Mail nicht zurück. Ich glaube aber, dass er nicht antworten wird, da er auf ATN seit vielen Jahren auch keine Antworten zu Bewertungen mehr abgegeben hatte. Vielleicht könnte man mich für dieses Add-on eintragen / freischalten:


    https://addons.thunderbird.net…rbird/addon/quote-colors/


    Dann kann ich dort die neuen Versionen hoch laden, deren ID ich momentan auch im manifest verwende.

  • Vielleicht könnte man mich für dieses Add-on eintragen / freischalten:


    https://addons.thunderbird.net…rbird/addon/quote-colors/

    Das dürfen wir leider nicht. Es muss vom originalen Author eine Freigabe erfolgen. Im ATN backend kann er dich als Eigentümer oder als Entwickler hinzufügen. Anders geht es leider nicht. Bei den Add-Ons die ich übernommen habe musste ich auch diesen Weg gehen. :-(

  • Ich muss einen prefsObserver im Code ändern, da er schlichtweg versagt. Ich bekomme den observer zum Laufen, möchte diesen aber auf den "quotecolors." Branch begrenzen. Daran scheitere ich.

    JavaScript
    var myObserver = {
    observe: function(aSubject, aTopic, aData) {
    console.log(aSubject);
    console.log(aTopic);
    console.log(aData);
    }
    }
    Services.prefs.getBranch("").addObserver("extensions.sendtocategory.", myObserver);

    Das klappt bei mir wie in der Dokumentation beschrieben. Das Ding feuert nur bei Änderungen in meinem sendtocategory branch. Wie sieht denn dein Code aus? Es funktioniert wohl nur auf dem root branch.

  • Ist es möglich ein Array von CSS-Dateien zu injecten?


    Beispiel:

    Code
    WL.injectCSS(["resource://allowhtmltemp/skin/aht_buttons.css","resource://allowhtmltemp/skin/aht_statusbar.css"]);
    WL.injectElements(`
    <keyset>


    Und gleiche Frage auch für die DTD-Dateien am Ende des ganze XUL-Injects:


    Code
    </hbox>
    </hbox>
    </hbox>`,
    [["chrome://allowhtmltemp/locale/allowhtmltemp.dtd"],["chrome://messenger/locale/messenger.dtd"]]);
  • Und noch eine Frage:


    Code
    var {
    Services
    } = ChromeUtils.import("resource://gre/modules/Services.jsm");
    ChromeUtils.import("resource:///modules/gloda/mimemsg.js");

    Geht der Import der ChromeUtils so nicht mehr? Ich bekomme da eine Fehlermeldung. Liegt dies schlichtweg daran, dass ich alles in ein Object packen muss?

  • Der DTD parameter ist ein array:

    injectElements(...., ["chrome://allowhtmltemp/locale/allowhtmltemp.dtd", "chrome://messenger/locale/messenger.dtd"]);


    injectCSS() must be called multiple times, no array support.