void AlbumItem::update() { if( !m_album ) return; Meta::TrackList tracks = m_album->tracks(); if( !tracks.isEmpty() ) { Meta::TrackPtr first = tracks.first(); Meta::YearPtr year = first->year(); if( year ) setData( year->year(), AlbumYearRole ); } QString albumName = m_album->name(); albumName = albumName.isEmpty() ? i18n("Unknown") : albumName; QString name = ( m_showArtist && m_album->hasAlbumArtist() ) ? QString( "%1 - %2" ).arg( m_album->albumArtist()->name(), albumName ) : albumName; setData( name, NameRole ); qint64 totalTime = 0; foreach( Meta::TrackPtr item, tracks ) totalTime += item->length(); QString trackCount = i18np( "%1 track", "%1 tracks", tracks.size() ); QString lengthText = QString( "%1, %2" ).arg( trackCount, Meta::msToPrettyTime( totalTime ) ); setData( lengthText, AlbumLengthRole ); QPixmap cover = The::svgHandler()->imageWithBorder( m_album, m_iconSize, 3 ); setIcon( QIcon( cover ) ); }
void APG::ConstraintSolver::mutate_population( APG::ConstraintSolver::Population& population ) { if ( population.size() < 1 ) return; const double mutantPercentage = 0.35; // TODO: tune this parameter QList<Meta::TrackList*> parents( population.keys() ); int maxMutants = (int)( mutantPercentage * (double)(m_populationSize) ); for ( int i = parents.size(); i < maxMutants; i++ ) { int idx = KRandom::random() % parents.size(); Meta::TrackList* child = new Meta::TrackList( *(parents.at( idx )) ); int op = KRandom::random() % 5; int s = child->size(); switch (op) { case 0: child->removeAt( KRandom::random() % s ); case 1: child->insert( KRandom::random() % ( s + 1 ), random_track_from_domain() ); case 2: child->replace( KRandom::random() % s, random_track_from_domain() ); case 3: child->swap( KRandom::random() % s, KRandom::random() % s ); case 4: child = crossover( child, parents.at( KRandom::random() % parents.size() ) ); default: (void)0; // effectively a no-op. the default is here so that the compiler doesn't complain about missing default in switch } population.insert( child, m_constraintTreeRoot->satisfaction( *child ) ); } return; }
void TestM3UPlaylist::testTracks() { Meta::TrackList tracklist = m_testPlaylist->tracks(); QCOMPARE( tracklist.size(), 10 ); QCOMPARE( tracklist.at( 0 ).data()->name(), QString( "Platz 01" ) ); QCOMPARE( tracklist.at( 1 ).data()->name(), QString( "Platz 02" ) ); QCOMPARE( tracklist.at( 2 ).data()->name(), QString( "Platz 03" ) ); QCOMPARE( tracklist.at( 9 ).data()->name(), QString( "Platz 10" ) ); }
double ConstraintTypes::TagMatch::satisfaction( const Meta::TrackList& tl ) const { double satisfaction = 0.0; foreach( Meta::TrackPtr t, tl ) { if ( matches( t ) ) { satisfaction += 1.0; } } satisfaction /= ( double )tl.size(); return satisfaction; }
double ConstraintTypes::PlaylistLength::satisfaction( const Meta::TrackList& tl ) const { quint32 l = static_cast<quint32>( tl.size() ); if ( m_comparison == CompareNumEquals ) { if ( l > m_length ) return ( l == m_length ) ? 1.0 : transformLength( l - m_length ); else return ( l == m_length ) ? 1.0 : transformLength( m_length - l ); } else if ( m_comparison == CompareNumGreaterThan ) { return ( l > m_length ) ? 1.0 : transformLength( m_length - l ); } else if ( m_comparison == CompareNumLessThan ) { return ( l < m_length ) ? 1.0 : transformLength( l - m_length ); } else { return 0.0; } }
void TestPlaylistFileProvider::testSave() { Meta::TrackList tempTrackList; const KUrl trackUrl = dataPath( "data/audio/Platz 01.mp3" ); tempTrackList.append( CollectionManager::instance()->trackForUrl( trackUrl ) ); QCOMPARE( tempTrackList.size(), 1 ); QFETCH(QString, name); QFETCH(QString, result); Playlists::PlaylistPtr testPlaylist = m_testPlaylistFileProvider->save( tempTrackList, name ); QVERIFY( testPlaylist ); QVERIFY( QFile::exists( Amarok::saveLocation( "playlists" ) + result ) ); QCOMPARE( testPlaylist->name(), QString( result ) ); QCOMPARE( testPlaylist->tracks().size(), 1 ); QFile::remove( Amarok::saveLocation( "playlists" ) + result ); }
OrganizeCollectionDialog::OrganizeCollectionDialog( const Meta::TrackList &tracks, const QStringList &folders, const QString &targetExtension, QWidget *parent, const char *name, bool modal, const QString &caption, QFlags<KDialog::ButtonCode> buttonMask ) : KDialog( parent ) , ui( new Ui::OrganizeCollectionDialogBase ) , m_detailed( true ) , m_schemeModified( false ) , m_conflict( false ) { Q_UNUSED( name ) setCaption( caption ); setModal( modal ); setButtons( buttonMask ); showButtonSeparator( true ); m_targetFileExtension = targetExtension; if( tracks.size() > 0 ) m_allTracks = tracks; KVBox *mainVBox = new KVBox( this ); setMainWidget( mainVBox ); QWidget *mainContainer = new QWidget( mainVBox ); ui->setupUi( mainContainer ); m_trackOrganizer = new TrackOrganizer( m_allTracks, this ); ui->folderCombo->insertItems( 0, folders ); if( ui->folderCombo->contains( AmarokConfig::organizeDirectory() ) ) ui->folderCombo->setCurrentItem( AmarokConfig::organizeDirectory() ); else ui->folderCombo->setCurrentIndex( 0 ); //TODO possible bug: assumes folder list is not empty. ui->overwriteCheck->setChecked( AmarokConfig::overwriteFiles() ); ui->optionsWidget->setReplaceSpaces( AmarokConfig::replaceSpace() ); ui->optionsWidget->setPostfixThe( AmarokConfig::ignoreThe() ); ui->optionsWidget->setVfatCompatible( AmarokConfig::vfatCompatible() ); ui->optionsWidget->setAsciiOnly( AmarokConfig::asciiOnly() ); ui->optionsWidget->setRegexpText( AmarokConfig::replacementRegexp() ); ui->optionsWidget->setReplaceText( AmarokConfig::replacementString() ); ui->previewTableWidget->horizontalHeader()->setResizeMode( QHeaderView::ResizeToContents ); ui->conflictLabel->setText(""); QPalette p = ui->conflictLabel->palette(); KColorScheme::adjustForeground( p, KColorScheme::NegativeText ); // TODO this isn't working, the color is still normal ui->conflictLabel->setPalette( p ); ui->previewTableWidget->sortItems( 0, Qt::AscendingOrder ); // only show the options when the Options button is checked connect( ui->optionsButton, SIGNAL(toggled(bool)), ui->organizeCollectionWidget, SLOT(setVisible(bool)) ); connect( ui->optionsButton, SIGNAL(toggled(bool)), ui->optionsWidget, SLOT(setVisible(bool)) ); ui->organizeCollectionWidget->hide(); ui->optionsWidget->hide(); connect( ui->folderCombo, SIGNAL(currentIndexChanged(QString)), SLOT(slotUpdatePreview()) ); connect( ui->organizeCollectionWidget, SIGNAL(schemeChanged()), SLOT(slotUpdatePreview()) ); connect( ui->optionsWidget, SIGNAL(optionsChanged()), SLOT(slotUpdatePreview())); // to show the conflict error connect( ui->overwriteCheck, SIGNAL(stateChanged(int)), SLOT(slotOverwriteModeChanged()) ); connect( this, SIGNAL(finished(int)), ui->organizeCollectionWidget, SLOT(slotSaveFormatList()) ); connect( this, SIGNAL(accepted()), ui->organizeCollectionWidget, SLOT(onAccept()) ); connect( this, SIGNAL(accepted()), SLOT(slotDialogAccepted()) ); connect( ui->folderCombo, SIGNAL(currentIndexChanged(QString)), SLOT(slotEnableOk(QString)) ); slotEnableOk( ui->folderCombo->currentText() ); restoreDialogSize( Amarok::config( "OrganizeCollectionDialog" ) ); QTimer::singleShot( 0, this, SLOT(slotUpdatePreview()) ); }