bool WriteMail::composerSelected(const QPair<QString, QMailMessage::MessageType> &selection) { // We need to ensure that we can send for this composer QMailMessage::MessageType messageType = selection.second; if (!m_selectComposerWidget->availableTypes().contains(messageType)) { // See if the user wants to add/edit an account to resolve this QString type(QMailComposerFactory::displayName(selection.first, messageType)); if (QMessageBox::question(qApp->activeWindow(), tr("No accounts configured"), tr("No accounts are configured to send %1.\nDo you wish to configure one now?").arg(type), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { emit editAccounts(); } return false; } if (!m_selectComposerWidget->availableTypes().contains(messageType)) { // If still not possible, then just fail emit noSendAccount(messageType); return false; } setComposer(selection.first); m_composerInterface->clear(); m_widgetStack->setCurrentWidget(m_composerInterface); // Can't save as draft until there has been a change m_draftAction->setEnabled(false); return true; }
void TrackInfoObject::parse() { // Log parsing of header information in developer mode. This is useful for // tracking down corrupt files. const QString& canonicalLocation = m_fileInfo.canonicalFilePath(); if (CmdlineArgs::Instance().getDeveloper()) { qDebug() << "TrackInfoObject::parse()" << canonicalLocation; } // Parse the information stored in the sound file. SoundSourceProxy proxy(canonicalLocation, m_pSecurityToken); Mixxx::SoundSource* pProxiedSoundSource = proxy.getProxiedSoundSource(); if (pProxiedSoundSource != NULL && proxy.parseHeader() == OK) { // Dump the metadata extracted from the file into the track. // TODO(XXX): This involves locking the mutex for every setXXX // method. We should figure out an optimization where there are private // setters that don't lock the mutex. // If Artist, Title and Type fields are not blank, modify them. // Otherwise, keep their current values. // TODO(rryan): Should we re-visit this decision? if (!(pProxiedSoundSource->getArtist().isEmpty())) { setArtist(pProxiedSoundSource->getArtist()); } if (!(pProxiedSoundSource->getTitle().isEmpty())) { setTitle(pProxiedSoundSource->getTitle()); } if (!(pProxiedSoundSource->getType().isEmpty())) { setType(pProxiedSoundSource->getType()); } setAlbum(pProxiedSoundSource->getAlbum()); setAlbumArtist(pProxiedSoundSource->getAlbumArtist()); setYear(pProxiedSoundSource->getYear()); setGenre(pProxiedSoundSource->getGenre()); setComposer(pProxiedSoundSource->getComposer()); setGrouping(pProxiedSoundSource->getGrouping()); setComment(pProxiedSoundSource->getComment()); setTrackNumber(pProxiedSoundSource->getTrackNumber()); setReplayGain(pProxiedSoundSource->getReplayGain()); setBpm(pProxiedSoundSource->getBPM()); setDuration(pProxiedSoundSource->getDuration()); setBitrate(pProxiedSoundSource->getBitrate()); setSampleRate(pProxiedSoundSource->getSampleRate()); setChannels(pProxiedSoundSource->getChannels()); setKeyText(pProxiedSoundSource->getKey(), mixxx::track::io::key::FILE_METADATA); setHeaderParsed(true); } else { qDebug() << "TrackInfoObject::parse() error at file" << canonicalLocation; setHeaderParsed(false); // Add basic information derived from the filename: parseFilename(); } }
bool SoundSource::processID3v2Tag(TagLib::ID3v2::Tag* id3v2) { // Print every frame in the file. if (s_bDebugMetadata) { TagLib::ID3v2::FrameList::ConstIterator it = id3v2->frameList().begin(); for(; it != id3v2->frameList().end(); it++) { qDebug() << "ID3V2" << (*it)->frameID().data() << "-" << TStringToQString((*it)->toString()); } } TagLib::ID3v2::FrameList bpmFrame = id3v2->frameListMap()["TBPM"]; if (!bpmFrame.isEmpty()) { QString sBpm = TStringToQString(bpmFrame.front()->toString()); processBpmString("ID3v2", sBpm); } TagLib::ID3v2::FrameList keyFrame = id3v2->frameListMap()["TKEY"]; if (!keyFrame.isEmpty()) { QString sKey = TStringToQString(keyFrame.front()->toString()); setKey(sKey); } // Foobar2000-style ID3v2.3.0 tags // TODO: Check if everything is ok. TagLib::ID3v2::FrameList frames = id3v2->frameListMap()["TXXX"]; for ( TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it ) { TagLib::ID3v2::UserTextIdentificationFrame* ReplayGainframe = dynamic_cast<TagLib::ID3v2::UserTextIdentificationFrame*>( *it ); if ( ReplayGainframe && ReplayGainframe->fieldList().size() >= 2 ) { QString desc = TStringToQString( ReplayGainframe->description() ).toLower(); if ( desc == "replaygain_album_gain" ){ QString sReplayGain = TStringToQString( ReplayGainframe->fieldList()[1]); parseReplayGainString(sReplayGain); } if ( desc == "replaygain_track_gain" ){ QString sReplayGain = TStringToQString( ReplayGainframe->fieldList()[1]); parseReplayGainString(sReplayGain); } } } TagLib::ID3v2::FrameList composerFrame = id3v2->frameListMap()["TCOM"]; if (!composerFrame.isEmpty()) { QString sComposer = TStringToQString(composerFrame.front()->toString()); setComposer(sComposer); } return true; }
void endUpdate() { foreach( TrackEditorPtr ec, m_editors ) ec->endUpdate(); m_batchMode = false; QTimer::singleShot( 0, m_collection, SLOT(slotUpdated()) ); } void setComment( const QString &newComment ) { FORWARD( setComment( newComment ) ) } void setTrackNumber( int newTrackNumber ) { FORWARD( setTrackNumber( newTrackNumber ) ) } void setDiscNumber( int newDiscNumber ) { FORWARD( setDiscNumber( newDiscNumber ) ) } void setBpm( const qreal newBpm ) { FORWARD( setBpm( newBpm ) ) } void setTitle( const QString &newTitle ) { FORWARD( setTitle( newTitle ) ) } void setArtist( const QString &newArtist ) { FORWARD( setArtist( newArtist ) ) } void setAlbum( const QString &newAlbum ) { FORWARD( setAlbum( newAlbum ) ) } void setAlbumArtist( const QString &newAlbumArtist ) { FORWARD( setAlbumArtist ( newAlbumArtist ) ) } void setGenre( const QString &newGenre ) { FORWARD( setGenre( newGenre ) ) } void setComposer( const QString &newComposer ) { FORWARD( setComposer( newComposer ) ) } void setYear( int newYear ) { FORWARD( setYear( newYear ) ) } private: bool m_batchMode; Collections::AggregateCollection *m_collection; QList<TrackEditorPtr> m_editors; }; #undef FORWARD AggregateTrack::AggregateTrack( Collections::AggregateCollection *coll, const TrackPtr &track ) : Track() , Observer() , m_collection( coll ) , m_name( track->name() ) , m_album( 0 )