Skip to content

v2.0.9

Choose a tag to compare

@krichel89 krichel89 released this 10 Jul 14:53

LrMediaWiki2 – SDC-Erweiterungen (Cammello-Angleichung) + Sicherheits-/Robustheits-Fixes

Version 2.0.9 (Juli 2026)

Korrekturen nach Praxistest von 2.0.8 – Umbau auf ausschließlich in dieser
Lightroom-Installation NACHWEISLICH funktionierende Bindings:

  1. Suchergebnisse wieder sichtbar. Befund: push_buttons mit GEBUNDENEM
    Titel aktualisieren nicht (im Basis-Plugin existieren gebundene Titel nur
    auf static_text), und visible auf Zeilen-Containern wird ignoriert –
    deshalb blieben die Treffer-Buttons unsichtbar. Neu: Treffer erscheinen im
    Dropdown mit gebundenen Items (dieser Mechanismus hat in 2.0.7
    nachweislich funktioniert), der erste Treffer ist vorausgewählt, und
    „⬅ Übernehmen" (statischer Titel, bewiesen) übernimmt – der Normalfall
    bleibt also EIN Klick, wie gewünscht. Ein direkter Klick auf einen
    Listeneintrag ist im LrView-SDK nicht zuverlässig abbildbar: es gibt kein
    Listen-Control, der Auswahl-Observer war nachweislich unzuverlässig
    (2.0.7) und gebundene Button-Titel nachweislich unsichtbar (2.0.8).
  2. Leere Sprachzeilen ausgeblendet: visible ist jetzt auf den
    FELDERN der Caption-Zeilen gebunden statt (nur) auf der Zeile –
    Zeilen-Container haben laut SDK-Doku keine eigenen
    Nicht-Layout-Properties. VERIFY: Control-Level-visible ist in dieser
    Installation noch ungetestet; falls die leeren Zeilen weiterhin sichtbar
    sind, ist der Fallback, alle 12 Zeilen fest anzuzeigen und ➕ zu
    entfernen – bitte Rückmeldung.

Version 2.0.8 (Juli 2026)

  1. Suchergebnisse als klickbare Liste im Dialog (statt Dropdown): Nach
    0,6 s Tippruhe erscheinen bis zu 5 Treffer als Buttons direkt unter dem
    Suchfeld („Label – Beschreibung (QID)"); ein Klick übernimmt. Kein
    ✚-Button, kein Dropdown, kein Auswahl-Observer mehr – der unzuverlässige
    Klick-Observer aus 2.0.7 ist ersetzt. (Ein popup_menu lässt sich per SDK
    nicht programmatisch aufklappen; die offene Button-Liste ist das
    gewünschte Verhalten.)
  2. Kommentare jetzt sichtbar: Ein Klick auf ein Suchergebnis trägt
    Q640 # Harald Krichel ins Feld ein; die Zeile landet 1:1 als
    depicts=… im Wikitext-Feld. Im Export-Dialog sind die Defaults
    jetzt kommentiert (Q73566113 # copyrighted, Q18199165 # CC BY-SA 4.0)
    und die Lizenz-Auswahl zeigt Q18199165 # CC BY-SA 4.0 /
    Q6938433 # CC0. Der Export streift # … weiterhin vor dem Upload ab.
  3. Farbliche Hervorhebung entfernt (LrColor/text_color raus).
  4. Sprachen als freie ISO-Code-Felder: Die ersten 4 Slots sind mit
    en/de/fr/it vorbelegt; „➕ Sprache" blendet einen leeren Slot ein,
    der Code wird von Hand eingetragen (12 Slots gesamt). Geparste Captions
    in weiteren Sprachen werden automatisch auf die Slots verteilt
    (alphabetisch); bei mehr als 12 Sprachen bleiben überzählige
    caption_XX=-Zeilen verlustfrei erhalten (Überlauf-Logik, getestet).
    Ungültige Codes (< 2 Buchstaben, Leerzeichen) werden beim Speichern
    verworfen statt kaputte Labels hochzuladen.

Datei ToolEditSdc.lua wurde komplett neu geschrieben. VERIFY in Lightroom:
push_button mit GEBUNDENEM title (die Treffer-Buttons) – erstmals in diesem
Plugin verwendet; falls die Titel nicht aktualisieren, bitte melden.

Version 2.0.7 (Juli 2026)

  1. QID-Labels in zartem Blau. Per-Feld-Hintergrundfarben sind im
    Lightroom-SDK nicht möglich (background_color existiert nur auf
    scrolled_view, Min. 80 px Höhe + Scrollbalken). Stattdessen sind die
    Label-Texte der QID-Felder (Depicts, Created during) in einem dezenten
    Blau (LrColor(0.25, 0.45, 0.75)) – so sind die Wikidata-Felder
    visuell sofort erkennbar.
  2. ➕ Sprache fügt jetzt über die initialen 4 hinaus bis zu 12 Sprachen
    hinzu
    (en/de/fr/it/es/nl/pl/ru/zh/pt/ja/uk). Captions in weiteren
    Sprachen bleiben verlustfrei im Wikitext-Feld.
  3. Klick auf Suchergebnis übernimmt direkt (kein ✚-Button mehr). Ein
    Observer auf der Dropdown-Auswahl feuert automatisch; ein Guard-Flag
    verhindert, dass die programmatische Befüllung mit Suchergebnissen
    bereits einen Eintrag hinzufügt.
  4. QID-Kommentare: Ein Suchergebnis wird als Q640 # Harald Krichel
    eingetragen; bei manueller Eingabe kann man Q18199165 # CC BY-SA 4.0
    schreiben. Der Export streift den # …-Teil beim Splitten/Normalisieren
    sauber ab (Depicts-Loop, normalizeSdcQid für Batch-Felder). Kommentare
    werden in description_all gespeichert und round-trippen verlustfrei.
    Auch im Export-Dialog (Creator, Copyright, License, Created during) kann
    man jetzt Q640 # Name eintippen.

Version 2.0.6 (Juli 2026)

  1. Verteilen-Haken: Merge statt Ersetzen, standardmäßig gesetzt. Beim
    Übertragen auf die Auswahl werden fehlende QIDs ergänzt; eigene Depicts der
    Fotos bleiben erhalten. Die Duplikaterkennung greift auch über alte
    Komma-Listen (Randfall vom Test gefangen: vorher hätte Q1, Q2 + Q2 ein
    Duplikat erzeugt).
  2. Upload-Format verifiziert: Der Export erzeugt bereits eine separate
    P180-Aussage pro QID
    (per Test gegen den JSON-Aufbau bestätigt); die
    Semikolon-/Komma-Liste ist nur das Eingabeformat und wird vor dem Upload
    gesplittet. Keine Änderung nötig.
  3. Layout: QID-Feld und Suchfeld je in einer Zeile; das Ergebnis-Dropdown
    nutzt darunter die volle Breite (Depicts und Created-during).
  4. Nur noch 5 Sprachen im Caption-Dropdown (en, de, fr, it, es; 4 sichtbar,
    ➕ blendet die fünfte ein). Captions in anderen Sprachen bleiben verlustfrei
    im Wikitext-Feld und werden beim Export weiterhin publiziert.
  5. Neuer Button „⬇ Captions → Wikitext": übernimmt alle gefüllten Captions
    als {{lang|1=…}}-Blöcke an den Anfang des Wikitext-Felds (idempotent:
    identische Blöcke und doppelte Sprachen werden übersprungen); die Captions
    selbst bleiben unverändert als SDC-Labels erhalten.
  6. Umbenennung: „Description (all)" heißt jetzt überall „Wikitext"
    Set-Titel „LrMediaWiki – Wikitext", Feld-Label, Menüpunkt („🔁 Description
    fields ↔ Wikitext"), Tooltips, Übersetzung. Die Feld-ID description_all
    bleibt unverändert (kein Schema-Bump, keine Datenmigration, macOS-Kürzel
    für den SDC-Editor unberührt).

Version 2.0.5 (Juli 2026)

SDC-Editor (ToolEditSdc.lua) komplett überarbeitet:

  1. Live-Suche bei Eingabe: Suchfeld für Depicts UND Created-during – die
    Wikidata-Suche startet automatisch nach 0,6 s Tippruhe (Debounce per
    Generations-Zähler; ein neuer Tastendruck bricht die alte Abfrage ab).
    Ergebnisse erscheinen in einem Dropdown im selben Dialog (kein
    verschachtelter Modal mehr); „✚"-Button übernimmt die Auswahl.
  2. Semikolon statt Komma als Depicts-Trennzeichen (Semikolon ist
    eindeutiger in Titeln mit Komma). Der Export (MediaWikiInterface.lua)
    akzeptiert jetzt beides – Komma und Semikolon – damit bestehende
    describes=-Zeilen weiter funktionieren.
  3. Created-during mit eigener Suchzeile (Dropdown + ✚) – gleiche
    Live-Suche wie Depicts, schreibt eine einzelne QID.

Zu verifizieren in Lightroom: addObserver auf Property-Table-Felder und
items = bind(…) für dynamisch befüllte popup_menus sind Standard-SDK, aber
in diesem Plugin erstmals verwendet. Falls das Dropdown nicht aktualisiert
wird, Fallback: die Observer-Zeilen entfernen und stattdessen den alten
Button-getriebenen Ablauf beibehalten (sag Bescheid).

Version 2.0.4 (Juli 2026)

SDC-Editor leichter erreichbar: „🏷️ Edit Structured Data (SDC)" und der
Konverter stehen jetzt zusätzlich unter Bibliothek → Zusatzmoduloptionen
(LrLibraryMenuItems) – im Bibliothek-Modul ein Menü näher an der
Metadatenarbeit. Für Ein-Tasten-Zugriff auf dem Mac: Systemeinstellungen →
Tastatur → Tastaturkurzbefehle → App-Kurzbefehle → „+", App „Adobe Lightroom
Classic", als Menütitel exakt „🏷️ Edit Structured Data (SDC)" einfügen
(am besten kopieren, wegen des Emojis) und ein Kürzel vergeben. Die Titel in
beiden Menüs sind absichtlich identisch, damit das Kürzel unabhängig vom Menü
dasselbe Skript startet.

Version 2.0.3 (Juli 2026)

Wikidata-Namenssuche im SDC-Editor wieder eingebaut (war in einer früheren
Runde auf Wunsch entfernt worden): Unter dem Depicts-Feld gibt es wieder
Suchfeld + „🔍 Suchen". Die Suche nutzt wbsearchentities (öffentlich, ohne
Login, Sprache de, max. 10 Treffer); die Auswahl erfolgt in einem
Treffer-Dialog („Label – Beschreibung (QID)"), die QID wird ans Depicts-Feld
angehängt (dedupliziert, q→Q normalisiert). Zu verifizieren in Lightroom: der
Treffer-Dialog öffnet als verschachteltes Modal über dem Tool-Dialog – falls
das klemmt, Umbau auf eine Ergebnisliste im selben Dialog. Das manuelle
Depicts-Feld funktioniert unabhängig davon.

Version 2.0.2 (Juli 2026)

  1. Doppelte „Farbmarkierung beim Export" entfernt (Zusatzmodul-Manager):
    Die Zeile existierte zweimal – einmal korrekt als popup_menu mit
    übersetzbaren Farbnamen, einmal als combo_box mit rohen englischen Werten
    (und einem nil als erstem Item, das in Lua das Array kappt). Das Duplikat
    ist entfernt; die Farbnamen sind jetzt übersetzt.
  2. Farbmarkierung zusätzlich im Export-Dialog (Sektion Login/Einstellungen,
    unter dem API-Pfad). Gleiche globale Einstellung wie im Zusatzmodul-Manager
    (eine Quelle: Plug-in-Preferences; geladen in startDialog, gespeichert in
    endDialog).
  3. Set „Description (all)" auf das eine Feld reduziert (25 Zeilen hoch) –
    Captions/SDC stecken im Wikitext bzw. werden extern erstellt und
    eingefügt.
  4. Deutsche Übersetzungen ergänzt (TranslatedStrings_de.txt, ~28 neue
    Einträge): SDC-Export-Sektion, Seitenleisten-Felder inkl. Tooltips,
    Farbnamen, HTTPS-/Galerie-Meldungen, „Beschreibung (gesamt)". Nebenbei
    drei vorbestehende Formatdefekte repariert (Trailing-Komma nach dem
    schließenden Anführungszeichen in Zeilen 78/191/192 – solche Zeilen werden
    je nach Parser ignoriert). Hinweis: „Stellt dar (P180)" ggf. an die
    bevorzugte Commons-Terminologie anpassen. Die Dialoge der neuen Tools sind
    direkt deutsch beschriftet.
  5. ToolEditSdc repariert („We can only wait from within a task"): Das Tool
    las Foto-Metadaten außerhalb eines Tasks (Menü-Skripte laufen auf dem
    UI-Thread). Der gesamte Ablauf läuft jetzt in einem Async-Task; der Dialog
    aus dem Task heraus ist das etablierte Muster des Plugins
    (MediaWikiInterface.prompt).

Version 2.0.1 (Juli 2026)

Versionspolitik ab jetzt: die dritte Stelle (Revision) steigt bei jeder
gelieferten Änderung; die zweite Stelle nur auf ausdrücklichen Wunsch.
(Nebenbefund behoben: Info.lua enthielt ZWEI VERSION-Einträge – Lua behält
still den letzten; das tote Duplikat ist entfernt.)

Seitenleiste: Depicts (P180) und darunter Created during (P10408) sind
jetzt in den Metadaten-Sets sichtbar (die Felder existierten seit Schema 11,
standen aber in keinem Set – Sets bestimmen die Anzeige, nicht der Provider).
Neu dazu die Einzelfelder Description (en) / Description (de)
(Schema 11 → 12).

Neues Set „LrMediaWiki – Description (all)": eigene Ansicht für das
All-in-one-Wikitext-Feld (15 Zeilen) + Caption/Depicts/Created-during/
Categories. description_all ist aus den Sets „Information" und
„Information (de)" ausgelagert; dort stehen jetzt die Einzelfelder.

Konvertierung: Das Lightroom-SDK bietet KEINEN Hook beim Umschalten des
Metadaten-Dropdowns (Tagsets sind rein statische Definitionen aus id/title/
items). Automatisches Konvertieren „beim Umschalten" ist daher nicht möglich.
Stattdessen:

  • Menü-Tool „🔁 Description fields ↔ Description (all)" (Datei →
    Zusatzmoduloptionen): konvertiert die Auswahl in beide Richtungen mit
    Move-Semantik. Konfliktschutz: anders belegte Ziele werden übersprungen und
    gezählt, nichts wird überschrieben; identische Werte werden dedupliziert.
    Verschachtelte Templates in Beschreibungen ({{w|…}} u. ä.) werden korrekt
    balanciert geparst.
  • Export-Merge als Sicherheitsnetz: Beim Export werden gefüllte
    Einzelfelder automatisch als {{en|1=…}} / {{de|1=…}} in die
    Wikitext-Beschreibung eingemischt (mit Duplikatschutz). Beide Darstellungen
    sind beim Export also immer gleichwertig – auch ohne das Tool.

Bereinigt: „Information (de)" referenzierte sechs Felder, die es im
Provider nicht mehr gibt (source, author, date, otherVersions,
templates, alt-description_de) – ersetzt durch existierende Felder.
Per-Foto source/author/date wären zudem semantisch falsch (sie landeten in
|description=); falls du echte Per-Foto-Overrides dafür willst, geht das
sauber nur als neue key=value-Tags plus Exporter-Support – auf Zuruf.

Diese sechs Dateien ersetzen die gleichnamigen Dateien in deinem Plugin-Ordner
mediawiki.lrdevplugin/. Alle wurden mit luac5.1 -p (Lua 5.1, wie im
Lightroom-SDK) syntaxgeprüft; die reine String-/Logik-Teile sind zusätzlich mit
automatisierten Tests abgesichert (inkl. JSON-Escaping-Tests gegen die echte
gebündelte JSON.lua). Das GUI-/Laufzeitverhalten in Lightroom konnte nicht
getestet werden
– siehe „Bitte prüfen".

Audit-Fixes (Sicherheit/Robustheit, Juli 2026)

  1. Passwort/Tokens nicht mehr im Logfile (MediaWikiApi): Request-Body- und
    Response-Traces maskieren password/lgpassword/token/logintoken/
    lgtoken sowie …token="…"-Werte. Vorher stand das Klartext-Passwort bei
    aktiviertem Logging in Documents/LrMediaWikiLogger.log (upstream sogar so
    dokumentiert). Alte Logdatei löschen!
  2. wbeditentity-JSON via JSON:encode statt String-Konkatenation: Captions
    mit ", \ oder Steuerzeichen konnten das JSON brechen oder Struktur
    injizieren. Leere Teile werden weggelassen (kein [] für labels).
  3. Galerie-Überschreib-Schutz: Ein Lesefehler (z. B. HTTP 429 direkt nach
    dem Batch) wurde bisher als „Seite existiert nicht" gewertet → die
    bestehende Galerie-Seite wurde komplett ersetzt. Jetzt wird nur bei 404 neu
    angelegt, sonst übersprungen (Bezel-Hinweis + Trace).
  4. Passwort nicht mehr in Export-Presets: password ist kein
    exportPresetField mehr; beim Speichern eines Presets landete es sonst im
    Klartext auf der Platte. Alte Presets ggf. neu speichern/löschen.
  5. HTTPS-Zwang: http://-API-Pfade werden vor dem Login abgelehnt.
  6. badtoken-Retry für den Multipart-Upload (verhindert Batch-Abbruch bei
    abgelaufenem CSRF-Token).
  7. Rename-Upload-Fehler nicht mehr verschluckt (Rückgabewert der Rekursion
    wird propagiert).
  8. Platzhalter-Prüfung: Whitelist üblicher Tags (<sub>, <ref>,
    <gallery> …), prüft alle Vorkommen; vorher brach ein legitimes <sub> den
    ganzen Export ab.
  9. Artwork-/Object-photo-Platzhalter repariert (<artArtist> usw. wurden
    durch eine Tabellen-Neuzuweisung verworfen).
  10. Galerie-Namensextraktion: das zu \x01 95p verstümmelte französische
    „ à " wurde durch die korrekte UTF-8-Sequenz (\195\160) ersetzt.
  11. Search&Replace-Tools: Nutzereingabe wird jetzt literal behandelt
    (ToolSearchAndReplaceMetadata.lua, ToolSearchAndReplaceFilename.lua).
    Vorher wurde die Eingabe als Lua-Pattern interpretiert: Suchtexte, die auf
    % enden (z. B. „50%") oder ein unbalanciertes [ enthalten, warfen einen
    Laufzeitfehler mitten im Batch; ( ) . * + - ? ^ $ änderten still die
    Semantik (z. B. fand „(Test)" das Literal nie). Zusätzlich: Guard gegen
    leeren Suchstring (hätte den Ersatz zwischen jedes Zeichen eingefügt).
  12. Weitere Korrekturen in den S&R-Tools: Metadata-Tool: tote, doppelt
    fehlerhafte Hilfsfunktion entfernt. Filename-Tool: Bindungs-Tippfehler
    replacStr korrigiert; Dateiendung wird jetzt korrekt abgetrennt (vorher
    starr letzte 4 Zeichen – falsch bei .jpeg/.tiff/ohne Endung); eine
    Katalog-Write-Transaktion für den ganzen Batch statt eine pro Foto
    (schneller, ein Undo-Schritt).

Installation

Dateien nach mediawiki.lrdevplugin/ kopieren (vorhandene überschreiben),
Lightroom neu starten bzw. das Plugin im Zusatzmodul-Manager neu laden.

Weil MediaWikiMetadataProvider.lua jetzt schemaVersion = 11 hat (vorher 10)
und zwei neue Felder enthält, registriert Lightroom diese beim Neuladen.
Die neuen Felder findest du in der Metadaten-Seitenleiste, indem du oben im
Panel das Metadaten-Set „LrMediaWiki" auswählst
(bzw. über „Customize" die
Felder einblendest). In der Standard-Ansicht erscheinen Plugin-Felder nicht
automatisch – das ist normales Lightroom-Verhalten, bitte verifizieren.

Geänderte Dateien

MediaWikiMetadataProvider.lua (Seitenleisten-Felder)

  • Zwei neue Per-Foto-Felder in der Metadaten-Seitenleiste:
    Depicts (P180) (kommagetrennte QIDs) und Created during (P10408) (eine QID).
  • schemaVersion von 10 auf 11 erhöht.

MediaWikiExportServiceProvider.lua

  • Liest die neuen Seitenleisten-Felder depicts / created_during pro Foto.
  • Vorrang-Reihenfolge: Seitenleisten-Feld → description_all-Zeile →
    Batch-Default aus dem Export-Dialog. (Ein gefülltes Seitenleisten-Feld
    gewinnt.)
  • Batch-Sektion „Structured Data (SDC)" (creator/copyright/license/created_during)
    wie zuvor; „hat SDC?"-Check erkennt beliebige caption_XX-Sprachen.

MediaWikiInterface.lua

  • created_during (P10408) wird extrahiert und als Claim gesetzt.
  • Captions dynamisch: beliebige caption_XX-Sprachen (inkl. Subtags wie
    zh-hant) werden extrahiert und als SDC-Label publiziert.

MediaWikiApi.lua

  • wbEditEntity normalisiert QID-Werte (trim + q640Q640) und überspringt
    fehlerhafte Werte, statt bei einem ungültigen Wert den ganzen Request
    abzubrechen.

ToolEditSdc.lua

  • Wikidata-Suche vollständig entfernt (Suchfeld, Button, HTTP-/JSON-Code,
    zugehörige Imports).
  • Weiterhin vorhanden: pseudodynamische Captions, ein manuelles Depicts-Feld,
    Created-during, Freitextfeld. (Siehe offene Frage unten.)

Info.lua

  • Registriert das Tool im Extras-Menü (unverändert gegenüber vorher).

Offene Frage (bewusst nicht ohne Rückfrage geändert)

depicts und created_during existieren jetzt sowohl in der
Seitenleiste als auch im Modal-Tool. Beim Export gewinnt das
Seitenleisten-Feld. Ob die beiden Felder aus dem Modal-Tool ganz entfernt
werden sollen (dann bleibt es ein reines Captions-/Freitext-Werkzeug), ist noch
offen.

Bitte in Lightroom prüfen (remote nicht testbar)

  1. Dass die neuen Metadatenfelder nach dem schemaVersion-Bump korrekt
    erscheinen (Metadaten-Set „LrMediaWiki" wählen). Ich bin nicht sicher, ob dein
    Lightroom bei einem reinen Feld-Zuwachs ohne updateFromEarlierSchemaVersion
    eine Warnung zeigt – bitte einmal testen. Bestehende Daten sollten erhalten
    bleiben.
  2. Das Ein-/Ausblenden der Caption-Zeilen per gebundenem visible (Fallback:
    visible-Zeile entfernen, dann alle Slots dauerhaft sichtbar).
  3. Dass verwendete Label-Sprachcodes gültige Wikibase-Codes sind – ein
    ungültiger Code ließe den wbeditentity-Call scheitern.
  4. Passwortfeld nach Fix 4: Beim Öffnen des Export-Dialogs muss das
    gespeicherte Passwort (aus LrPasswords via startDialog) wieder im Feld
    erscheinen und der Export funktionieren. Das ist die erwartete Mechanik,
    aber in LR ungetestet.
  5. Nur-Claims-Upload (Foto ohne Captions, nur depicts/created_during):
    einmal live prüfen, dass wbeditentity das data-JSON ohne labels-Teil
    akzeptiert.

Nicht unabhängig verifiziert

  • Q18199165 = CC BY-SA 4.0, Q6938433 = CC0, Q73566113 (Copyright-Default)
    stammen aus deinem Cammello-Stand, nicht aus eigener Prüfung.
    P10408 = created during ist gegen Wikidata verifiziert.