lms-audio/src/medialibrary.cpp
santi 747f5d4af6 Fixed sigsev on exit
On AudioMotor destructor
2014-07-24 14:29:04 +02:00

101 lines
2.8 KiB
C++

#include "medialibrary.h"
MediaLibrary *MediaLibrary::_instance = 0;
MediaLibrary *MediaLibrary::getInstance() {
if (_instance == 0) {
_instance = new MediaLibrary();
Q_CHECK_PTR(_instance);
}
return _instance;
}
MediaLibrary::MediaLibrary(QObject *parent) :
QObject(parent)
// ,m_media(new QList<MediaFolder>)
, m_pathmedia()
{
// initMediaLibrary();
qDebug("Init MediaLibrary");
}
/** Initializes the media library and the media information
* from the path to media in m_pathmedia
*/
void MediaLibrary::initMediaLibrary() {
QDir dir;
if (!dir.cd(m_pathmedia)) {
qWarning("initMediaLibrary| Can not cd to the path: ");
qWarning(m_pathmedia.toAscii().constData());
return;
}
m_media = new QList<MediaFolder>;
dir.setFilter(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);
QFileInfoList filelist = dir.entryInfoList();
dir.setFilter(QDir::Files);
QFileInfo fileInfo;
struct MediaFolder mediai;
for (int i = 0; i < filelist.size(); ++i) {
fileInfo = filelist.at(i);
QString name = fileInfo.absoluteFilePath();
dir.cd(fileInfo.baseName());
mediai.m_Id = i;
mediai.m_Name = name;
mediai.m_ElementCount = dir.count();
mediai.m_MediaInformation = getMediaInformation(dir);
dir.cdUp();
m_media->append(mediai);
}
}
/**
* This set every media file included in one library/folder
*/
QList<MediaFile> MediaLibrary::getMediaInformation(QDir dir)
{
QList<MediaFile> mediaList;
MediaFile mediainf;
dir.setFilter(QDir::Files);
QFileInfoList filelist = dir.entryInfoList();
QFileInfo fileInfo;
for (int i = 0; i < filelist.size(); ++i) {
fileInfo = filelist.at(i);
// Update the data base with the new file
mediainf.Number = i;
mediainf.MediaName = fileInfo.absoluteFilePath();
mediainf.MediaLength = 1000; // ¿?¿?¿?¿?
mediaList.append(mediainf);
}
return mediaList;
}
/** Selects one media path from the library
*
*/
QString MediaLibrary::requestNewFile(int folder, int file){
QString newfile;
if (m_pathmedia.isNull()) {
qWarning("Path not set yet");
return newfile;
}
if (m_media == NULL) {
qWarning("media not setup");
return newfile;
}
if (folder < m_media->size()) {
if (file < m_media->at(folder).m_MediaInformation.size()) {
newfile = m_media->at(folder).m_MediaInformation.at(file).MediaName;
} else {
qDebug("MediaLibrary::requestNewFile(): Requested file is greater than files in library");
}
} else {
qDebug("MediaLibrary::requestNewFile(): Requested folder is greater than media libraries");
}
return newfile;
}