Init
This commit is contained in:
+59
-39
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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>
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 876 B |
+2
-1
@@ -52,4 +52,5 @@ DISTFILES += \
|
||||
icons/Images.ico \
|
||||
icons/Musics.ico \
|
||||
icons/TV Shows.ico \
|
||||
icons/Videos.ico
|
||||
icons/Videos.ico \
|
||||
icons/empty.ico
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user