From dc30c35575d8265f134d721b8fa65e6fde049219 Mon Sep 17 00:00:00 2001 From: birkeh Date: Fri, 21 Oct 2016 13:12:16 +0200 Subject: [PATCH] Init --- ckodilibrary.cpp | 98 +++++++++++++++++++++++++----------------- ckodilibrary.h | 45 ++++++++++++------- ckodivideolibrary.cpp | 38 +++++++++------- ckodivideolibrary.h | 8 ++-- cmainwindow.cpp | 76 +++++++++++++++++++++++++++++--- cmainwindow.h | 19 +++++++- cmainwindow.ui | 6 +-- icons/empty.ico | Bin 0 -> 876 bytes qtKodiDB.pro | 3 +- qtkodidb.qrc | 1 + 10 files changed, 211 insertions(+), 83 deletions(-) create mode 100644 icons/empty.ico diff --git a/ckodilibrary.cpp b/ckodilibrary.cpp index 31c1c9a..bbf5b98 100644 --- a/ckodilibrary.cpp +++ b/ckodilibrary.cpp @@ -1,65 +1,85 @@ #include "ckodilibrary.h" +#include #include #include #include -cKodiLibrary::cKodiLibrary() : - m_szPath(""), - m_szAddons(""), - m_szADSP(""), - m_szEpg(""), - m_szMyMusic(""), - m_szMyVideos(""), - m_szTextures(""), - m_szTV(""), - m_szViewModes("") +cKodiLibrary::cKodiLibrary(QStatusBar* lpMainWindowStatusBar, QSqlDatabase& dbVideos) : + m_command(command_none), + m_lpMainWindowStatusBar(lpMainWindowStatusBar), + m_dbVideos(dbVideos) { } -cKodiLibrary::~cKodiLibrary() +void cKodiLibrary::stop() { + QMutexLocker locker(&m_mutex); + + while(m_command != command_none) + msleep(100); + + m_command = command_stop; } -QString cKodiLibrary::findFile(const QString& szPath, const QString& szFile) +void cKodiLibrary::run() { - QDir fileList(szPath + QDir::separator() + QString("Userdata") + QDir::separator() + QString("Database"), szFile + QString("*.*")); - QString fileName(""); - QStringList files = fileList.entryList(QDir::Files); - qint16 iVersion = -1; + bool bStop = false; + QTime timer; + timer.restart(); - for(int x = 0;x < files.count();x++) + for(;;) { - QString tmp = files.at(x); - tmp = tmp.left(tmp.lastIndexOf(".")); - tmp = tmp.mid(szFile.length()); - if(iVersion < tmp.toInt()) + switch(m_command) { - fileName = files.at(x); - iVersion = tmp.toInt(); + case command_none: + break; + case command_init: + doInit(); + m_command = command_none; + break; + case command_stop: + bStop = true; + break; + default: + break; } + + if(bStop) + break; + msleep(10); } - if(fileName.length()) - return(fileList.cleanPath(fileList.absoluteFilePath(fileName))); - return(fileName); } -bool cKodiLibrary::init(const QString& szPath) +void cKodiLibrary::init() { - m_szPath = szPath; - m_szAddons = findFile(m_szPath, "Addons"); - m_szADSP = findFile(m_szPath, "ADSP"); - m_szEpg = findFile(m_szPath, "Epg"); - m_szMyMusic = findFile(m_szPath, "MyMusic"); - m_szMyVideos = findFile(m_szPath, "MyVideos"); - m_szTextures = findFile(m_szPath, "Textures"); - m_szTV = findFile(m_szPath, "TV"); - m_szViewModes = findFile(m_szPath, "ViewModes"); + QMutexLocker locker(&m_mutex); - if(m_kodiVideoLibrary.init(m_szMyVideos) != -1) - return(true); + while(m_command != command_none) + msleep(100); - return(false); + m_command = command_init; +} + +bool cKodiLibrary::doInit() +{ + QMutexLocker locker(&m_mutex); + qint32 iVideoCount = 0; + + m_lpMainWindowStatusBar->showMessage("Initializing Videos ..."); + + if(!m_dbVideos.open()) + return(false); + + m_lpKodiVideoLibrary = new cKodiVideoLibrary(m_dbVideos); + if(m_lpKodiVideoLibrary->init() != -1) + iVideoCount = m_lpKodiVideoLibrary->load(); + emit initDone(iVideoCount); + + m_command = command_none; + m_lpMainWindowStatusBar->showMessage("Done.", 3000); + + return(iVideoCount != 0); } diff --git a/ckodilibrary.h b/ckodilibrary.h index 89fae93..c7684a0 100644 --- a/ckodilibrary.h +++ b/ckodilibrary.h @@ -4,27 +4,42 @@ #include "ckodivideolibrary.h" +#include +#include +#include -class cKodiLibrary + +class cKodiLibrary : public QThread { + Q_OBJECT + public: - cKodiLibrary(); - ~cKodiLibrary(); + cKodiLibrary(QStatusBar* lpMainWindowStatusBar, QSqlDatabase& dbVideos); +public slots: + void stop(); + void init(); + +signals: + void initDone(qint32 iMovieCount); - bool init(const QString &szPath); private: - QString m_szPath; - QString m_szAddons; - QString m_szADSP; - QString m_szEpg; - QString m_szMyMusic; - QString m_szMyVideos; - QString m_szTextures; - QString m_szTV; - QString m_szViewModes; - cKodiVideoLibrary m_kodiVideoLibrary; + enum commands + { + command_none = 0, + command_init = 1, + command_stop = 99, + }; - QString findFile(const QString& szPath, const QString& szFile); + commands m_command; + QMutex m_mutex; + QStatusBar* m_lpMainWindowStatusBar; + cKodiVideoLibrary* m_lpKodiVideoLibrary; + + QSqlDatabase m_dbVideos; + + void run(); + + bool doInit(); }; #endif // CKODILIBRARY_H diff --git a/ckodivideolibrary.cpp b/ckodivideolibrary.cpp index 23b3fa7..2785938 100644 --- a/ckodivideolibrary.cpp +++ b/ckodivideolibrary.cpp @@ -2,11 +2,14 @@ #include #include +#include + +#include -cKodiVideoLibrary::cKodiVideoLibrary() : +cKodiVideoLibrary::cKodiVideoLibrary(QSqlDatabase& db) : + m_db(db), m_bConnected(false), - m_szFileName(""), m_iVersion(-1) { } @@ -17,29 +20,18 @@ cKodiVideoLibrary::~cKodiVideoLibrary() m_db.close(); } -qint16 cKodiVideoLibrary::init(const QString& szFileName) +qint16 cKodiVideoLibrary::init() { if(m_bConnected) return(m_iVersion); - if(!QFile(szFileName).exists()) - return(-1); - - m_db = QSqlDatabase::addDatabase("QSQLITE", "VideoLibrary"); - m_szFileName = szFileName; - m_db.setDatabaseName(m_szFileName); - if(!m_db.open()) - { - m_szFileName = ""; - return(-1); - } - QSqlQuery query(m_db); if(!query.exec("SELECT idVersion FROM version;")) { m_db.close(); return(-1); } + if(!query.first()) { m_db.close(); @@ -48,6 +40,7 @@ qint16 cKodiVideoLibrary::init(const QString& szFileName) m_iVersion = query.value("idVersion").toInt(); m_bConnected = true; + return(m_iVersion); } @@ -57,3 +50,18 @@ qint16 cKodiVideoLibrary::version() return(-1); return(m_iVersion); } + +qint32 cKodiVideoLibrary::load() +{ + QStringList movies; + + QSqlQuery query(m_db); + + query.exec("SELECT idMovie, idFile, c00 FROM movie_view ORDER BY c00;"); + while(query.next()) + { + movies.append(query.value("c00").toString()); + } + + return(movies.count()); +} diff --git a/ckodivideolibrary.h b/ckodivideolibrary.h index 8155785..45d3100 100644 --- a/ckodivideolibrary.h +++ b/ckodivideolibrary.h @@ -3,20 +3,22 @@ #include #include +#include class cKodiVideoLibrary { public: - cKodiVideoLibrary(); + cKodiVideoLibrary(QSqlDatabase& db); ~cKodiVideoLibrary(); - qint16 init(const QString& szFileName); + qint16 init(); qint16 version(); + + qint32 load(); private: QSqlDatabase m_db; bool m_bConnected; - QString m_szFileName; qint16 m_iVersion; }; diff --git a/cmainwindow.cpp b/cmainwindow.cpp index 99265d1..786f675 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -9,7 +9,10 @@ cMainWindow::cMainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::cMainWindow), m_lpMovieWidget(0), - m_lpTVShowWidget(0) + m_lpTVShowWidget(0), + m_lpMusicWidget(0), + m_lpMusicVideoWidget(0), + m_lpKodiLibrary(0) { initUI(); initDB(); @@ -29,6 +32,14 @@ cMainWindow::~cMainWindow() if(m_lpMusicVideoWidget) delete m_lpMusicVideoWidget; + if(m_lpKodiLibrary) + { + m_lpKodiLibrary->stop(); + while(!m_lpKodiLibrary->isFinished()) + QThread::msleep(100); + delete m_lpKodiLibrary; + } + delete ui; } @@ -41,17 +52,70 @@ void cMainWindow::initUI() m_lpMusicWidget = new cMusicWidget(this); m_lpMusicVideoWidget = new cMusicVideosWidget(this); - ui->m_lpMainTab->addTab(m_lpMovieWidget, QIcon(":/icons/Videos.ico"), "Movies"); - ui->m_lpMainTab->addTab(m_lpTVShowWidget, QIcon(":/icons/TV Shows.ico"), "TV Shows"); - ui->m_lpMainTab->addTab(m_lpMusicWidget, QIcon(":/icons/Musics.ico"), "Music"); - ui->m_lpMainTab->addTab(m_lpMusicVideoWidget, QIcon(":/icons/Videos.ico"), "Music Videos"); +// ui->m_lpMainTab->addTab(m_lpMovieWidget, QIcon(":/icons/Videos.ico"), "Movies"); +// ui->m_lpMainTab->addTab(m_lpTVShowWidget, QIcon(":/icons/TV Shows.ico"), "TV Shows"); +// ui->m_lpMainTab->addTab(m_lpMusicWidget, QIcon(":/icons/Musics.ico"), "Music"); +// ui->m_lpMainTab->addTab(m_lpMusicVideoWidget, QIcon(":/icons/Videos.ico"), "Music Videos"); + ui->m_lpMainTab->addTab(m_lpMovieWidget, QIcon(":/icons/empty.ico"), "Movies"); + ui->m_lpMainTab->addTab(m_lpTVShowWidget, QIcon(":/icons/empty.ico"), "TV Shows"); + ui->m_lpMainTab->addTab(m_lpMusicWidget, QIcon(":/icons/empty.ico"), "Music"); + ui->m_lpMainTab->addTab(m_lpMusicVideoWidget, QIcon(":/icons/empty.ico"), "Music Videos"); ui->m_lpMainTab->setCurrentIndex(0); setWindowTitle("qtKodiAdmin"); } +QString cMainWindow::findFile(const QString& szPath, const QString& szFile) +{ + QDir fileList(szPath + QDir::separator() + QString("Userdata") + QDir::separator() + QString("Database"), szFile + QString("*.*")); + QString fileName(""); + QStringList files = fileList.entryList(QDir::Files); + qint16 iVersion = -1; + + for(int x = 0;x < files.count();x++) + { + QString tmp = files.at(x); + tmp = tmp.left(tmp.lastIndexOf(".")); + tmp = tmp.mid(szFile.length()); + if(iVersion < tmp.toInt()) + { + fileName = files.at(x); + iVersion = tmp.toInt(); + } + } + if(fileName.length()) + return(fileList.cleanPath(fileList.absoluteFilePath(fileName))); + return(fileName); +} + void cMainWindow::initDB() { - m_kodiLibrary.init(QDir::homePath() + QDir::separator() + QString(".kodi")); + ui->m_lpStatusBar->showMessage("Initializing ..."); + + m_szPath = QDir::homePath() + QDir::separator() + QString(".kodi"); + + m_szAddons = findFile(m_szPath, "Addons"); + m_szADSP = findFile(m_szPath, "ADSP"); + m_szEpg = findFile(m_szPath, "Epg"); + m_szMyMusic = findFile(m_szPath, "MyMusic"); + m_szMyVideos = findFile(m_szPath, "MyVideos"); + m_szTextures = findFile(m_szPath, "Textures"); + m_szTV = findFile(m_szPath, "TV"); + m_szViewModes = findFile(m_szPath, "ViewModes"); + + m_dbVideos = QSqlDatabase::addDatabase("QSQLITE", "VideoLibrary"); + m_dbVideos.setDatabaseName(m_szMyVideos); + if(!m_dbVideos.open()) + return; + + m_lpKodiLibrary = new cKodiLibrary(ui->m_lpStatusBar, m_dbVideos); + connect(m_lpKodiLibrary, SIGNAL(initDone(qint32)), this, SLOT(onInitDone(qint32))); + m_lpKodiLibrary->start(); + m_lpKodiLibrary->init(); +} + +void cMainWindow::onInitDone(qint32 iMovieCount) +{ + iMovieCount = 0; } diff --git a/cmainwindow.h b/cmainwindow.h index bd00ca3..ac037a2 100644 --- a/cmainwindow.h +++ b/cmainwindow.h @@ -10,6 +10,7 @@ #include "ckodilibrary.h" #include +#include namespace Ui @@ -25,14 +26,30 @@ public: explicit cMainWindow(QWidget *parent = 0); ~cMainWindow(); +private slots: + void onInitDone(qint32 iMovieCount); + private: Ui::cMainWindow* ui; cMovieWidget* m_lpMovieWidget; cTVShowWidget* m_lpTVShowWidget; cMusicWidget* m_lpMusicWidget; cMusicVideosWidget* m_lpMusicVideoWidget; - cKodiLibrary m_kodiLibrary; + cKodiLibrary* m_lpKodiLibrary; + QString m_szPath; + QString m_szAddons; + QString m_szADSP; + QString m_szEpg; + QString m_szMyMusic; + QString m_szMyVideos; + QString m_szTextures; + QString m_szTV; + QString m_szViewModes; + + QSqlDatabase m_dbVideos; + + QString findFile(const QString& szPath, const QString& szFile); void initUI(); void initDB(); }; diff --git a/cmainwindow.ui b/cmainwindow.ui index 8f63187..e899ccc 100644 --- a/cmainwindow.ui +++ b/cmainwindow.ui @@ -36,7 +36,7 @@ - + 0 @@ -46,7 +46,7 @@ - + TopToolBarArea @@ -54,7 +54,7 @@ false - + diff --git a/icons/empty.ico b/icons/empty.ico new file mode 100644 index 0000000000000000000000000000000000000000..972aab5b3a998c193f43e3169ed78abbd1b0b3c6 GIT binary patch literal 876 zcmZQzU<5)CU}R8W2xDeo5CgJ11N_{1xum#&OkPh9mmrWV2y?IjshFY_X$%a^vYsxE zAr*7pUNHpficons/TV Shows.png icons/Videos.ico icons/Videos.png + icons/empty.ico