inline void TagDialog::nextTrack() { if( m_playlistItem ) { if( !m_playlistItem->itemBelow() ) return; storeTags(); m_playlistItem = static_cast<PlaylistItem *>( m_playlistItem->itemBelow() ); loadTags( m_playlistItem->url() ); } else { storeTags( *m_currentURL ); KURL::List::iterator next = m_currentURL; ++next; if( next != m_urlList.end() ) ++m_currentURL; loadTags( *m_currentURL ); enableItems(); } readTags(); }
void TagDialog::saveTags() { if( !m_perTrack ) { applyToAllTracks(); } else { storeTags(); } QMap<QString, MetaBundle>::ConstIterator endStore( storedTags.end() ); for(QMap<QString, MetaBundle>::ConstIterator it = storedTags.begin(); it != endStore; ++it ) { if( writeTag( it.data(), it == --storedTags.end() ) ) //update the collection browser if it's the last track Playlist::instance()->updateMetaData( it.data() ); else amaroK::StatusBar::instance()->longMessage( i18n( "Sorry, the tag for %1 could not be changed." ).arg( it.data().prettyURL() ), KDE::StatusBar::Error ); } QMap<QString, int>::ConstIterator endScore( storedScores.end() ); for(QMap<QString, int>::ConstIterator it = storedScores.begin(); it != endScore; ++it ) { CollectionDB::instance()->setSongPercentage( it.key(), it.data() ); } QMap<QString, int>::ConstIterator endRating( storedRatings.end() ); for(QMap<QString, int>::ConstIterator it = storedRatings.begin(); it != endRating; ++it ) { CollectionDB::instance()->setSongRating( it.key(), it.data() ); } QMap<QString, QString>::ConstIterator endLyrics( storedLyrics.end() ); for(QMap<QString, QString>::ConstIterator it = storedLyrics.begin(); it != endLyrics; ++it ) { CollectionDB::instance()->setLyrics( it.key(), it.data() ); emit lyricsChanged( it.key() ); } }
// (ctags-store (string|file-name)) -> nil/t base::cell_t ctags_store(base::lisp &gl, base::cell_t c, base::cells_t &ret) { if (base::lisp::validate(c, base::cell::list(1), base::cell::typeString)) { const auto &fileName = c + 1; if (storeTags(fileName->s)) return gl.t(); return gl.nil(); } gl.signalError("ctags-save: invalid arguments, expected (string)"); return gl.nil(); }
inline void TagDialog::previousTrack() { if( m_playlistItem ) { if( !m_playlistItem->itemAbove() ) return; storeTags(); m_playlistItem = static_cast<PlaylistItem *>( m_playlistItem->itemAbove() ); loadTags( m_playlistItem->url() ); } else { storeTags( *m_currentURL ); if( m_currentURL != m_urlList.begin() ) --m_currentURL; loadTags( *m_currentURL ); enableItems(); } readTags(); }
inline void TagDialog::perTrack() { m_perTrack = !m_perTrack; if( m_perTrack ) { // just switched to per track mode applyToAllTracks(); setSingleTrackMode(); loadTags( *m_currentURL ); readTags(); } else { storeTags( *m_currentURL ); setMultipleTracksMode(); readMultipleTracks(); } enableItems(); }
void TagDialog::storeTags() { storeTags( m_bundle.url() ); }
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 ); } }