bool MetaBundle::operator==( const MetaBundle& bundle ) { return m_artist == bundle.artist() && m_title == bundle.title() && m_album == bundle.album() && m_year == bundle.year() && m_comment == bundle.comment() && m_genre == bundle.genre() && m_track == bundle.track() && m_bitrate == bundle.bitrate() && m_sampleRate == bundle.sampleRate(); }
void TagDialog::readMultipleTracks() { //Check which fields are the same for all selected tracks const KURL::List::ConstIterator end = m_urlList.end(); KURL::List::ConstIterator it = m_urlList.begin(); m_bundle = MetaBundle(); MetaBundle first = bundleForURL( *it ); uint scoreFirst = CollectionDB::instance()->getSongPercentage( first.url().path() ); bool artist=true, album=true, genre=true, comment=true, year=true, score=true, composer=true, discNumber=true; for ( ; it != end; ++it ) { MetaBundle mb = bundleForURL( *it ); if( !mb.url().isLocalFile() ) { // If we have a non local file, don't even lose more time comparing, just leave artist = album = genre = comment = year = score = composer = discNumber = false; break; } if ( artist && mb.artist()!=first.artist() ) { artist=false; }; if ( album && mb.album()!=first.album() ) { album=false; }; if ( genre && mb.genre()!=first.genre() ) { genre=false; }; if ( comment && mb.comment()!=first.comment() ) { comment=false; }; if ( year && mb.year()!=first.year() ) { year=false; }; if ( composer && mb.composer()!=first.composer() ) { composer=false; }; if ( discNumber && mb.discNumber()!=first.discNumber() ) { discNumber=false; }; uint scoreCurrent = CollectionDB::instance()->getSongPercentage( mb.url().path() ); if ( score && scoreFirst != scoreCurrent ) score = false; if (!artist && !album && !genre && !comment && !year && !score && !composer && !discNumber) break; } // Set them in the dialog and in m_bundle ( so we don't break hasChanged() ) if (artist) { m_bundle.setArtist( first.artist() ); kComboBox_artist->setCurrentText( first.artist() ); } if (album) { m_bundle.setAlbum( first.album() ); kComboBox_album->setCurrentText( first.album() ); } if (genre) { m_bundle.setGenre( first.genre() ); kComboBox_genre->setCurrentText( first.genre() ); } if (comment) { m_bundle.setComment( first.comment() ); kTextEdit_comment->setText( first.comment() ); } if (composer) { m_bundle.setComposer( first.composer() ); kComboBox_composer->setCurrentText( first.composer() ); } if (year) { m_bundle.setYear( first.year() ); kIntSpinBox_year->setValue( first.year() ); } if (discNumber) { m_bundle.setDiscNumber( first.discNumber() ); kIntSpinBox_discNumber->setValue( first.discNumber() ); } if (score) { m_score = scoreFirst; kIntSpinBox_score->setValue( scoreFirst ); } m_currentURL = m_urlList.begin(); }
void TagDialog::applyToAllTracks() { const KURL::List::ConstIterator end = m_urlList.end(); for ( KURL::List::ConstIterator it = m_urlList.begin(); it != end; ++it ) { /* we have to update the values if they changed, so: 1) !kLineEdit_field->text().isEmpty() && kLineEdit_field->text() != mb.field i.e.: The user wrote something on the field, and it's different from what we have in the tag. 2) !m_bundle.field().isEmpty() && kLineEdit_field->text().isEmpty() i.e.: The user was shown some value for the field (it was the same for all selected tracks), and he deliberately emptied it. TODO: All this mess is because the dialog uses "" to represent what the user doesn't want to change, maybe we can think of something better? */ MetaBundle mb = bundleForURL( *it ); int changed = 0; if( !kComboBox_artist->currentText().isEmpty() && kComboBox_artist->currentText() != mb.artist() || kComboBox_artist->currentText().isEmpty() && !m_bundle.artist().isEmpty() ) { mb.setArtist( kComboBox_artist->currentText() ); changed |= TagDialog::TAGSCHANGED; } if( !kComboBox_album->currentText().isEmpty() && kComboBox_album->currentText() != mb.album() || kComboBox_album->currentText().isEmpty() && !m_bundle.album().isEmpty() ) { mb.setAlbum( kComboBox_album->currentText() ); changed |= TagDialog::TAGSCHANGED; } if( !kComboBox_genre->currentText().isEmpty() && kComboBox_genre->currentText() != mb.genre() || kComboBox_genre->currentText().isEmpty() && !m_bundle.genre().isEmpty() ) { mb.setGenre( kComboBox_genre->currentText() ); changed |= TagDialog::TAGSCHANGED; } if( !kTextEdit_comment->text().isEmpty() && kTextEdit_comment->text() != mb.comment() || kTextEdit_comment->text().isEmpty() && !m_bundle.comment().isEmpty() ) { mb.setComment( kTextEdit_comment->text() ); changed |= TagDialog::TAGSCHANGED; } if( !kComboBox_composer->currentText().isEmpty() && kComboBox_composer->currentText() != mb.composer() || kComboBox_composer->currentText().isEmpty() && !m_bundle.composer().isEmpty() ) { mb.setComposer( kComboBox_composer->currentText() ); changed |= TagDialog::TAGSCHANGED; } if( kIntSpinBox_year->value() && kIntSpinBox_year->value() != mb.year() || !kIntSpinBox_year->value() && m_bundle.year() ) { mb.setYear( kIntSpinBox_year->value() ); changed |= TagDialog::TAGSCHANGED; } if( kIntSpinBox_discNumber->value() && kIntSpinBox_discNumber->value() != mb.discNumber() || !kIntSpinBox_discNumber->value() && m_bundle.discNumber() ) { mb.setDiscNumber( kIntSpinBox_discNumber->value() ); changed |= TagDialog::TAGSCHANGED; } if( kIntSpinBox_score->value() && kIntSpinBox_score->value() != m_score || !kIntSpinBox_score->value() && m_score ) { m_score = kIntSpinBox_score->value(); changed |= TagDialog::SCORECHANGED; } storeTags( *it, changed, mb, m_score ); } }