Beiträge von JakeB

    Fehler war wohl das fehlende Speichern im 'DB Browser for SQLite'. :wacko:
    Nach dem Entfernen der Quelle, bleibt der Eintrag in der path Tabelle immer stehen. Da hilft auch kein 'Datenbank bereinigen'.

    Das Arbeiten mit fake Video Dateien geht auch nicht, Kodi erwartet richtige Video Dateien.

    Testdaten für Dateimodus sind jetzt also vorhanden und funktionieren korrekt. :whistling:

    Hallo marky0736,

    - wenn ich die Quelle unter Videos hinzufüge ('Dieser Ordner beinhaltet' -> Keine) -> Kodi schmiert ab.
    - Quelle wieder entfernen + Datenbank bereinigen -> Kodi schmiert ab

    Hab langsam das Gefühl, dass ich die ganze Bibliothek erstmal wieder lösche.

    Wo steht denn in deiner sources.xml die Quelle 'Dokus' unter <video></video> oder <files></files>?

    MfG

    Hallo marky0736,

    da ich nie mit dem Dateimodus arbeite, habe ich jetzt ein Problem um an Testdaten zu kommen.

    Quelle für Dateimodus z.B.:
    ...\NAS-1\Dokus_1\Doku_1.ts
    ...\NAS-1\Dokus_1\Doku_2.ts
    ...\NAS-1\Dokus_1\Doku_3.ts
    ...\NAS-1\Dokus_1\Doku_4.ts

    > Dieser Ordner beinhaltet: hab es mit 'Filme' und 'Keine' ausprobiert aber kein Erfolg.

    Wenn ich das Menü auswähle, gibt es keine Option 'Als 'gesehen' markieren' für Filme, Serienepisoden und einzelne Dateien. Die Datenbank ist jedes Mal kaputt, erst wenn die Quelle vom Dateimodus wieder entfernt wird, ist die Datenbank wieder okay.

    Der Pfad für den Dateimodus wird in der Tabelle path eingetragen, aber die einzelnen Video-Dateien werden nicht in der Tabelle files angelegt.

    Wenn ich die einzelnen Dateien in Ordner packe kann ich 'Als 'gesehen' markieren' und 'Als 'ungesehen' markieren' gleichzeitig auswählen und in der GUI wird das Häckchen nicht angezeigt.

    Wie funktioniert denn die Aufnahme von Videos via Dateimodus?

    MfG

    @Shuddery: Funktioniert wunderbar! :thumbup:

    @marky0736:
    Das ist jetzt zwar nicht mehr entscheidend, aber mich würde doch interessieren ob der folgende Befehl jetzt auf der MariaDB funktioniert.


    Werde die Lösung von Shuddery jetzt auf Filme, Serien, Musikvideos und Dokus/Konzerte über Dateimodus übertragen.

    Deine Konstellation (wenn ich jetzt alles richtig verstanden habe):
    - Filme, Musikvideos und Serien befinden sich in der Bibliothek.
    - Dokus und Konzerte werden via Dateimodus wiedergegeben.

    Würde gerne nach dem Pfad nicht filtern*, aber kann ich auch davon ausgehen das die Doku/Konzert Dateien NUR EINMAL vorkommen?

    In diesem Beispiel kommt 'Doku_1.ts' zweimal vor:
    ...\NAS-1\Dokus_1\Doku_1.ts
    ...\NAS-1\Dokus_1\Doku_2.ts
    ...\NAS-1\Dokus_1\Doku_3.ts
    ...\NAS-1\Dokus_1\Doku_4.ts

    ...\NAS-1\Dokus_2\Doku_1.ts
    ...\NAS-1\Dokus_2\Doku_2.mkv
    ...\NAS-1\Dokus_2\Doku_a.ts
    ...\NAS-1\Dokus_2\Doku_b.ts

    ...\NAS-1\Konzerte\Konzert_1.ts
    ...\NAS-1\Konzerte\Konzert_2.ts
    ...\NAS-1\Konzerte\Konzert_3.ts
    ...\NAS-1\Konzerte\Konzert_4.ts

    *Man wäre dann unabhängig vom Pfad, also der Pfad könnte in der neuen Datenbank auch unterschiedlich sein.

    Sind die Dokus und Konzerte ausschließlich einzelne Video-Dateien oder gibt es auch VIDEO_TS Dateien aus einer DVD-Ordner-Struktur oder Dateien aus einer Blu-ray-Ordner-Struktur?

    Diese screenshots helfen nicht weiter. In suche etwas über die Datenbankstruktur dieser Tabelle.
    Hier ist ein Ausschnitt aus dem 'DB Browser for SQLite':

    So etwas brauche ich aus phpMyAdmin von deiner schon bestehenden movie Tabelle.
    Vermutlich sind das die richtigen data types und vielleicht erscheint auch die <number>.

    Shuddery:
    Den Trick kannte ich noch gar nicht, dass man daraus INSERT Befehle erstellen kann. Aber deinen Vorschlag habe ich früher auf eine andere Weise genutzt:
    1. via SELECT werden UPDATE Befehle erzeugt
    Beispiel für Filme aus der Bibliothek:

    SQL
    UPDATE files SET playCount = 1, lastPlayed = 'YYYY-MM-DD hh:mm:ss', dateAdded = 'YYYY-MM-DD hh:mm:ss' WHERE idFile IN (SELECT idFile FROM movie WHERE c00 = 'Filmtitel' AND premiered = 'YYYY');

    2. Speichern als csv file
    3. Umwandeln in xls file und noch etwas anpassen. Das war damals unter LibreOffice einfacher als wie mit Excel.
    4. Der fertige Inhalt kann dann einfach in einer sql Datei gespeichert werden.

    In Punkt 3 müsste ich mich erstmal wieder reinarbeiten. Das rumgefrimel für Punkt 3 war damals auch der Grund, dass ich die Methode mit dem Anhängen einer Datenbank bevorzuge.

    Nein bitte kein Import. Da hast du mich vielleicht falsch verstanden.

    Probiere mal nur die eine Tabelle zu erstellen:


    In phpMyAdmin muss es einen Editor geben, dort den SQL-Befehl eingeben und laufen lassen.

    Probier mal folgendes ...
    Die Date MyVideos<nummer>.db.sql öffnen (am besten mit Notepad++) und folgende SQL Befehle kopieren:


    Dann eine neue Datenbank (Name z.B. 'MyVideos116old1') in phpMyAdmin anlegen und für diese Datenbank die SQL Befehle ausführen.

    Hallo Marky,

    der Pfad der Dateien spielt keine Rolle, playCount, lastPlayed und dateAdded werden für den jeweiligen Eintrag einfach übertragen.

    Wenn du Konzerte unter Musikvideos in die Datenbank aufgenommen hast, muss ich die Anleitung noch erweitern.

    Wenn ich dich richtig verstehe, hast du noch Dokus, Konzerte etc. die noch nicht in die neue Datenbank aufgenommen wurden bzw. nicht aufgenommen werden sollen.
    Für diese Dateien bleibt der Watched-Flag in den alten Datenbanken gespeichert und man kann ihn wann immer man möchte auslesen.

    Die Anleitung sieht auf den ersten Blick etwas umfangreich aus, aber in ca. 5 Min. sind die Watched-Flags aus den drei alten Datenbanken übertragen.

    Wenn du aber in Zukunft wieder mit mehreren Clients auf die neue Datenbank zugreifen möchtest, wäre wohl Emby die Lösung.

    Zitat von marky0736

    ... (inkl. der Dateien, die nicht in der Datenbank gespeichert sind und die keine ID haben) ...

    Das verstehe ich nicht, wie willst du Watched-Flags von Dateien aus den alten Datenbanken übertragen, die nicht in der neuen Datenbank vorhanden sind.
    Das ergibt für mich keinen Sinn.

    MfG

    Hallo @marky0736,

    Sorry hat etwas länger gedauert, da ich bis jetzt nur Updates für Filme durchgeführt habe. Serien musste ich mir erstmal anschauen.

    Der "wichtige" Punkt ist relativ. Wenn lastPlayed unwichtig ist und der Film-xyz ein playCount >= 1 auf irgendeiner alten Datenbank hat, dann ist alles Bestens.

    Zu erwähnen wäre noch:
    1.
    Filme die in verschiedenen Auflösungen vorliegen, werden gleichbehandelt.
    Also der Film-xyz wurde schon in PAL-Auflösung gesehen, aber der Film-xyz in HD-Auflösung noch nicht. Nach dem Update hat Film-xyz in HD-Auflösung aber auch den selben playCount.
    Kann man verhindern, aber ich hab das erstmal weggelassen. Hoffe der Punkt ist nicht wichtig.

    2.
    Die resume oder bookmark position in der Tabelle bookmark falls vorhanden, geht verloren.
    Kann man auch übernehmen, aber ich hab das erstmal weggelassen. Hoffe der Punkt ist nicht wichtig.

    3.
    Für Serienepisoden sollten unbedingt 'Episode Title' und 'First Aired' vorhanden sein.


    Was macht das UPDATE script:
    - wenn Filmtitel + Jahr übereinstimmen erfolgt ein Update
    - wenn Episodentitel + First Aired übereinstimmen erfolgt ein Update

    - drei Einträge werden in der Tabelle files aktualisiert:
    -- gesehen (playCount) (z.B "2" = bisher zweimal gesehen)
    -- wann zuletzt abgespielt (lastPlayed)
    -- wann hinzugefügt (dateAdded)


    Vorbedingungen:
    Um die Kodi-Datenbank zu bearbeiten benötigen wir einen DB-Editor (z.B. 'DB Browser for SQLite'): DB Browser for SQLite

    Pfad zur Kodi Film/Serien Datenbank (Master User):
    ...\Kodi\userdata\Database\MyVideos<number>.db

    Wichtig: Mit dem DB-Editor arbeiten wir zur Sichheit NUR auf Kopien.

    zum Beispiel:

    Code
    alte Datenbank | neue Datenbank | Name der Kopie
    ----------------------------------------------------
    MyVideos116.db | -              | MyVideos116old1.db
    MyVideos116.db | -              | MyVideos116old2.db
    MyVideos116.db | -              | MyVideos116old3.db
    -              | MyVideos116.db | MyVideos116new.db


    Folgende Anleitung wurde getestet mit Kodi v18.8.

    1.0 DB-Editor starten und via tab 'Datenbank öffnen' > 'MyVideos116old1.db' auswählen.

    Mit diesem Befehl (unter tab 'SQL ausführen' eintragen und ausführen ">") kann man alle Filme/Serien anzeigen, die schon mal gesehen wurden:


    1.1 Movie View erstellen:


    1.2 Episode View erstellen:


    1.3 Speichern der Änderung via Menüpunkt 'Änderungen schreiben'. Danach Datenbank schließen ('Datei' > 'Datenbank schließen').

    2.0 Tab 'Datenbank öffnen' > 'MyVideos116new.db' öffnen.

    2.1 Menüpunkt 'Datei' > 'Datenbank anhängen' > die alte Datenbank 'MyVideos116old1.db' anhängen mit Datenbankname = 'MyVideos116old1'

    2.2 Movie TABLE erstellen:

    Code
    CREATE TABLE playCount_m AS
     SELECT * FROM MyVideos116old1.playCount_m_v;


    2.3 Episode TABLE erstellen:

    Code
    CREATE TABLE playCount_e AS
     SELECT * FROM MyVideos116old1.playCount_e_v;


    2.4 Movie VIEW erstellen:


    2.5 Episode VIEW erstellen:


    2.6 Movie UPDATE durchführen:

    SQL
    UPDATE files
     SET playCount = (SELECT playCount_m_new_v.playCount FROM playCount_m_new_v
                       WHERE playCount_m_new_v.idFile = files.idFile),
        lastPlayed = (SELECT playCount_m_new_v.lastPlayed FROM playCount_m_new_v
                       WHERE playCount_m_new_v.idFile = files.idFile),
         dateAdded = (SELECT playCount_m_new_v.dateAdded FROM playCount_m_new_v
                       WHERE playCount_m_new_v.idFile = files.idFile)
     WHERE EXISTS (SELECT * FROM playCount_m_new_v
                    WHERE playCount_m_new_v.idFile = files.idFile);


    2.7 Episode UPDATE durchführen:

    SQL
    UPDATE files
     SET playCount = (SELECT playCount_e_new_v.playCount FROM playCount_e_new_v
                       WHERE playCount_e_new_v.idFile = files.idFile),
        lastPlayed = (SELECT playCount_e_new_v.lastPlayed FROM playCount_e_new_v
                       WHERE playCount_e_new_v.idFile = files.idFile),
         dateAdded = (SELECT playCount_e_new_v.dateAdded FROM playCount_e_new_v
                       WHERE playCount_e_new_v.idFile = files.idFile)
     WHERE EXISTS (SELECT * FROM playCount_e_new_v
                    WHERE playCount_e_new_v.idFile = files.idFile);


    Mit dem script vom Anfang kann man dann überprüfen ob alles korrekt ist.
    Wenn man möchte, kann man unter tab 'Datenbankstruktur' die erstellten Views und Tabellen wieder löschen (zuerst die View(s) löschen dann die Tabelle(n)).

    2.8 Speichern der Änderung via Menüpunkt 'Änderungen schreiben'.


    Die Punkte 1.0 bis 2.8 muss man jetzt noch für die alten Datenbanken MyVideos116old2.db und MyVideos116old3.db abarbeiten.
    Achtung, beim Erstellen der Tabellen ('playCount_m' und 'playCount_e') die Nummern entsprechend anpassen:
    "... SELECT * FROM MyVideos116old<number>.playCount_ ..."

    Hoffe, mir ist kein Fehler unterlaufen und die Anleitung ist halbwegs verständlich. Falls Fragen auftreten einfach melden.

    MfG

    Es geht einfacher ...

    Man kann den playCount, lastPlayed und dateAdded via SQLite aus den alten Datenbanken auslesen und auf die neue Datenbank z.B. step by step übertragen.

    Wichtig: Ich geh mal davon aus, dass z.B. Film-xyz NUR auf einer alten Datenbank den playCount > 0 hat. Richtig?
    Falls nicht wäre lastPlayed unterschiedlich und dann wird es etwas aufwendiger, aber nicht unmöglich zu entscheiden welche Daten übernommen werden sollen.
    lastPlayed wird z.B. im skin Transparency angezeigt. Hab das nur der Vollständigkeit halber angemerkt.

    Könnte morgen eine kleine Anleitung erstellen.