Datei-Information ändern im MIMIC-Skin

  • Hallo,
    ich benutze den MIMIC skin und bevorzuge den FileMode um meine Medien zu verwalten.
    Defaultmässig werden mir in der Listenansicht meiner Medien die Filme bzw. die Musikstücke mit der Dateigrösse angezeigt. Dies möchte ich gerne ändern.
    Anstatt der Dateigrösse möchte ich die Laufzeit der Medien angezeigt bekommen, also zb.:

    Default:
    Terminator.mkv 1,5 GB
    oder ACDC - TNT.mp3 3,2 MB

    ändern in:
    Terminator.mkv 1:44:30
    oder ACDC - TNT.mp3 3:45

    Gibts dafür ne Möglichkeit ?

    Danke

  • Hey,

    Über die Sortierung gibts keine Dauer bei Files, das müsste man also über eine Änderung der XML files machen.

    $INFO[ListItem.Duration] wäre die Info dazu und ginge auch im Dateimodus, Ausgabe wäre allerding in Minuten wie in Kodi üblich.
    Das hat aber einen Nachteil:

    Wenn deine Listenansicht nur zwei Textinfos im Design vorsieht (wegen der Höhe oder sonst was),
    hat man ja üblicher weise Label als Hauptinfo, was dem Dateinamen, Titel enspricht, und Label2 das je nach Sortierung unterschiedliche Infos bereitstellt.
    Ändert man nun Label2 zu $INFO[ListItem.Duration] dann verliert man jede Info die ein Sortieren nützlich macht - egal ob nach Größe oder sonstiger Sortierung, es käme immer

    $INFO[ListItem.Duration], was man dann wiederrum bei allem anderen außer etwas das eine Dauer hat wieder ausblenden müsste um dort überhaupt eine Info zurückzubekommen.

    Bei Bildern z.B...


    Möglich wäre es aber, man müsste sich aber mit Skinning beschäftigen.


    Grüße

  • Danke für die Info Marc0810,
    das schaue ich mir dann mal an und probiere was auf gut Glück.

    Welche xml-Datei müsste ich denn editieren mit $INFO[ListItem.Duration] ?

    Mich tiefer mit Skinning zu beschäftigen möchte ich nicht wirklich, ist doch sehr aufwendig und übersteigt mein Können.

    Gruß jorgo

  • Welche xml-Datei müsste ich denn editieren mit $INFO[ListItem.Duration] ?

    Das müsste ich auch nachsehen durch Tests mit aktivierten Debugging geraten würde ichs mit der
    <include name="View_50_List"> versuchen.

    Da der Skin aber laut Github hier schon verschiedene Optionen hat wie die Liste aussehen soll, wüsste ich nicht mal welche du nimmst.
    Dazu müsstes dir in die Keyboard ein Reload Skin legen und Versuche starten mit Ändern einer Markanten Stellen wie löschen eines Textes in den verschiedenen Itemlayouts ab Zeile 159 und erst mal das richtige finden das du verwendest.
    Dort gibts dann Codeblöcke wie

    Code
    <control type="label">
                                <left>135</left>
                                <top>52</top>
                                <right>80</right>
                                <height>60</height>
                                <label>$VAR[ListSubLabelVar]</label>
    </control>


    Das scheint eine Zusatzzeile zu sein. Dort könnte man das dann einfügen als Alternative oder stattdessen.

    Mehr Hilfe ist schwierig, wenn es diese Ansicht wäre gibts da Dummerweise eben Mehrfachcode wie sowas:
    <itemlayout height="120" width="1150" condition="!Skin.HasSetting(Enable.2ColumnList) + !Skin.HasSetting(Enable.SlimList) + !Skin.HasSetting(Enable.WideList)">

    Dieses Layout ist nur Aktiv wenn du nicht SlimList, Widelist oder 2Spaltige Liste ausgewählt hast, was immer das heißen mag;).. Es gibt also mindestens 4 Verschiedene Listen in einer, je nachdem was
    du eingestellt hast (oder auch gar nichts).

    Da müsstest dich schon damit Befassen denke ich.

    Ein Schuss ins blaue wäre das hier, vielleicht reicht dir das?:


    Such dir mal diese Stelle in der Variables.xml und füge ganz am Anfang als erstes value <value condition="Container.Content(files) + String.IsEmpty(ListItem.Size)">$INFO[ListItem.Size]</value>
    ein, dann sollte in der Subzeile als Info die größe angezeigt. Mit dem text rechts wäre ich wie gesagt vorsichtig da der für alle gilt.

    Aber auch dort ginge das vielleicht sogar so:


    Code
    <variable name="ListRightLabel">
    	<value condition="Container.Content(files) + String.IsEmpty(ListItem.Size)">$INFO[ListItem.Size]</value>
    	<value condition="Container.Content(tvshows)">$INFO[ListItem.Rating]</value>
    	<value condition="!Container.Content(albums) + !String.IsEmpty(ListItem.Label2)">$INFO[ListItem.Label2]</value>
    </variable>

    Versuchs mal damit vielleicht ist das das Richtige;).


    Wie gesagt, geraten ob es überhaupt diese View ist, jeder nennt ja alles Anders in seinem Skin, und auch die Bezeichnungen sind reine Erfindung des Skinners.


    Grüße

  • Hui, mit so ausführlicher Hilfe hab ich jetzt gar nicht gerechnet...Vielen Dank Marc0810 !!

    In deine Ideen und Vorschläge muss ich mir dann in Ruhe mal einlesen, ist für mich schon starker Tobak.
    Mal sehen ob ich da weiter komme, werde mir aber Zeit nehmen und deshalb die Sache aufs kommende Wochenende legen.

    Auf jeden Fall meld ich mich nochmal und berichte ob ich da was geschafft habe.

    Vielen Dank nochmal

    Gruß jorgo

  • Mal sehen ob ich da weiter komme, werde mir aber Zeit nehmen und deshalb die Sache aufs kommende Wochenende legen.

    Versuchs erst mal mit einer der beiden Variablen.. Ich denke das wars dann schon.
    Wenn ich den Code genauer Ansehe scheint das in allen vier Layouts dasselbe zu sein.
    Das heißt mit der einen Zeile mehr in einer der beiden käme der Text schon, egal welches der Layouts.

    Gesetz den Fall die View ist es, falls nicht wäre ein Bild immer hilfreich bei sowas.
    Dann kann man wenigstens selber schnell schauen welche view gemeint ist.

    Wenn nicht klar kommst dann einfach ein Bild der View posten. Dann finden wir schon die Richtige;).

    Grüße

  • Hallo Marc0810, deine Tipps waren Gold wert !! :-))


    Hab deine vorgeschlagenen Variablen probiert, wovon der 2te Weg funktionierte:
    Also habe ich hier unter
    <variable name="ListRightLabel">

    <value condition="Container.Content(files) + !String.IsEmpty(ListItem.Duration)">$INFO[ListItem.Duration] min</value>

    eingefügt und bekomme bei den Filmdateien nun sauber die Länge in min angezeigt anstatt der Dateigrösse. -große klasse-!!

    Leider funktioniert das nicht bei den Musikfiles, da bleibt alles beim alten ...naja, ist vielleicht auch bessser denn bei einzelnen mp3-Songs wäre dann immer nur die Minutenangabe etwas dürftig. Die Sekundenanzeige wird bei Kodi mit $INFO[ListItem.Duration] ja wohl nicht unterstützt.


    Also es hat schon einiges an Zeit gekostet, hab auch viel probiert wegen den Musikdateien wo es nicht geht. Auch war es zB. wichtig ein Ausrufezeichen vor String.IsEmpty zu setzen weil ohne ! es nicht ging, warum auch immer. ?(

    Ich habe aber dadurch so einiges dazugelernt und ein ganz klitzekleinen Einblick ins Skinning bekommen.
    Es ist schon sehr sehr anspruchsvoll und von daher hier ein grosses Lob an alle Skinner: Verdammt gute Arbeit die ihr da macht.

    Also, nochmals Vielen Dank Marc0810 !!
    Gruß

  • Also es hat schon einiges an Zeit gekostet, hab auch viel probiert wegen den Musikdateien wo es nicht geht. Auch war es zB. wichtig ein Ausrufezeichen vor String.IsEmpty zu setzen weil ohne ! es nicht ging, warum auch immer.

    Ausrufezeichen heißt Negieren, also in diesem Fall "Ist nicht leer". ohne würde es nur angzeigt wenn es leer ist was dann eben "kein Text" ergeben würde.
    Das würde dann z.B. bei Bilder zu leeren Text führen da die keine Länge haben.

    Schöner wäre wenn du <value condition="Container.Content(files) + !String.IsEmpty(ListItem.Duration)">$INFO[ListItem.Duration] min</value> das min in die Brackets setzt.
    <value condition="Container.Content(files) + !String.IsEmpty(ListItem.Duration)">$INFO[ListItem.Duration,,min]</value> - in deinem Fall zwar egal, aber global korrekter wenn man sich das so angewöhnt.
    Komma Text davor zweites Komma Text danach führt dazu das dieser Text nur kommt wenn die Info tatsächlich vorhanden ist.

    Bei Musik funktioniert das eigentlich auch. Ich müsste nachsehen ob es sich so verhält wie unter videos, aber wenn die selbe Quelle auch in der Datenbank ist, wären es keine "Files" mehr sonder "songs".

    Versuch mal als Zeile darunter dasseble mit Container.Content(songs) statts "files". Bei Variablen hilft es extrem wenn du einfach mal beim Nachverfolgen was eindeutiges dazu reinschreibst um festzustellen welche Zeile Verwendet wird.
    Variablen vergleichen sich von oben nach unten bis die erste Zeile zutrifft und bleiben dort "stehen". Ich würde jetzt z.B. mal in deine Zeile ein "xxx" einfügen als value.
    Sehen ob sie in Songs kommt, wenn nicht eine Zeile darunter <value condition="Container.Content(songs) + !String.IsEmpty(ListItem.Duration)">$INFO[ListItem.Duration,,min]</value> versuchen.

    Das bekommen wir schon auch noch hin;).

    Grüße

  • Schöner wäre wenn du <value condition="Container.Content(files) + !String.IsEmpty(ListItem.Duration)">$INFO[ListItem.Duration] min</value> das min in die Brackets setzt.
    <value condition="Container.Content(files) + !String.IsEmpty(ListItem.Duration)">$INFO[ListItem.Duration,,min]</value> - in deinem Fall zwar egal, aber global korrekter wenn man sich das so angewöhnt.

    Habe ich jetzt bei mir nun auch so korrigiert. Danke dir auch für die Erklärung mit dem Ausrufezeichen :)

    Mit der Musik habe ich noch keine Erfolgsmeldung, die Container.Content(songs)... klappt nicht, es wird immer nur die Größe angezeigt. Vielleicht ist das ein Problem weil ich ja keine Datenbank angelegt habe ? Ich nutze ausschliesslich den Filemodus, nur mit Ordnern und Dateien.

    Ich würde jetzt z.B. mal in deine Zeile ein "xxx" einfügen als value.

    Leider hab ich nicht ganz begriffen an welcher Stelle genau ich diese "xxx" in meine Zeile einsetzen soll.

    Eine Sache ist mir aber aufgefallen:
    Wenn ich die Zeile
    <value condition="Container.Content(files) + !String.IsEmpty(ListItem.Duration)">$INFO[ListItem.Duration,,min]</value>
    ohne Ausrufezeichen einsetze habe ich bei den Filmdateien wieder den alten Zustand, also die Dateigröße, und bei den Musikfiles ist dann das Feld leer.

    So langsam glaube ich das die Sache zu aufwendig wird, oder ? Ich habe jetzt schon so tolle Hilfe von dir bekommen und möchte das nicht überstrapazieren. Falls du natürlich noch ne Idee hast bleib ich natürlich gern am Ball :)

    Gruß

  • ohne Ausrufezeichen einsetze habe ich bei den Filmdateien wieder den alten Zustand, also die Dateigröße, und bei den Musikfiles ist dann das Feld leer.

    das xxx als Nachverfolgung welche Zeile genau greift ins value

    Code
    <value condition="Container.Content(files) + !String.IsEmpty(ListItem.Duration)">xxx $INFO[ListItem.Duration,,min]</value>

    Zeigt schon mal an ob auch wirklich diese Zeile verwendet wird.
    Die erste alternative wäre jetzt einfach

    Code
    <value condition="!String.IsEmpty(ListItem.Duration)">xxx $INFO[ListItem.Duration,,min]</value>

    Steht danach was mit xxx da ist die Zeile schon mal in Musik aktiv, ist sie ansonsten leer gibts diese Info einfach nicht.
    Ich schau die Tage mal nach in Kodi woran das liegen könnte. Eigentlich gibts nur Files oder Songs das es sein könnte. Mich Beschleicht gerade der Verdacht das die Länge leer ist im Dateimodus.

    So langsam glaube ich das die Sache zu aufwendig wird, oder ? Ich habe jetzt schon so tolle Hilfe von dir bekommen und möchte das nicht überstrapazieren. Falls du natürlich noch ne Idee hast bleib ich natürlich gern am Ball

    Neee.. Knobeln gehört dazu;).. Liegt auch daran das ich Musik nie verwende. Da muss ich dann auch erst mal direkt in Kodi schauen.
    Lass es mal so, ich sag dir Bescheid wenn ich näheres weiß. Kann aber ein zwei Tage dauern...

    Grüße

  • Freut mich das du dem Problem auf der Spur bleibst :)

    Ich habe jetzt mal deine beiden Vorschläge mit den xxx ausprobiert:
    Bei dieser Zeile

    Code
    <value condition="!String.IsEmpty(ListItem.Duration)">xxx $INFO[ListItem.Duration,,min]</value>


    ist alles wie gehabt, also Film wird in min angezeigt, jetzt aber mit xxx vor der Zeit. Bei Musik auch alles beim alten, leider nur die Dateigröße.

    Bei diesem Vorschlag

    Code
    <value condition="!String.IsEmpty(ListItem.Duration)">xxx $INFO[ListItem.Duration,,min]</value>

    gibt es keine Veränderung zu obigem.

    Vielleicht gibt es ja bei Musik wirklich keine Längeninformation im Dateimodus wie du schon vermutest.

    Danke das du das noch nachschauen möchtest, hat auch alles keine Eile.

    Gruß

  • Hey,

    Sorry, Dauerte etwas;)..

    Also bei mir kommt Dauer im Dateimodus auch nur wenn ich das lesen von Tag Infos Aktiviere in Kodi, ohne gibt es nur Dateidatum und Größe..
    Offenbar, obwohl ich gar keinen mp3 Tag "Dauer" in den Musikdateien finde, wird damit wohl auch die Mediainfo irgendwie mit eingeschlossen.

    Aktiviere ich die info

    Externer Inhalt up.picr.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.


    dann kommt im Label 2 Dauer und ListItem.Duration ist ebenfall gefüllt.

    Wenn du diese Kodi option aktivierst sollte es mit <value condition="!String.IsEmpty(ListItem.Duration)">$INFO[ListItem.Duration,,min]</value> gehen.
    Danach müsstest mal testen ob du sonst irgendwas was du mit der Liste machst "als nebeneffeckt" eine Info verlierst, da die so immer wenn es Dauer gibt reagiert.

    Grüße

  • Hallo Marc0810,

    du bist genial !

    Die Aktivierung der Musik Tag-Information ist die Lösung. Jetzt ist es genau so wie ich es mir vorgestellt habe. Die mp3s werden sogar in min und sec angezeigt (03:34 min) ...perfekt !! Die Filme werden nur in min angezeigt, aber das mag ich auch so. Die sec wären an dieser Stelle auch unnötig bzw. sind wohl auch im Video nicht eingeschlossen.
    Ich habe auch keine Probleme an anderer Stelle. Bilddateien werden in MB angezeigt und auch im Dateimanager sehe ich nur die Dateigrösse. So soll es sein !

    Also nochmal ein grosses Lob an dich für die tolle Hilfe, vielen vielen Dank.

    Schönes Wochenende
    Gruß

  • Hartnäckigkeit zahlt sich aus;).. Schön das es klappte...
    Allerdings musst du das dann in der Zukunft beobachten - ich meine bei Kodi 18 Ändert sich dann was in ListItem Duration bei videos.
    Irgendwie wollten sie da das Format Ändern, aber mit Variablen sollte man zur Not die alte Anzeige auch nachbauen können falls es
    nicht mehr untersttzt wird so - mir wäre auch die jetzige lieber;).

    Wenn sich also was ändert hats du gute Chancen das ich so lang Knobel bis ich sie wiederbekomme ;) .

    Grüße

  • Jo, ich freue mich das wir, naja eigentlich du, es geschafft haben.

    Wenn Kodi 18 kommt wird man sehen ob der skin überhaupt noch läuft oder insgesamt Anpassungen nötig sind. Hoffe mal das dann alles klappt, notfalls bleibt man erstmal ne Weile bei 17 wenn soweit für einen selbst alles läuft.
    Ansonsten weiss ich ja wo ich dich finde ;)

    Ich hab sogar selbst was anderes hinbekommen, betrifft die Musikwiedergabe. Spielt man einen Song ab und man geht in die Darstellung wo diese seekbar ist, wird normalerweise in der Mitte der bar die Uhrzeit angezeigt. Das habe ich geändert in die verbleibende Spielzeit des Songs.
    Also den original-code

    Code
    <value condition="Player.Playing + !Player.Seeking + !Player.DisplayAfterSeek">$INFO[System.Time]</value>


    geändert in

    Code
    <value condition="Player.Playing + !Player.Seeking + !Player.DisplayAfterSeek">$INFO[MusicPlayer.TimeRemaining]</value>

    Geht wunderbar :)

    Schönen Sonntag
    Gruß

  • Geht wunderbar

    :thumbup: ..

    Wenn du jetzt wieder "Knobeln" willst stellt sich da aber auch schon wieder eine Frage;)..

    Es gibt ja im Skinengine Player, MusicPlayer und Videoplayer.
    Player gilt immer für beide, während Musik und Video nur bei einem verfügbar sind.
    So wie es sich ließt, je nachdem was sonst noch in der VAR ist, sieht es so aus als würde damit bei Videos wieder ein "leer" entstehen.
    Das könnte man jetzt wieder mit einem +!String.IsEmpty(MusicPlayer.TimeRemaining) eingrenzen und dem "alten zusatzzeile darunter.

    Da Variablen bis zum ersten Treffer verglichen werden, würde deine Zeile wenn sie über der alten steht "Treffer" ergeben wenn die Musik Restzeit nicht leer ist, etwas abgespielt wird (Player.IsPlaying) aber nicht gerade "gezappt" wird (Player.Seeking).

    Bei Video wäre Musik Restzeit nicht verfügbar, also Empty, damit trifft diese Zeile nicht, die nächste wird geprüft und die (die alte), wäre zutreffend und es käme die Uhrzeit.
    Variablen sind echt tricky manchmal und können verflucht kompliziert werden :) .

    Wie gesagt, je nach sonstigen Inhalten in der VAR wäre

    Code
    <value condition="Player.Playing + !Player.Seeking + !Player.DisplayAfterSeek + !String.IsEmpty(MusicPlayer.TimeRemaining)">$INFO[MusicPlayer.TimeRemaining]</value>
    	<value condition="Player.Playing + !Player.Seeking + !Player.DisplayAfterSeek">$INFO[System.Time]</value>

    Ansich korrekter um zu verhindern das bei Videos nichts kommt oder eine andere Zeile weiter unten die dann "zufällig" auch zutrifft.
    Das muss man aber oft auch live prüfen weil man durch dieses "wenn Zeile x nicht zutrifft baue ich danach eine Zeile y ohne einen Wert ein weil ich schlau bin und weiß was bei raus kommt" eigentlich schwer Nachzuvollziehen ist.

    Im Dümmsten Fall, weil man sich im eigenen Code gut auskennt baut man wenn nichts zutrifft noch etwas ein damit man eine Zeile weniger braucht.

    Code
    <value condition="Player.Playing + !Player.Seeking + !Player.DisplayAfterSeek + !String.IsEmpty(MusicPlayer.TimeRemaining)">$INFO[MusicPlayer.TimeRemaining]</value>
    	....
    	....
    	<value>Forwärts</value>


    So könnte ich z.B. (wenn auch ein Abwägiges Beispiel) auch alle Infos Abdecken die ich will und sage dann am Ende der VAR ich spar mir was für "Schnellen vorlauf" und wenn darüber nichts zutriff kommt das immer.
    Was in deinem Fall heißen würde, wenn Musik Restzeit leer ist bei Videos steht da dann irgendwann Vorwärts drin wenn nicht dazwischen was anderes schon passt das eigentlich falsch ist (oder ungewollt)..
    Wenn bei den Dingern mal Dutzende Zeilen hat ist es oft nur noch ein Fehlerausschlussverfahren von oben nach unten bis alles stimmt;)..

    Vielleicht Animiert dich das ja zum Weiterknobeln. Soll ja Leute geben die das Spannend finden :) .

    Grüße

  • Vielleicht Animiert dich das ja zum Weiterknobeln. Soll ja Leute geben die das Spannend finden

    Nun, ich tüftel schon mal ganz gern an einem Problem, aber das Skinning ist eigentlich ne Nummer zu gross für mich. Ich versuche ein paar Kleinigkeiten nach meinem Geschmack zu ändern, aber nicht den globalen code. Wenn was geht freu ich mich oder bitte um Hilfe.

    Deine Ausführungen zu der Musik-Restspielzeit sind interessant, man lernt immer wieder was dazu :)

    Mit meiner Codeänderung habe ich bei der Video Wiedergabe aber keine Einschränkungen festgestellt. Ich habe als Test Video- und Musikstücke ausprobiert und darin gespult, gestoppt, geskippt usw. Bei Video hab ich kein Unterschied zum Originalcode gesehen und bei Musik wirklich nur die Änderung das ich anstatt der Uhrzeit die Restlänge des Songs sehe. Es fehlen nirgendwo Infos o.ä. im Vergleich zum Originalcode.
    Vielleicht liegts daran das die Änderung unter dem Eintrag MusicSeekLabelVar gemacht wurde ?
    Naja, es läuft jetzt erstmal gut, dank dir hab ich sogar auch noch so einiges dazu gelernt, Danke :)

    Aber ich ahne schon.....das nächste mod-Projekt kommt bestimmt

    Gruß

  • Vielleicht liegts daran das die Änderung unter dem Eintrag MusicSeekLabelVar gemacht wurde ?

    Yupp, dann hat er das wohl für irgendwas anderes schon "getrennt" und wahrscheinlich zweierlei Texte drin die jeweils nur bei einem Sichtbar sind.
    Kodi schränkt einen da recht wenig ein und viele "Monsterfunktionen" oder wie man es nennen mag lassen sich beliebig Kombinieren, Verschachteln, Ausschließen.

    Aber Hauptsache es klappt. Wenn man allerdings mal "Blut geleckt" hat wird man auch Anspruchsvoller was das Anpassen betrifft;).
    Das kann gut sein das einem schnell noch viel mehr nicht gefällt;).

    Wenns denn soweit ist und Fragen auftauchen einfach melden.

    Grüße

Jetzt mitmachen!

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