void ImportMusicDialog::scanDirectory(QString &directory, vector<TrackInfo*> *tracks) { QDir d(directory); if (!d.exists()) return; const QFileInfoList list = d.entryInfoList(); if (list.isEmpty()) return; QFileInfoList::const_iterator it = list.begin(); const QFileInfo *fi; while (it != list.end()) { fi = &(*it); ++it; if (fi->fileName() == "." || fi->fileName() == "..") continue; QString filename = fi->absoluteFilePath(); if (fi->isDir()) scanDirectory(filename, tracks); else { Decoder *decoder = Decoder::create(filename, NULL, NULL, true); if (decoder) { Metadata *metadata = decoder->getMetadata(); if (metadata) { TrackInfo * track = new TrackInfo; track->metadata = metadata; track->isNewTune = Ripper::isNewTune(metadata->Artist(), metadata->Album(), metadata->Title()); track->metadataHasChanged = false; tracks->push_back(track); m_sourceFiles.append(filename); } delete decoder; } } } }
/*! * \brief Updates a file in the database. * * \param filename Full path to file. * * \returns Nothing. */ void FileScanner::UpdateFileInDB(const QString &filename) { QString directory = filename; directory.remove(0, m_startdir.length()); directory = directory.section( '/', 0, -2); Decoder *decoder = Decoder::create(filename, NULL, NULL, true); if (decoder) { Metadata *db_meta = decoder->getMetadata(); Metadata *disk_meta = decoder->readMetadata(); if (db_meta && disk_meta) { disk_meta->setID(db_meta->ID()); disk_meta->setRating(db_meta->Rating()); QString album_cache_string; // Set values from cache int did = m_directoryid[directory]; if (did > 0) disk_meta->setDirectoryId(did); int aid = m_artistid[disk_meta->Artist().toLower()]; if (aid > 0) { disk_meta->setArtistId(aid); // The album cache depends on the artist id album_cache_string = disk_meta->getArtistId() + "#" + disk_meta->Album().toLower(); if (m_albumid[album_cache_string] > 0) disk_meta->setAlbumId(m_albumid[album_cache_string]); } int gid = m_genreid[disk_meta->Genre().toLower()]; if (gid > 0) disk_meta->setGenreId(gid); // Commit track info to database disk_meta->dumpToDatabase(); // Update the cache m_artistid[disk_meta->Artist().toLower()] = disk_meta->getArtistId(); m_genreid[disk_meta->Genre().toLower()] = disk_meta->getGenreId(); album_cache_string = disk_meta->getArtistId() + "#" + disk_meta->Album().toLower(); m_albumid[album_cache_string] = disk_meta->getAlbumId(); } if (disk_meta) delete disk_meta; if (db_meta) delete db_meta; delete decoder; } }