This commit is contained in:
2016-10-21 13:12:16 +02:00
parent 0f2c75fe95
commit dc30c35575
10 changed files with 211 additions and 83 deletions
+59 -39
View File
@@ -1,65 +1,85 @@
#include "ckodilibrary.h"
#include <QTime>
#include <QDir>
#include <QString>
#include <QStringList>
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);
}
+30 -15
View File
@@ -4,27 +4,42 @@
#include "ckodivideolibrary.h"
#include <QStatusBar>
#include <QThread>
#include <QMutexLocker>
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
+23 -15
View File
@@ -2,11 +2,14 @@
#include <QFile>
#include <QVariant>
#include <QStringList>
#include <QSqlQuery>
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());
}
+5 -3
View File
@@ -3,20 +3,22 @@
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QStatusBar>
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;
};
+70 -6
View File
@@ -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;
}
+18 -1
View File
@@ -10,6 +10,7 @@
#include "ckodilibrary.h"
#include <QMainWindow>
#include <QSqlDatabase>
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();
};
+3 -3
View File
@@ -36,7 +36,7 @@
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menuBar">
<widget class="QMenuBar" name="m_lpMenuBar">
<property name="geometry">
<rect>
<x>0</x>
@@ -46,7 +46,7 @@
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<widget class="QToolBar" name="m_lpMainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
@@ -54,7 +54,7 @@
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
<widget class="QStatusBar" name="m_lpStatusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 876 B

+2 -1
View File
@@ -52,4 +52,5 @@ DISTFILES += \
icons/Images.ico \
icons/Musics.ico \
icons/TV Shows.ico \
icons/Videos.ico
icons/Videos.ico \
icons/empty.ico
+1
View File
@@ -8,5 +8,6 @@
<file>icons/TV Shows.png</file>
<file>icons/Videos.ico</file>
<file>icons/Videos.png</file>
<file>icons/empty.ico</file>
</qresource>
</RCC>