Neuen Video Library Tag aus der Datenbank verwenden/abfragen

  • Hallo,
    ich würde gerne die neuen Video Library Tags in Frodo dazu verwenden, Filme nach Sprachen zu ordnen.
    Bis jetzt habe ich im Skin-Ordner in .../720p/IncludesCodecFlagging.xml folgenden Code eingefügt.

    Und dann noch die entsprechenden Bilder der Flaggen in .../media/flagging/language/ geschoben.

    Um das Schema zu verwenden müsste ich die jeweiligen Filme jetzt
    entweder durch die Tags "deutsch", "english", "polskie", "francais", ...
    im Dateinamen ergänzen, oder alle deutschsprachigen Filme in einen
    Ordner "deutsch" schieben. Letzteres würde bei mehrsprachigen Filmen
    aber unübersichtlich.

    Eigentlich wollte ich dazu statt der Umbenennung die neuen Video
    Library Tags verwenden, damit ich im XBMC auch einfacher nach Sprachen
    sortieren kann. Also in meinen .nfo Dateien steht dann z.B.

    Code
    <tag>deutsch</tag>
    <tag>english</tag>


    und dann sollen eben die deutsche und die britische Flagge neben dem
    Film angezeigt werden. Das Sortieren nach den Tags klappt wunderbar,
    aber ich habe keine Ahnung wie ich an die Tags aus der Datenbank
    rankomme.

    Stell mir da irgendwas in der Art vor:

    Code
    <visible>substring(ListItem.Tags,deutsch)</visible>


    Allerdings habe ich in der Documentation nichts in der Art gefunden.

  • Da ich nirgendwo eine Lösung für mein Problem gefunden habe, habe ich mich über mehrere Tage in den XBMC Quelltext eingelesen und schließlich eine Lösung gefunden, die ich hier teilen möchte. Vielleicht kann es ja jemand auch noch gebrauchen.

    Die Lösung ist allgemein ziemlich "quick and dirty", auch weil ich vorher noch nie C-artig programmiert habe.

    Vor dem Start von XBMC muss unbedingt die Videodatenbank gelöscht werden, da sich die Einträge in der neuen Datenbank um eine Spalte verschieben werden. Dazu später mehr.

    Deshalb ein Backup der Datenbank machen. Zum Beispiel mit "Videodatenbank exportieren..."/"Separat" einfach die .nfo Dateien im jeweiligen Film-Ordner erstellen lassen. Habe ich sowieso, da ich meine Datenbank mit Mediaelch verwalte.

    Dann in einen leeren Ordner wechseln und

    Code
    git init && git remote add -t Frodo -f origin git://github.com/xbmc/xbmc.git && git checkout Frodo


    ausführen.
    Damit wird der Ordner für git initialisiert, der Frodo Branch markiert und heruntergeladen. (ca. 340 MB bei mir)

    In diesem Ordner jetzt auch weiterarbeiten.

    In ./xbmc/GUIInfoManager.cpp die neue property für das ListItem festlegen.
    Dazu die const infomap listitem_labels[] erweitern.

    suchen nach:

    PHP
    { "dbtype", LISTITEM_DBTYPE },
    { "dbid", LISTITEM_DBID }};


    erweitern zu:

    PHP
    { "dbtype", LISTITEM_DBTYPE },
    { "dbid", LISTITEM_DBID },
    { "tags", 35199 } //++bea
    };

    Die Methode CGUIInfoManager::GetItemLabel erweitern für Zugriff auf die neue ListItem property
    suchen nach:


    erweitern zu:

    --------
    In ./xbmc/video/VideoDatabase.h
    suchen nach:

    PHP
    #define VIDEODB_MAX_COLUMNS 24


    ersetzen durch:

    PHP
    //#define VIDEODB_MAX_COLUMNS 24//--bea
    #define VIDEODB_MAX_COLUMNS 25//++bea

    und suchen nach:

    PHP
    VIDEODB_ID_BASEPATH = 22,
    VIDEODB_ID_PARENTPATHID = 23,
    VIDEODB_ID_MAX
    } VIDEODB_IDS;


    erweitern zu:

    PHP
    VIDEODB_ID_BASEPATH = 22,
    VIDEODB_ID_PARENTPATHID = 23,
    VIDEODB_ID_TAGS = 24,//++bea
    VIDEODB_ID_MAX
    } VIDEODB_IDS;

    und direkt darunter die DbMovieOffsets[] erweitern, suchen

    PHP
    { VIDEODB_TYPE_STRING, my_offsetof(CVideoInfoTag,m_basePath) },
      { VIDEODB_TYPE_INT, my_offsetof(CVideoInfoTag,m_parentPathID) }
    };


    erweitern zu

    PHP
    { VIDEODB_TYPE_STRING, my_offsetof(CVideoInfoTag,m_basePath) },
      { VIDEODB_TYPE_INT, my_offsetof(CVideoInfoTag,m_parentPathID) },
      { VIDEODB_TYPE_STRINGARRAY, my_offsetof(CVideoInfoTag,m_tags) }//++bea
    };

    Fertig mit der Anpassung der Quelltexte. Jetzt zur Installation.
    In ./docs/ findet man die Installationsanleitungen, z.B. für Ubuntu in README.ubuntu. Bitte diese beachten.

    Beispiel für Ubuntu 12.10:

    Code
    sudo apt-get install git-core build-essential gawk pmount libtool nasm yasm automake cmake gperf zip unzip bison libsdl-dev libsdl-image1.2-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libfribidi-dev liblzo2-dev libfreetype6-dev libsqlite3-dev libogg-dev libasound2-dev python-sqlite libglew-dev libcurl3 libcurl4-gnutls-dev libxrandr-dev libxrender-dev libmad0-dev libogg-dev libvorbisenc2 libsmbclient-dev libmysqlclient-dev libpcre3-dev libdbus-1-dev libhal-dev libhal-storage-dev libjasper-dev libfontconfig-dev libbz2-dev libboost-dev libenca-dev libxt-dev libxmu-dev libpng-dev libjpeg-dev libpulse-dev mesa-utils libcdio-dev libsamplerate-dev libmpeg3-dev libflac-dev libiso9660-dev libass-dev libssl-dev fp-compiler gdc libmpeg2-4-dev libmicrohttpd-dev libmodplug-dev libssh-dev gettext cvs python-dev libyajl-dev libboost-thread-dev libplist-dev libusb-dev libudev-dev libtinyxml-dev libcap-dev curl swig default-jre libtiff-dev autopoint libltdl-dev libtag1-dev

    ausführen um die packages für das Kompilieren von XBMC unter Ubuntu 12.10 zu installieren.

    Code
    ./bootstrap
    ./configure
    make
    sudo make install

    Statt "make" kann man "make -j2" für einen dualcore verwenden, um das Kompilieren zu beschleunigen.
    Das Kompilieren kann etwas dauern, je nachdem wie schnell der Rechner ist. Dann ist XBMC installiert.

    Vor dem Start von XBMC muss unbedingt die Videodatenbank gelöscht werden, da sich die Einträge in der neuen Datenbank um eine Spalte verschieben werden. (Backup gemacht?!)

    Dazu einfach in ~/.xbmc/userdata/Database/ die Datei MyVideos75.db löschen, wobei die Zahl anders sein kann.

    --------
    In ~/.xbmc/addons/skin.confluence/720p/IncludesCodecFlagging.xml vor dem Endtag "</includes>" am Ende der Datei diesen include einfügen

    [expander]

    [/expander]

    Ich habe den include einfach in die VideoCodecFlaggingConditions eingefügt, dann werden die Flaggen immer mit den Codecs zusammen angezeigt.

    Von

    Code
    <include name="VideoCodecFlaggingConditions">
    <control type="image">


    zu

    Code
    <include name="VideoCodecFlaggingConditions">
    <include>LanguageFlaggingConditions</include>
    <control type="image">


    ändern.
    Falls die Datei oder das gesamte Skin "skin.confluence" nicht existiert, kann es aus den Quelltexten entnommen (./addons/) und anschließend bearbeitet werden.

    In ~/.xbmc/addons/skin.confluence/media/flagging/ muss jetzt noch ein "language" Ordner erstellt werden mit den Flaggenbildern drin, die in der IncludesCodecFlagging.xml definiert wurden.

    Ich werde meine Flaggen hier anhängen, falls sie jemand verwenden möchte.


    Mit

    Code
    xbmc


    kann nun das Mediencenter gestartet werden. Nach einem Neustart ist es auch im Unity-Starter bei mir.

  • Hatte ich kurz überlegt, ja. Aber ich denke, dass das aus Gründen der Abwärtskompatibilität genau nicht gemacht wurde bei der Einführung der Video Library Tags in 12.0 Frodo. Man müsste sonst irgendwie die Datenbank updaten beim Versionssprung, da in das eine table am besten genau mittendrin, um die Ordnung zu erhalten, eine Spalte eingefügt werden muss.
    Was meinst du?

Jetzt mitmachen!

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