Wie werden Thumbnails gecached und benannt [Eden]

  • Das XBMC cached annähernd alles an Bildern, was es zur Darstellung vorgesetzt bekommt.
    Zum einen, damit diese schneller geladen werden können und zum anderen, damit diese für die SQL-DB nachvollziehabr bleiben.
    Die Benennung der Dateien erfolgt nach folgendem Schema:
    Es wird ein CRC32-Wert aus dem Pfadnamen und dem Dateinamen (in Kleinbuchstaben) erstellt.
    Und es wird ein Hash-Wert auf Basis der Dateigröße und dem Modifizerungsdatum erstellt, um zu erkennen, ob das Bild geändert wurde.

    All das macht das XBMC schneller. Aber wer sich mal in den Thumbnailordner gewagt hat, der wird gesehen haben, dass er keine CRC-Prüfsummen lesen kann.
    Jetzt nervt es natürlich, wenn man genau ein Thumbnail erneuern will, dass man dies im Thumbnailordner nicht finden kann.
    Aber ... dafür gibt es das Webinterface des XBMC.

    Man verbindet sich über das Webinterface mit dem XBMC und wählt den entsprechenden Eintrag aus.
    Klickt man nun mit der rechten Maustaste auf das Cover, wird einem direkt oben der Name des gecachten Thumbs angezeigt.

    Externer Inhalt farm9.staticflickr.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.


    Man kann natürlich auch auf "Bild öffnen..." klicken und bekommt dann den gesamten Pfad in der Adresszeile präsentiert:

    Code
    http://192.168.1.15:8080/vfs/special://masterprofile/Thumbnails/Video/1/1c02cfad.tbn

    Die Pfade für Fanart lassen sich mit dem Standard-Webinterface so leider nicht ermitteln.
    Aber vielleicht findet da ja noch jemand etwas zu heraus.

    Um den Datenbankeintrag des Image-Cache zu löschen, benötigt man auch den realen Pfad des Bildes.
    Hier der übersetzte WIKI-Eintrag: (Die beschriebene Methode ist unter Linux)

    --------------
    Das Bild unter /home/x/.xbmc/addons/my.lovely.addon/icon.png soll geändert werden. Wenn man dies nun austauscht, verwendet das XBMC nach wie vor das gecachte Bild.
    Also muss das erzeugte Thumbnail und der Eintrag in der DB gelöscht werden:

    Code
    # Get the thumbnail path to remove the file from the filesystem
    $ sqlite3 .xbmc/userdata/Database/Textures6.db "SELECT cachedurl FROM texture WHERE url = '/home/x/.xbmc/addons/my.lovely.addon/icon.png';"
    6/6a643bff.png


    Der Befehl

    Code
    sqlite3 .xbmc/userdata/Database/Textures6.db "SELECT cachedurl FROM texture WHERE url = '/home/x/.xbmc/addons/my.lovely.addon/icon.png';"

    gibt den Dateinamen des Thumbnail aus.

    Code
    /home/x/.xbmc/userdata/Thumbnails/6/6a43bff.png

    Nun muss der Link auch noch aus der DB gelöscht werden:

    Code
    $ sqlite3 .xbmc/userdata/Database/Textures6.db "DELETE FROM texture WHERE url = '/home/x/.xbmc/addons/my.lovely.addon/icon.png';"

    Wenn nun das Bild benötigt wird, wird das XBMC es neu erzeugen.
    -------------

    Weitere Infos dazu:
    Wie das XBMC die Images erzeugt
    PHP, Python, Java etc Codebeispiele

    Vielleicht findet sich ja ein Addonprogrammierer, der damit was "basteln" kann... :)

  • Gut recherchierter und geschriebener Artikel! Fein gemacht :rolleyes:

    Vielleicht findet sich ja ein Addonprogrammierer, der damit was "basteln" kann... :)

    Ist das eine Aufforderung? Bzw. wird zu dem Thema denn noch ein Script o.Ä. benötigt?

    Grüße,
    sphere

  • So eine Art "Kill all related Images and DB-Entries"-Addon könnte ich mir vorstellen.
    Bei Start eine Auswahl, was alles gelöscht werden soll.
    Dann den Artikel auswählen und den "wenn weg dann weg"-Button klicken.

    Keine Ahnung, ob man über ein Addon überhaupt so weit in die DB kommt.

  • So eine Art "Kill all related Images and DB-Entries"-Addon könnte ich mir vorstellen.
    Bei Start eine Auswahl, was alles gelöscht werden soll.
    Dann den Artikel auswählen und den "wenn weg dann weg"-Button klicken.

    Keine Ahnung, ob man über ein Addon überhaupt so weit in die DB kommt.

    OK, ich setz mich mal ran. Ich denke als erstes würde es helfen pauschal alle Image-Caches zu einem Addon (z.B. Skin) zurückzusetzen - eine selektive Funktion könnte man später hinzufügen.

  • Ich will ja nicht an den Anforderungen vorbei entwickeln - kannst du noch genauer beschreiben wie du dir das vorstellst? Auch gerne per PM/Mail/IRC/Skype. Von mir aus kann auch gerne die Diskussion darüber aus diesem Info-Thread verschoben werden...

  • Ein Bedarf für ein Addon könnte folgeden Situationen auslösen:

    Thumbnailordner verkleinern:
    Man will alle Arten von gecachten Bildern entfernen, die keinen Zusammenhang mehr mit der DB haben.
    Somit könnte man den Thumbnailordner cleanen.

    Ein bestimmtes Cover/Fanart von einem Film ändern:
    Durch das bloße Ablegen eines neuen folder.jpg ändert das XBMC ja noch nicht das Cover.
    Derzeit kann man natürlich das eine Cover dann manuell über "Info"-"Cover laden" ändern.
    Wenn man aber das alte Cover endgültig killen will, müßte man es in den Thumbnails suchen.

  • Richtig s4ug4 :!:
    Ist echt n ding das xbmc das nicht standardmäßig drinn hat....
    Der XBMC Ordner (User Ordner) wird immer größer und größer , und "Ungültige Datenbankeinträge entfernen" ist ja irgendwie nur so ne art Augenwischerei (für mich) ....
    Datenbank ist dann CLEAN ,aber im keller Stapeln sich die DateiLeichen ... :whistling:

    Also wie gesagt .... wäre n SUPER addon !!! 8o

    Einmal editiert, zuletzt von h3x (3. September 2012 um 19:29)

  • Als Basisfunktion ist es bereits angedacht:

    Zitat


    The texture cache in the future will be auto-cleaning, i.e. textures that are stale will automatically be cleaned out to save disk space. Also, the music and video artwork will be moved to the new system. This will allow the cached versions of these images to be updated whenever the original image changes (eg you replace the fanart with a different version).

    In addition, the texture cache will be updated to automatically tell the image control that it needs to refresh itself. Currently if the texturecache detects that a new version of an image is available (whether it be a .dds version or an updated copy of the original image that has since changed) then all that happens is the new version gets re-cached. Thus, you only see the new version of an image once you view it a second time after any change (this allows the image to be free'd from memory and reloaded from the freshly updated version).

    Lastly, DXT5YCoCg is likely to be supported, as is further compression for the on-disk images in the form of lzo. If we do lzo compression then the cached versions will likely be 30-50% smaller, but ofcourse they will then be not loadable in any other software other than XBMC.

  • Es gibt doch schon ein Script dafür, den XBMCThumbnailCleaner . Hab ich regelmäßig im Einsatz und funktioniert wunderbar. Oder versteh ich gerade irgendwas falsch? Zum Aufräumen ist das wirklich top und zumindest eine Alternative, bis die Funktion standardmäßig in XBMC integriert wird.

    Edit: Sorry, x-mal URL Weiterleitung korrigiert

  • hab ich das nun richtig verstanden:
    dersphere arbeitet nun an sowas ? 8o

    Ja und Nein. Ich "arbeite" daran - wobei ich noch keine Zeile Code geschrieben habe, ich bin immer noch am überlegen bzw. Code studieren wie man so etwas machen könnte.

    Ein automatisches "ich habe eine Grafik ausgetauscht und die vorherige Version soll gelöscht werden" wird allerdings nicht funktionieren da die im Cache liegenden Dateien ja nur einen Hash-Dateinamen haben - diesen kann man ja bekanntlich nicht "zurück übersetzen" - ich habe also keine Möglichkeit zu erkennen, wofür jeweils ein Cachefile steht bzw. ob es noch benötigt wird.

    Aktuell prüfe ich den Ansatz ein bestehendes Webinterface Addon dahingehend zu erweitern, dass es pro Video/Audiofile etc. einen Button o.Ä. gibt welcher den Cache in der Datenbank und im Cache Ordner entfernt.

    Dazu kommt noch, dass es sowieso nur entweder eine Eden oder Frodo (bzw. nightly) Version geben muss da hier das Caching grundlegend verändert worden ist...

    Grüße,
    sphere

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!