From 9fd535f8b73ef2f3e417d41feead55cce6182c80 Mon Sep 17 00:00:00 2001
From: Thomas resiX <resiX@local.loc>
Date: Sat, 15 Feb 2025 08:42:59 +0100
Subject: [PATCH] 3.7

---
 Video-Datenbank.pro |   2 +-
 mainwindow.cpp      | 122 ++++++++++++++++++++++++++++++++++++++++++--
 mainwindow.h        |   6 ++-
 mainwindow.ui       |  24 ++++++---
 4 files changed, 142 insertions(+), 12 deletions(-)

diff --git a/Video-Datenbank.pro b/Video-Datenbank.pro
index 47742f3..b594b8f 100644
--- a/Video-Datenbank.pro
+++ b/Video-Datenbank.pro
@@ -1,4 +1,4 @@
-QT     += core gui sql printsupport network
+QT     += core gui sql printsupport network xml
 
 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 
diff --git a/mainwindow.cpp b/mainwindow.cpp
index c771265..8318187 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -67,6 +67,7 @@ if(Debug) qDebug() << "oeffneDatenbank";
     }
 
     query = QSqlQuery(db);
+    query2 = QSqlQuery(db);
 
     query.exec("CREATE TABLE IF NOT EXISTS einstellungen("
                "pfad TEXT)");
@@ -149,12 +150,128 @@ if(Debug) qDebug() << "~MainWindow";
 if(Debug) qDebug() << "~MainWindow-Ende";
 }
 
-void MainWindow::on_actionDaten_aktualisieren_triggered(){
+void MainWindow::on_actionVideopfad_einlesen_triggered(){
 if(Debug) qDebug() << "on_actionDaten_aktualisieren_triggered";
     leseVerzeichnis();
 if(Debug) qDebug() << "on_actionDaten_aktualisieren_triggered-Ende";
 }
 
+void MainWindow::on_actionKodi_Daten_einlesen_triggered(){
+if(Debug) qDebug() << "on_actionKodi_Daten_einlesen_triggered";
+    QSqlQuery query("SELECT pfad FROM video");
+    while (query.next()) {
+        QString pfad = query.value(0).toString();
+        QStringList list_pfad = pfad.split(u'.');
+        QString pfad_tmp;
+        for(int i=0; i<list_pfad.length()-1; ++i){
+            pfad_tmp.append(list_pfad.at(i)+".");
+        }
+        QString pfad_nfo = pfad_tmp+"nfo";
+        QString pfad_Bild = pfad_tmp+"-poster.jpg";
+        pfad_Bild.replace(".-poster.jpg","-poster.jpg");
+
+        QDomDocument doc("nfo");
+        QString Titel;
+        QString Genre;
+        QString Laenge;
+        QString Jahr;
+        QString Handlung;
+        QFile file(pfad_nfo);
+        if(file.open(QIODevice::ReadOnly)){
+            if(doc.setContent(&file)){
+                QDomElement docElement = doc.documentElement();
+                for(QDomNode n = docElement.firstChild(); !n.isNull(); n = n.nextSibling()){
+                    if( !n.isNull() ) {
+                        if ( n.isElement() && n.nodeName() == "title" ) {
+                            Titel = n.toElement().text();
+                        }
+                    }
+                }
+                for(QDomNode n = docElement.firstChild(); !n.isNull(); n = n.nextSibling()){
+                    if( !n.isNull() ) {
+                        if ( n.isElement() && n.nodeName() == "genre" ) {
+                            Genre = n.toElement().text();
+                        }
+                    }
+                }
+                for(QDomNode n = docElement.firstChild(); !n.isNull(); n = n.nextSibling()){
+                    if( !n.isNull() ) {
+                        if ( n.isElement() && n.nodeName() == "runtime" ) {
+                            Laenge = n.toElement().text();
+                        }
+                    }
+                }
+                for(QDomNode n = docElement.firstChild(); !n.isNull(); n = n.nextSibling()){
+                    if( !n.isNull() ) {
+                        if ( n.isElement() && n.nodeName() == "year" ) {
+                            Jahr = n.toElement().text();
+                        }
+                    }
+                }
+                for(QDomNode n = docElement.firstChild(); !n.isNull(); n = n.nextSibling()){
+                    if( !n.isNull() ) {
+                        if ( n.isElement() && n.nodeName() == "plot" ) {
+                            Handlung = n.toElement().text();
+                        }
+                    }
+                }
+            }
+            file.close();
+
+            // id ermitteln
+            int id=0;
+            query2.exec(QString("SELECT * FROM video WHERE pfad LIKE '%1'").arg(pfad.replace(QString("'"), QString("''"))));
+            if(query2.lastError().isValid()){
+                ui->statusbar->showMessage("Fehler:" + query.lastError().databaseText());
+            }
+            while(query2.next()){
+                id=query2.value(0).toInt();
+            }
+            // id ermitteln ende
+            // Titel speichern
+            query2.exec(QString("UPDATE video SET Titel=('%1') WHERE id=('%2')").arg(Titel.replace(QString("'"), QString("''")), QString::number(id)));
+            if(query2.lastError().isValid()){
+                ui->statusbar->showMessage("Fehler:" + query2.lastError().databaseText());
+            }
+            // Genre speichern
+            query2.exec(QString("UPDATE video SET Genre=('%1') WHERE id=('%2')").arg(Genre.replace(QString("'"), QString("''")), QString::number(id)));
+            if(query2.lastError().isValid()){
+                ui->statusbar->showMessage("Fehler:" + query2.lastError().databaseText());
+            }
+            // Länge speichern
+            query2.exec(QString("UPDATE video SET Länge=('%1') WHERE id=('%2')").arg(Laenge.replace(QString("'"), QString("''")), QString::number(id)));
+            if(query2.lastError().isValid()){
+                ui->statusbar->showMessage("Fehler:" + query2.lastError().databaseText());
+            }
+            // Jahr speichern
+            query2.exec(QString("UPDATE video SET Jahr=('%1') WHERE id=('%2')").arg(Jahr.replace(QString("'"), QString("''")), QString::number(id)));
+            if(query2.lastError().isValid()){
+                ui->statusbar->showMessage("Fehler:" + query2.lastError().databaseText());
+            }
+            // Handlung speichern
+            query2.exec(QString("UPDATE video SET Handlung=('%1') WHERE id=('%2')").arg(Handlung.replace(QString("'"), QString("''")), QString::number(id)));
+            if(query2.lastError().isValid()){
+                ui->statusbar->showMessage("Fehler:" + query2.lastError().databaseText());
+            }
+            // Bild speichern
+            if(!(pfad_Bild=="")){
+                QFile file(pfad_Bild);
+                if(file.open(QIODevice::ReadOnly)){
+                    QByteArray inByteArray = file.readAll();
+                    query2.prepare(QString("UPDATE video SET Bild=(:imageData) WHERE id=('%1')").arg(QString::number(id)));
+                    query2.bindValue(":imageData", inByteArray);
+                    if(!query2.exec()){
+                        ui->statusbar->showMessage("Fehler:" + query2.lastError().databaseText());
+                    }
+                }
+            }
+        }
+        ui->statusbar->showMessage(pfad);
+        ui->statusbar->repaint();
+    }
+    ui->statusbar->showMessage("Daten gespeichert");
+if(Debug) qDebug() << "on_actionKodi_Daten_einlesen_triggered";
+}
 
 void MainWindow::on_actionDaten_ausgeben_triggered(){
 if(Debug) qDebug() << "on_actionDaten_ausgeben_triggered";
@@ -164,14 +281,12 @@ if(Debug) qDebug() << "on_actionDaten_ausgeben_triggered";
 if(Debug) qDebug() << "on_actionDaten_ausgeben_triggered-Ende";
 }
 
-
 void MainWindow::on_actionBeenden_triggered(){
 if(Debug) qDebug() << "on_actionBeenden_triggered";
     MainWindow::close();
 if(Debug) qDebug() << "on_actionBeenden_triggered-Ende";
 }
 
-
 void MainWindow::on_actionPfad_zu_den_Videos_triggered(){
 if(Debug) qDebug() << "on_actionPfad_zu_den_Videos_triggered";
     datenPfad = QFileDialog::getExistingDirectory(this, tr("Öffne Verzeichnis"), datenPfad, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
@@ -766,4 +881,3 @@ if(Debug) qDebug() << "on_pushButton_on_pushButton_ordner_clicked";
     ui->statusbar->showMessage("Ordner öffnen");
 if(Debug) qDebug() << "on_pushButton_on_pushButton_ordner_clicked-Ende";
 }
-
diff --git a/mainwindow.h b/mainwindow.h
index 67d2706..4251c70 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -20,6 +20,8 @@
 #include <QJsonArray>
 #include <QDesktopServices>
 #include <QUrl>
+#include <QtXml/QDomDocument>
+#include <QtXml/QDomNode>
 
 QT_BEGIN_NAMESPACE
 namespace Ui { class MainWindow; }
@@ -35,7 +37,8 @@ public:
 
 private slots:
     // Menü
-    void on_actionDaten_aktualisieren_triggered();
+    void on_actionVideopfad_einlesen_triggered();
+    void on_actionKodi_Daten_einlesen_triggered();
     void on_actionDaten_ausgeben_triggered();
     void on_actionBeenden_triggered();
     void on_actionPfad_zu_den_Videos_triggered();
@@ -68,5 +71,6 @@ private:
     Ui::MainWindow *ui;
     QSqlDatabase db;
     QSqlQuery query;
+    QSqlQuery query2;
 };
 #endif // MAINWINDOW_H
diff --git a/mainwindow.ui b/mainwindow.ui
index b50ede8..86c3258 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -439,7 +439,14 @@
     <property name="title">
      <string>Datei</string>
     </property>
-    <addaction name="actionDaten_aktualisieren"/>
+    <widget class="QMenu" name="menuDaten_aktualisieren">
+     <property name="title">
+      <string>Daten aktualisieren</string>
+     </property>
+     <addaction name="actionVideopfad_einlesen"/>
+     <addaction name="actionKodi_Daten_einlesen"/>
+    </widget>
+    <addaction name="menuDaten_aktualisieren"/>
     <addaction name="actionDaten_ausgeben"/>
     <addaction name="separator"/>
     <addaction name="actionBeenden"/>
@@ -454,11 +461,6 @@
    <addaction name="menuEinstellungen"/>
   </widget>
   <widget class="QStatusBar" name="statusbar"/>
-  <action name="actionDaten_aktualisieren">
-   <property name="text">
-    <string>Daten aktualisieren</string>
-   </property>
-  </action>
   <action name="actionDaten_ausgeben">
    <property name="text">
     <string>Daten ausgeben</string>
@@ -474,6 +476,16 @@
     <string>Beenden</string>
    </property>
   </action>
+  <action name="actionVideopfad_einlesen">
+   <property name="text">
+    <string>Videopfad einlesen</string>
+   </property>
+  </action>
+  <action name="actionKodi_Daten_einlesen">
+   <property name="text">
+    <string>Kodi Daten einlesen</string>
+   </property>
+  </action>
  </widget>
  <resources/>
  <connections/>