/*! * \brief Insert file details into database. * If it is an audio file, read the metadata and insert * that information at the same time. * * If it is an image file, just insert the filename and * type. * * \param filename Full path to file. * * \returns Nothing. */ void FileScanner::AddFileToDB(const QString &filename) { QString extension = filename.section( '.', -1 ) ; QString directory = filename; directory.remove(0, m_startdir.length()); directory = directory.section( '/', 0, -2); QString nameFilter = gCoreContext->GetSetting("AlbumArtFilter", "*.png;*.jpg;*.jpeg;*.gif;*.bmp"); // If this file is an image, insert the details into the music_albumart table if (nameFilter.indexOf(extension.toLower()) > -1) { QString name = filename.section( '/', -1); MSqlQuery query(MSqlQuery::InitCon()); query.prepare("INSERT INTO music_albumart SET filename = :FILE, " "directory_id = :DIRID, imagetype = :TYPE;"); query.bindValue(":FILE", name); query.bindValue(":DIRID", m_directoryid[directory]); query.bindValue(":TYPE", AlbumArtImages::guessImageType(name)); if (!query.exec() || query.numRowsAffected() <= 0) { MythDB::DBError("music insert artwork", query); } return; } Decoder *decoder = Decoder::create(filename, NULL, NULL, true); if (decoder) { LOG(VB_FILE, LOG_INFO, QString("Reading metadata from %1").arg(filename)); Metadata *data = decoder->readMetadata(); if (data) { QString album_cache_string; // Set values from cache int did = m_directoryid[directory]; if (did > 0) data->setDirectoryId(did); int aid = m_artistid[data->Artist().toLower()]; if (aid > 0) { data->setArtistId(aid); // The album cache depends on the artist id album_cache_string = data->getArtistId() + "#" + data->Album().toLower(); if (m_albumid[album_cache_string] > 0) data->setAlbumId(m_albumid[album_cache_string]); } int gid = m_genreid[data->Genre().toLower()]; if (gid > 0) data->setGenreId(gid); // Commit track info to database data->dumpToDatabase(); // Update the cache m_artistid[data->Artist().toLower()] = data->getArtistId(); m_genreid[data->Genre().toLower()] = data->getGenreId(); album_cache_string = data->getArtistId() + "#" + data->Album().toLower(); m_albumid[album_cache_string] = data->getAlbumId(); // read any embedded images from the tag MetaIO *tagger = data->getTagger(); if (tagger && tagger->supportsEmbeddedImages()) { AlbumArtList artList = tagger->getAlbumArtList(data->Filename()); data->setEmbeddedAlbumArt(artList); data->getAlbumArtImages()->dumpToDatabase(); } delete data; } delete decoder; } }
void ImportMusicDialog::addPressed() { if (m_tracks->size() == 0) return; Metadata *meta = m_tracks->at(m_currentTrack)->metadata; // is the current track a new file? if (m_tracks->at(m_currentTrack)->isNewTune) { // get the save filename - this also creates the correct directory stucture QString saveFilename = Ripper::filenameFromMetadata(meta); // we need to manually copy the file extension QFileInfo fi(meta->Filename()); saveFilename += "." + fi.suffix(); // copy the file to the new location if (!copyFile(meta->Filename(), saveFilename)) { ShowOkPopup(tr("Copy Failed\nCould not copy file to: %1") .arg(saveFilename)); return; } meta->setFilename(saveFilename); // do we need to update the tags? if (m_tracks->at(m_currentTrack)->metadataHasChanged) { Decoder *decoder = Decoder::create(saveFilename, NULL, NULL, true); if (decoder) { decoder->commitMetadata(meta); delete decoder; } } // update the database meta->dumpToDatabase(); // read any embedded images from the tag MetaIO *tagger = meta->getTagger(); if (tagger && tagger->supportsEmbeddedImages()) { AlbumArtList artList = tagger->getAlbumArtList(meta->Filename()); meta->setEmbeddedAlbumArt(artList); meta->getAlbumArtImages()->dumpToDatabase(); } m_somethingWasImported = true; m_tracks->at(m_currentTrack)->isNewTune = Ripper::isNewTune( meta->Artist(), meta->Album(), meta->Title()); // update the UI fillWidgets(); } else ShowOkPopup(tr("This track is already in the database")); }