/*! * \brief Builds a list of all the files found descending recursively * into the given directory * * \param directory Directory to begin search * \param music_files A pointer to the MusicLoadedMap to store the results * \param parentid The id of the parent directory in the music_directories * table. The root directory should have an id of 0 * * \returns Nothing. */ void FileScanner::BuildFileList(QString &directory, MusicLoadedMap &music_files, int parentid) { QDir d(directory); if (!d.exists()) return; QFileInfoList list = d.entryInfoList(); if (list.isEmpty()) return; QFileInfoList::const_iterator it = list.begin(); const QFileInfo *fi; /* Recursively traverse directory, calling QApplication::processEvents() every now and then to ensure the UI updates */ int update_interval = 0; int newparentid = 0; while (it != list.end()) { fi = &(*it); ++it; if (fi->fileName() == "." || fi->fileName() == "..") continue; QString filename = fi->absoluteFilePath(); if (fi->isDir()) { QString dir(filename); dir.remove(0, m_startdir.length()); newparentid = m_directoryid[dir]; if (newparentid == 0) { int id = GetDirectoryId(dir, parentid); m_directoryid[dir] = id; if (id > 0) { newparentid = id; } else { LOG(VB_GENERAL, LOG_ERR, QString("Failed to get directory id for path %1") .arg(dir)); } } BuildFileList(filename, music_files, newparentid); qApp->processEvents (); } else { if (++update_interval > 100) { qApp->processEvents(); update_interval = 0; } music_files[filename] = kFileSystem; } } }
/*! * \brief Builds a list of all the files found descending recursively * into the given directory * * \param directory Directory to begin search * \param music_files A pointer to the MusicLoadedMap to store the results * \param parentid The id of the parent directory in the music_directories * table. The root directory should have an id of 0 * * \returns Nothing. */ void MusicFileScanner::BuildFileList(QString &directory, MusicLoadedMap &music_files, MusicLoadedMap &art_files, int parentid) { QDir d(directory); if (!d.exists()) return; d.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); QFileInfoList list = d.entryInfoList(); if (list.isEmpty()) return; QFileInfoList::const_iterator it = list.begin(); const QFileInfo *fi; // Recursively traverse directory int newparentid = 0; while (it != list.end()) { fi = &(*it); ++it; QString filename = fi->absoluteFilePath(); if (fi->isDir()) { QString dir(filename); dir.remove(0, m_startDirs.last().length()); newparentid = m_directoryid[dir]; if (newparentid == 0) { int id = GetDirectoryId(dir, parentid); m_directoryid[dir] = id; if (id > 0) { newparentid = id; } else { LOG(VB_GENERAL, LOG_ERR, QString("Failed to get directory id for path %1") .arg(dir)); } } BuildFileList(filename, music_files, art_files, newparentid); } else { if (IsArtFile(filename)) { MusicFileData fdata; fdata.startDir = m_startDirs.last(); fdata.location = MusicFileScanner::kFileSystem; art_files[filename] = fdata; } else if (IsMusicFile(filename)) { MusicFileData fdata; fdata.startDir = m_startDirs.last(); fdata.location = MusicFileScanner::kFileSystem; music_files[filename] = fdata; } else LOG(VB_GENERAL, LOG_INFO, QString("Found file with unsupported extension %1") .arg(filename)); } } }