Watched-Flags aus mehreren Datenbanken zusammenführen

  • Hallo zusammen,

    die Suche hat mir zwar ein paar Ergebnisse geliefert, die in eine ähnliche Richtung gehen, aber am Ende sind es dann doch ältere Add-Ons oder leicht andere Rahmenbedingungen, so dass ich hier jetzt doch mal einen eigenen Thread erstelle.

    Die Tage habe ich beschlossen, meine drei Kodi-Boxen auf einen zentralen SQL-Server umzustellen. Das hat auch nach vielem Gewürge ganz gut funktioniert. Die Datenbank habe ich neu aufgebaut und soweit läuft auch alles gut, bislang greife ich allerdings noch nicht mit allen Boxen darauf zu, sondern nur mit einer Testinstallation in einer VM auf meinem Server, denn ein Problem habe ich noch nicht gelöst.

    Aus meinen drei (lokalen) Datenbanken würde ich gerne die Watched-Flags auslesen und dann in der VM in die neue Datenbank einspeisen. Dabei sollten natürlich nur die Watched Flags gesetzt werden und nicht welche wieder auf unwatched gesetzt werden, sonst bekomme ich immer aus einer der Datenbank-Daten die Flags eingespeist. Optimal wäre irgendein Add-On, das ich auf jeder der Boxen nutzen könnte, um ein File mit den Watched-Flags zu erstellen und das ich dann am bei der neuen Datenbank nutzen kann, um die drei Files einzulesen und die Flags zu setzen. Die Pfade zu den Quellen/Dateien sind identisch auf allen Installationen.

    Vielleicht kennt jemand ja ein solches Add-On oder kann mir sonst irgendwie erklären, wie ich das Problem möglichst einfach lösen kann.

    Grüße und Dank im Voraus

  • Hi, verstehe ich es richtig, dass du derzeit drei Kodi Installationen hast, die auf dieselben Medien zugreifen, aber alle verschiedene Datenbanken haben? Sprich ich es könnte sein, dass Film A auf Kodi 1 den Status gesehen, aber auf Kodi 2 und 3 den Status ungesehen?

  • Mit Emby habe ich mich bislang noch nicht beschäftigt und eigentlich sehe ich auch keine Notwendigkeit dazu. Meine Filme und Serien sind alle mit lokalen NFOs versehen, die ich mit Ember Media Manager verwalte. Artwork etc. mache ich komplett selbst. Keine Ahnung, ob ich das dann alles in Emby importieren könnte, aber es erscheint mir wieder als zusätzlicher Aufwand. Plex habe ich schonmal probiert, das ist sicher ganz nett für Leute, die sich um nichts kümmern wollen, aber mit den mühsam angefertigten lokalen Daten kann er leider nichts anfangen. Wie gesagt, ich habe mich noch nicht mit Alternativen beschäftigt, derzeit interessieren mich eigentlich nur die Watched-Flags, alles andere funktioniert ja.

    Falls es keine Möglichkeit gibt, nehme ich mir eben ein Laptop und gehe alle drei Datenbanken von Hand durch. Bei 200 Serien und 3500 Filmen bin ich da in drei Wochen auch durch, ich dachte nur, es ginge vielleicht auch einfacher.

  • 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.

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Hallo JakeB,

    vielen Dank für die positiven Aussichten.

    Den Punkt, den Du unter "Wichtig" machst verstehe ich noch nicht ganz. In meinen NFO-Dateien sind mit Ember einzelne Watched-Flags gesetzt. Diese entsprechen aber dem Stand aus der Zeit, als ich begonnen habe, meine Daten mit Ember zu verwalten. Dann haben wir eben mal eine Folge einer Serie im Schlafzimmer gesehen, dann mal wieder eine im Wohnzimmer usw. Wenn es noch zeitnah war, hat man schnell "als gesehen markieren" für eine der Folgen gemacht, manchmal aber eben auch nicht. So ist im Laufe der Zeit ein gewaltiges Kuddelmuddel entstanden - zum Glück nur in diesem Punkt, meine restlichen Dateien sind sehr sauber verwaltet. In der Datenbank sind ja dann zudem auch noch Watched-Flags für Dateien enthalten, die nicht in einer Bibliothek organisiert sind, z.B. meine gesamten Dokumentationen. Auch da kann es sein, ich habe mal mit meiner Frau im Schlafzimmer eine Doku angesehen, die dann sehr sehenswert war, und daraufhin die selbe nochmal mit einem Freund im Wohnzimmer. Also wenn ich es richtig verstanden habe, ist es nicht so, dass es nur auf einer der alten Datenbanken gesetzt ist. Wobei mir "Last Played" wirklich vollkommen egal ist, Hauptsache ich weiß, was ich schon angesehen habe (auch bei meinen fast 2000 Dokus fällt es mir sonst oft erst auf, wenn ich eine gestartet habe.)

    Falls es irgendwie geht, wäre eine Anleitung natürlich super.

  • 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

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Wow! Ich bin erstmal überwältigt ... so viel Mühe, der Wahn!

    Also einstweilen schonmal tausend Dank. Ich komme leider erst am Montag dazu, mich genau einzulesen und es auszuprobieren, also nicht wundern, wenn ich bis dahin nichts von mir hören lasse.

    Werde aber in jedem Fall Bericht erstatten!

  • diese ganze Popelei mit MySQL würde ich mir im Jahr 2020 nicht mehr antun.

    da hat @darkside40 schon vollkommen recht

    Emby drauf und fertig ist die Laube. Da kannst Du dann im Nachhinein auch 5 Clients mit jeweils unterschiedlichen Kodi Versionen andocken und hast
    immer noch alles stimmig. ;)

    95% aller Computerfehler sitzen vor dem Bildschirm!

  • Hallo JakeB,

    habe mal alles in Ruhe durchgelesen und zu verstehen versucht. So wie ich es sehe, erreiche ich mit diesem Vorgehen etwas, was noch nicht ganz das ist, was ich eigentlich brauche, bzw. der Ansatz ist komplizierter als eigentlich notwendig.

    Vielleicht ist das aus meinen Posts nicht ganz klar geworden, aber die Pfade zu den Dateien sind in allen Datenbanken identisch, in den drei alten und der neuen Datenbank. So wie ich es mitbekomme, werden Watched-State, Resumepoints usw. ja für die jeweiligen Dateien inkl. Pfad gespeichert. Daher gibt es ja auch Watched-Flags für alle meine Dokumentationen, Kontezerte usw., die nicht in die Film- oder Serien-Datenbank aufgenommen sind.

    Wenn ich es richtig verstehe, übernimmt Deine Anleitung die Watched-States für den jeweiligen Film oder die jeweilige Episode unabhängig vom Dateipfad mit Hilfe einer ID. Das ist dann tatsächlich das, was Emby oder Trakt auch können, aber eben nicht das, was ich eigentlich machen möchte.

    Bei mir sind eben sehr viele Dateien auf dem NAS, die direkt über SMB abgerufen werden und genau deren Watched-State habe ich eben auch verloren, der ist mir aber eben besonders wichtig, gerade bei Dokus vergisst man oft, welche man schon gesehen hat.

    Hoffentlich kannst Du nachvollziehen, was ich meine. Vielleicht liege ich ja auch vollkommen verkehrt. Eigentlich sollte es doch viel einfacher sein, die Watched-States für den jeweiligen Pfad zusammenzuführen oder liege ich da falsch.

    Falls mir nochmal jemand Emby empfehlen möchte, dann bräuchte ich auch gleich eine Anleitung, wie ich meine Watched States aus den drei Datenbanken in Emby übernehmen kann (inkl. der Dateien, die nicht in der Datenbank gespeichert sind und die keine ID haben), vielleicht ist das ja wirklich wesentlich einfacher zu realisieren, aber das habe ich mich noch nicht eingearbeitet.

    Grüße,
    Marky

  • 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

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Hallo JakeB,

    irgendwie habe ich den Eindruck, wir schreiben ein wenig aneinander vorbei :) Aber vielleicht schaffe ich es ja doch irgendwann, da noch Licht ins Dunkel zu bringen.

    Auf meinem NAS gibt es z.b. einen Share "Konzerte". Da liegen z.B. Mitschnitte von 3sat und so drin. Auf diese Konzerte greife ich in Kodi über die "Dateien"-Funktion zu. Wenn ich eines der Konzerte angesehen habe, erscheint dahinter ein Häkchen. Wo genau diese Daten gespeichert werden, weiß ich nicht, aber um genau diese geht es mir, denn davon habe ich sehr viele - YouTube Downloads, Let's Plays, Dokus usw.

    Seit dem Neuaufbau meiner Datenbank als zentrale Datenbank fehlen mir eben genau alle diese Watched-States und die sind für mich eben recht wichtig.

    Vielleicht verstehe ich das Prinzip ja auch vollkommen falsch, ich bin davon ausgegangen, dass Deine Anleitung Serien und Filme berücksichtigt, die mit der Funktion "Datenbank aktualisieren" aufgenommen wurden und die als Inhaltsquelle definiert sind.

    Hoffentlich ist jetzt klarer geworden, was ich meine, vielleicht funktioniert das ja schon alles so mit Deiner Anleitung.

    Grüße

  • Guten Morgen!

    Leider bin ich schon sehr früh in der Anleitung gescheitert. Meine neue Datenbank ist keine .db Datei, sondern läuft auf dem Server in mehreren Verzeichnissen (QMariaDB). Ein Backup meiner Datenbank habe ich mit phpMyAdmin erstellt und damit kann ich auch auf das Backup zugreifen und es bearbeiten, aber dort finde ich keine Möglichkeit, die mit DB Browser bearbeitete Datenbank anzuhängen, irgendwie gibt es dafür keinen Menüpunkt in phpMyAdmin (oder ich finde ihn nicht). Vielleicht hat jemand einen Tipp für mich?

  • Hallo Marky,

    die Kodi Datenbank 'MyVideos<number>.db' via 'DB Browser for SQLite' in eine SQL Datei exportieren und diese kannst du dann in phpMyAdmin wieder importieren.

    DB Browser for SQLite > Datei > Export > Datenbank zu SQL-Datei...

    Ein phpMyAdmin Beispiel: Wie importiere ich eine Datenbank mit phpMyAdmin?

    Zu Beitrag #14 melde ich mich noch.

    MfG

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Hallo JakeB,

    der Export hat geklappt, aber der Import funktioniert nicht. Ich bekomme folgende Fehlermedlung:

    Fehler
    Statische Analyse:
    1 Fehler wurden während der Analyse gefunden.

    1. Unerkanntes Schlüsselwort. (near "TRANSACTION" at position 6)

    SQL-Befehl: Kopieren
    BEGIN TRANSACTION
    MySQL meldet:

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


    #1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'TRANSACTION' in Zeile 1


    Leider kann ich damit überhaupt nichts anfangen?!?!

  • hmmm, die kopierte Datenbank hat es auch zerpfriemelt. Wollte sie jezt löschen und eine neue Kopie machen, aber beim Löschen bekomme ich auf eine Fehlermeldung:

    Fehler
    SQL-Befehl: Kopieren

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

    Bearbeiten

    DROP DATABASE `MyVideos116new` MySQL meldet:

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


    #1010 - Fehler beim Löschen der Datenbank (Verzeichnis
    './MyVideos116new' kann nicht gelöscht werden, Fehler: 39 "Directory not
    empty")

  • So, die Datenbank-Kopie konnte ich jetzt löschen, indem ich sie einfach im Dateisystem gelöscht habe. Eine neue Kopie habe ich auch wieder erstellt, aber der Import funktioniert leider nicht. Das was ich in den Links und mit Google zur Konvertierun von SQLite zu MariaDB/MySQL finde, ist entweder höllisch kompliziertes Commanline-Zeug mit Perl und was weiß ich was oder schweineteuer.

    Sieht dann wohl doch nach Handarbeit aus. Schade, hatte mich schon gefreut. Aber ich hab es mal ausgerechnet, wenn ich die Dateien von Hand durchgehe und parallel am Laptop in der neuen Datenbank mit "als gesehen markieren" abhake, dann brauche ich, wenn ich jeden Tag eine Stunde mache, so ungefähr bis Mitte März. Das ist ja absehbar, bin es von Kodi ja gewöhnt, dass man für etwas, wofür man eine Stunde veranschlagt hat, dann am Ende ein halbes Jahr braucht. Etwas frustrierend bleibt das dennoch.

    Grüße

Jetzt mitmachen!

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