[news] SyncPlaces | SortPlaces | CheckPlaces | SearchPlaces

  • Hallo,

    ich hab mich mal durchgewühlt. So sehr viel ist gar nicht geändert worden. Man hat "nur" das API für die "Livemarks" (RSS-Bookmarks) auf asynchronen Betrieb umgestellt, weil man sich davon eine Performanceverbesserung verspricht.

    SyncPlaces verwendet ganze zwei der abgekündigten Funktionen: PlacesUtils.livemarks.createLivemarkFolderOnly und PlacesUtils.nodeIsLivemarkContainer.

    Leider ist es nicht ohne weiteres möglich, diese Funktionen durch Funktionen aus dem neuen API zu ersetzen:
    1. Die neuen Funktionen verlangen ein anderes Parameterformat.
    2. Es ist nicht möglich, zusätzliche Funktionen in den Quelltext von SyncPlaces einzubauen. Versucht man das, so geht die interne Referenzierung verloren. Funktionen, die von SyncPlaces selbst definiert werden, werden dann nicht mehr gefunden ("SyncPlacesBookmarks is undefined").

    Deshalb musste die Livemarks-Funktionalität abgeschaltet werden.

    Läuft hier mit Firefox 23.0.1 ohne irgendwelche Auffälligkeiten :)

    Download hier.

    Beste Grüße
    DAC324
    EDIT: Vergebliche Programmierversuche gelöscht.

    Einmal editiert, zuletzt von DAC324 (18. September 2013 um 01:44)

  • /*

    Zitat von DAC324

    ich hab mich mal durchgewühlt.

    Wie lange werden solche Konstrukte noch entwickelt ?
    Als OOP orientierter Programmierer habe ich dabei riesige Schwierigkeiten.
    Ich suche immer den Konstruktor, den Destruktor und saubere Datenabgrenzungen.
    */

  • Zitat von .Hermes

    /*

    Wie lange werden solche Konstrukte noch entwickelt ?
    Als OOP orientierter Programmierer habe ich dabei riesige Schwierigkeiten.
    Ich suche immer den Konstruktor, den Destruktor und saubere Datenabgrenzungen.
    */

    Das musst Du Mozilla fragen. Ich für mein Teil wäre ja schon mit einer halbwegs brauchbaren Dokumentation zufrieden. Statt dessen heißt es lapidar "deprecated - refer to [newAPI]". Und zu dem neuen API gibt es höchstens die Interface-Definitionen - kein Wort über benötigte Parameterformate oder Rückgabewerte.

    Aber OK. Gibt es denn etwas, das ich bei meiner Flickschusterei hier schon mal verbessern könnte?

    Beste Grüße
    DAC324

  • Zitat von DAC324

    Aber OK. Gibt es denn etwas, das ich bei meiner Flickschusterei hier schon mal verbessern könnte?

    Nein. Ich kann dein Werk weder schmälern noch verbessern. Und die alte Codebasis greife ich wirklich nicht mehr an.

    Nur eine kleines Beispiel aus der Änderung von lori__life-of-request_info:

    Alle Variablen und Funktionen liegen an einem Platz.

    Es dauert halt Tage und Wochen bis man es auf die moderne Welt transportiert hat.

  • Zitat von .Hermes

    Als OOP orientierter Programmierer habe ich dabei riesige Schwierigkeiten.
    Ich suche immer den Konstruktor, den Destruktor

    Und wieso suchst du danach? OOP erfordert das keinesfalls.

    Zitat von DAC324

    Das musst Du Mozilla fragen. Ich für mein Teil wäre ja schon mit einer halbwegs brauchbaren Dokumentation zufrieden. Statt dessen heißt es lapidar "deprecated - refer to [newAPI]". Und zu dem neuen API gibt es höchstens die Interface-Definitionen - kein Wort über benötigte Parameterformate oder Rückgabewerte.

    Ich weiß ehrlich gesagt nicht, was du vermisst, die Interface-Definitionen sind astrein dokumentiert. Hast du meinen Link überhaupt mal angeklickt? Jeder einzelne Parameter ist beschrieben. Im MDN stünde nichts anderes, sondern auch nur genau das, wenn es dazu bereits einen Eintrag gäbe.

  • Zitat von Sören Hentzschel


    Ich weiß ehrlich gesagt nicht, was du vermisst, die Interface-Definitionen sind astrein dokumentiert. Hast du meinen Link überhaupt mal angeklickt? Jeder einzelne Parameter ist beschrieben. Im MDN stünde nichts anderes, sondern auch nur genau das, wenn es dazu bereits einen Eintrag gäbe.

    Das Interface selbst ist gut dokumentiert, gut und knapp :) Das stimmt. Was ich vermisste, war ein Text in der Art des Places Developer Guide, der einen etwas "an die Hand" nimmt. Auch wenn man eine der "deprecated" Funktionen ersetzen möchte, steht man zunächst mal wie der Ochs vorm Berg, wenn in dem Interface z.B. auf den ersten Blick nichts mit gleicher Funktionalität zu finden ist.

    So ging es mir mit PlacesUtils.nodeIsLivemarkContainer und PlacesUtils.nodeIsLivemark. Zum Glück findet man nach einiger Suche auch die Quelltexte für diese abgekündigten Funktionen. Dann lässt sich das Ganze modularisieren und mit den Bestandteilen des neuen Interfaces bzw. der nicht abgekündigten Teile theoretisch wieder nachbauen.

    Beste Grüße

    DAC324

    Einmal editiert, zuletzt von DAC324 (18. September 2013 um 01:44)

  • Zitat von Sören Hentzschel

    OOP erfordert das keinesfalls

    Natürlich nicht. OOP ist ja erstmals ein theoretisches Konstrukt, das der Anwender mit Leben erfüllen kann.

    Zitat von Sören Hentzschel

    Und wieso suchst du danach?

    Ich hasse inzwischen den Zusammenhang der Werte einer Variablen zu suchen. Funktion(A) definiert sie, Funktion(B) referenziert sie, Funktion(C…X) ändert sie.
    Woher weiß nun Funktion(B), oder ich als Leser des Quelltext, ob die die Werte der Variablen im gültigen Bereich der Definitionen liegen ? Sie weiß es nicht, genauso wie ich es nicht weiß und darum missfallen mir alte Programme.

    Ich weiß selber von den Fehlern der archaischen Programmierung, jedenfalls kann OOP einiges klarstellen.

    P.S. es ging mir nie um das Interface, aka API, zu Mozilla.

  • Zitat von Sören Hentzschel


    Ich weiß ehrlich gesagt nicht, was du vermisst, die Interface-Definitionen sind astrein dokumentiert.

    Wie aber referenziere ich beispielsweise das benötigte Objekt mozILivemarkInfo?

    Klar, als Mozilla-Experte sind das Basics, die sicherlich kein Aufhebens wert sind. Deshalb findet man in der "Dokumentation" auch nur, dass mozILivemarkInfo ein jsval-Objekt ist.

    Allerdings kann man nun nicht einfach mit new () ein jsval - oder mozILivemarkInfo-Objekt erstellen, dies führt zum Fehler "Reference to jsval is undefined". Kein Hinweis darauf, was ich in die includes schreiben muss, damit ich diese Objekte referenzieren kann. Das ist es, was nervt.

    Beste Grüße
    DAC324

  • Hallo,

    Gerade probiert - die Leutchen verweisen auch auf die veraltete Dokumentation (https://developer.mozilla.org/en-US/docs/Usi…ivemark_service) und wissen anscheinend nicht wirklich weiter (oder meine Fragen waren zu sehr low-level :D).

    Jedenfalls habe ich nach viel Lesen nun etwas, das nach einer Lösung aussieht. PlacesUtils.livemarks.createLivemarkFolderOnly wird folgendermaßen ersetzt:


    Auch PlacesUtils.nodeIsLivemarkContainer kann ersetzt werden:

    Code
    nodeIsLivemarkContainer: function (aNode) {
            return PlacesUtils.nodeIsFolder(aNode) && PlacesUtils.annotations.itemHasAnnotation(aNode.itemId, SyncPlacesBookmarks.SP_LMANNO_FEEDURI); 
        }

    Den Download gibt es hier.

    PlacesUtils.nodeIsLivemarkContainer war auch ein Problem in CheckPlaces. Dies ist ja nun gelöst, deshalb gibt es jetzt auch wieder CheckPlaces mit wieder hergestellter Livemark-Funktionalität.
    Den Download gibt es hier.
    Beste Grüße
    DAc324

  • Zwischenruf:
    @ Checkplaces:
    In der Nightly-Version funktioniert Checkplaces mit den Änderungen von Bernd.

    Zitat von Bernd.

    Dazu in der progress.js Zeile 167 bis 204 löschen.

    Code
    else if (checkContents && PlacesUtils.nodeIsLivemarkContainer(child)) {
    ...
    }


    erst wieder, wenn die install.rdf gebumpt wurde..

  • Zitat von Boersenfeger

    Zwischenruf:
    @ Checkplaces:
    In der Nightly-Version funktioniert Checkplaces erst wieder, wenn die install.rdf gebumpt wurde..


    Danke für den Hinweis. Die install.rdf muss man leider öfter mal anpassen. Ich habe allerdings bei mir (auch bei anderen Erweiterungen) den Effekt, dass "99.*" als MaxVersion nicht akzeptiert wird. Firefox beschwert sich dann weiterhin über die angeblich fehlende Kompatibilität. Ich weiß nicht, ob es an der ersten oder der zweiten "9" liegt - bei mir steht im Moment

    Code
    <em:maxVersion>43.*</em:maxVersion>

    Das reicht vermutlich nur für die nächsten Wochen, höhere Zahlen werden hier aber wie gesagt leider abgelehnt.

    Beste Grüße
    DAC324

    Einmal editiert, zuletzt von DAC324 (18. Januar 2014 um 17:32)

  • .. du hättest ganz drauf verzichten können, ich bin zwar schon älter aber noch nicht senil und weiß was ich schrieb...
    andere würden dich als "Vollquotel" betiteln... ich weise dich freundlich drauf hin...

    Zitat

    ..und auch das "Quoting" will gelernt sein, wenn man nicht als "Vollquotel" bezeichnet werden will. Das vollständige Rezitieren (Vollquote) der vorangegangenen Nachricht am Ende eines Postings gilt als unfein.


    Quelle

  • Es gibt ein kleines Update zu Checkplaces von mir - mit einem guten Hintergrund. Da ich anderweitig ~16.000 Lesezeichen noch verwalten muss und immer wieder neue hinzukommen, die wohl gleich sind, aber mal ohne www davor oder in Groß-Klein abweichen - die findet leider Checkplaces nicht. AM-Deadlink ja, aber damit ist keinerlei Bearbeitung möglich, LinkCollector findet auch nicht alles, kann dafür bearbeiten, dauert nur ewig und drei Tage, bis es die Places neu gespeichert hat.

    Daher eine kleine Einschub-Korrektur in die "progress.js" (unter \chrome\content) - die Veränderungen sind rot markiert:
    Ab Zeile 249 bis 292neu

    Was passiert?
    - Zum einen wird ein führendes www. entfernt, dann alles in Kleinschrift gewandelt und zuletzt ein nachhängender / entfernt. Anschliessend geht das in die Verarbeitung.

    Die Verarbeitung erfolgt mit geänderter Adresse, ausgegeben wird jedoch das Original. Leider ist die Funktion für mich zu komplex, als dass ich beide ausgeben könnte auf der rechte Seite, also nicht wundern, wenn die identisch erscheinen, es aber nicht sind. Sortieren müsst ihr eure Lesezeichen sowieso ;)

    Die modifizierte Funktion nochmal als Code für copy&paste

  • Vllt liegts an deinem Browser? Getestet an v26 mit ~2000 und ~16.000 Lesezeichen - bei letzteren läuft es auf eine Laufzeitwarnung hinaus, mehr auch nicht.