You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
6.6 KiB
218 lines
6.6 KiB
#include "amarok.h"
|
|
#include "collectionbrowser.h"
|
|
#include "collectiondb.h"
|
|
#include "qstringx.h"
|
|
|
|
|
|
TQString OrganizeCollectionDialog::buildDestination( const TQString &format, const MetaBundle &mb )
|
|
{
|
|
bool isCompilation = false;
|
|
if( !mb.album().isEmpty() )
|
|
{
|
|
const int albumId = CollectionDB::instance()->albumID( mb.album() );
|
|
isCompilation = CollectionDB::instance()->albumIsCompilation( TQString::number(albumId) );
|
|
}
|
|
|
|
TQMap<TQString, TQString> args;
|
|
TQString artist = mb.artist();
|
|
TQString albumartist = artist;
|
|
if( isCompilation )
|
|
albumartist = i18n( "Various Artists" );
|
|
args["theartist"] = cleanPath( artist );
|
|
args["thealbumartist"] = cleanPath( albumartist );
|
|
if( ignoreTheCheck->isChecked() && artist.startsWith( "The " ) )
|
|
CollectionView::instance()->manipulateThe( artist, true );
|
|
artist = cleanPath( artist );
|
|
if( ignoreTheCheck->isChecked() && albumartist.startsWith( "The " ) )
|
|
CollectionView::instance()->manipulateThe( albumartist, true );
|
|
albumartist = cleanPath( albumartist );
|
|
for( int i = 0; i < MetaBundle::NUM_COLUMNS; i++ )
|
|
{
|
|
if( i == MetaBundle::Score || i == MetaBundle::PlayCount
|
|
|| i == MetaBundle::LastPlayed || i == MetaBundle::Mood )
|
|
continue;
|
|
args[mb.exactColumnName( i ).lower()] = cleanPath( mb.prettyText( i ) );
|
|
}
|
|
args["artist"] = artist;
|
|
args["albumartist"] = albumartist;
|
|
args["folder"] = folderCombo->currentText();
|
|
args["initial"] = albumartist.mid( 0, 1 ).upper();
|
|
args["filetype"] = mb.url().path().section( ".", -1 ).lower();
|
|
TQString track;
|
|
if ( mb.track() )
|
|
track.sprintf( "%02d", mb.track() );
|
|
args["track"] = track;
|
|
|
|
Amarok::QStringx formatx( format );
|
|
TQString result = formatx.namedOptArgs( args );
|
|
if( result.startsWith( folderCombo->currentText() ) )
|
|
{
|
|
TQString tail = result.mid( folderCombo->currentText().length() );
|
|
if( !tail.startsWith( "/" ) )
|
|
tail.prepend( "/" );
|
|
return folderCombo->currentText() + tail.replace( TQRegExp( "/\\.*" ), "/" );
|
|
}
|
|
return result.replace( TQRegExp( "/\\.*" ), "/" );
|
|
}
|
|
|
|
TQString OrganizeCollectionDialog::buildFormatTip()
|
|
{
|
|
TQMap<TQString, TQString> args;
|
|
for( int i = 0; i < MetaBundle::NUM_COLUMNS; i++ )
|
|
{
|
|
if( i == MetaBundle::Score || i == MetaBundle::PlayCount
|
|
|| i == MetaBundle::LastPlayed || i == MetaBundle::Mood )
|
|
continue;
|
|
args[MetaBundle::exactColumnName( i ).lower()] = MetaBundle::prettyColumnName( i );
|
|
}
|
|
args["albumartist"] = i18n( "%1 or %2" ).arg( i18n("This feature only works with \"The\", so either don't translate it at all, or only translate artist and album", "Album Artist, The") , i18n("The Album Artist") );
|
|
args["thealbumartist"] = i18n( "The Album Artist" );
|
|
args["theartist"] = i18n( "The Artist" );
|
|
args["artist"] = i18n( "%1 or %2" ).arg( i18n( "This feature only works with \"The\", so either don't translate it at all, or only translate Artist", "Artist, The") , i18n( "The Artist") );
|
|
args["folder"] = i18n( "Collection Base Folder" );
|
|
args["initial"] = i18n( "Artist's Initial" );
|
|
args["filetype"] = i18n( "File Extension of Source" );
|
|
args["track"] = i18n( "Track Number" );
|
|
|
|
TQString tooltip = i18n( "<h3>Custom Format String</h3>" );
|
|
tooltip += i18n( "You can use the following tokens:" );
|
|
tooltip += "<ul>";
|
|
for( TQMap<TQString, TQString>::iterator it = args.begin();
|
|
it != args.end();
|
|
++it )
|
|
{
|
|
tooltip += TQString( "<li>%1 - %2" ).arg( it.data(), "%" + it.key() );
|
|
}
|
|
tooltip += "</ul>";
|
|
|
|
tooltip += i18n( "If you surround sections of text that contain a token with curly-braces, "
|
|
"that section will be hidden if the token is empty." );
|
|
|
|
return tooltip;
|
|
}
|
|
|
|
|
|
TQString OrganizeCollectionDialog::buildFormatString()
|
|
{
|
|
TQString format = "%folder/";
|
|
if( filetypeCheck->isChecked() )
|
|
format += "%filetype/";
|
|
if( initialCheck->isChecked() )
|
|
format += "%initial/";
|
|
|
|
format += "%albumartist/";
|
|
if( spaceCheck->isChecked() )
|
|
{
|
|
format += "%album{_(Disc_%discnumber)}/";
|
|
format += "{%track_-_}%title.%filetype";
|
|
}
|
|
else
|
|
{
|
|
format += "%album{ (Disc %discnumber)}/";
|
|
format += "{%track - }%title.%filetype";
|
|
}
|
|
|
|
if( customschemeCheck->isChecked() )
|
|
format = formatEdit->text();
|
|
|
|
return format;
|
|
}
|
|
|
|
|
|
void OrganizeCollectionDialog::setPreviewBundle( const MetaBundle &bundle )
|
|
{
|
|
previewBundle = bundle;
|
|
}
|
|
|
|
|
|
void OrganizeCollectionDialog::preview( const TQString &format )
|
|
{
|
|
emit updatePreview( buildDestination( format, previewBundle ) );
|
|
}
|
|
|
|
|
|
TQString OrganizeCollectionDialog::cleanPath( const TQString &component )
|
|
{
|
|
TQString result = component;
|
|
|
|
if( asciiCheck->isChecked() )
|
|
{
|
|
result = Amarok::cleanPath( result );
|
|
result = Amarok::asciiPath( result );
|
|
}
|
|
|
|
if( !regexpEdit->text().isEmpty() )
|
|
result.replace( TQRegExp( regexpEdit->text() ), replaceEdit->text() );
|
|
|
|
result.simplifyWhiteSpace();
|
|
if( spaceCheck->isChecked() )
|
|
result.replace( TQRegExp( "\\s" ), "_" );
|
|
if( vfatCheck->isChecked() )
|
|
result = Amarok::vfatPath( result );
|
|
|
|
result.replace( "/", "-" );
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
void OrganizeCollectionDialog::update( int dummy )
|
|
{
|
|
Q_UNUSED( dummy );
|
|
|
|
TQString oldFormat = formatEdit->text();
|
|
if( !customschemeCheck->isChecked() )
|
|
formatEdit->setText( buildFormatString() );
|
|
|
|
if( customschemeCheck->isChecked() || oldFormat==formatEdit->text() )
|
|
emit updatePreview( buildDestination( formatEdit->text(), previewBundle ) );
|
|
}
|
|
|
|
|
|
void OrganizeCollectionDialog::update( const TQString & dummy )
|
|
{
|
|
Q_UNUSED( dummy );
|
|
|
|
update( 0 );
|
|
}
|
|
|
|
|
|
|
|
void OrganizeCollectionDialog::slotDetails()
|
|
{
|
|
detailed = !detailed;
|
|
|
|
if( detailed )
|
|
{
|
|
ignoreTheCheck->show();
|
|
customschemeCheck->show();
|
|
replacementGroup->show();
|
|
formatLabel->show();
|
|
formatEdit->show();
|
|
formatHelp->show();
|
|
}
|
|
else
|
|
{
|
|
ignoreTheCheck->hide();
|
|
customschemeCheck->hide();
|
|
replacementGroup->hide();
|
|
formatLabel->hide();
|
|
formatEdit->hide();
|
|
formatHelp->hide();
|
|
}
|
|
|
|
if( dynamic_cast<TQWidget *>(parent()) ) {
|
|
TQT_TQWIDGET(parent())->adjustSize();
|
|
TQT_TQWIDGET(parent())->updateGeometry();
|
|
}
|
|
}
|
|
|
|
|
|
void OrganizeCollectionDialog::init()
|
|
{
|
|
detailed = true;
|
|
|
|
formatHelp->setText( TQString( "<a href='whatsthis:%1'>%2</a>" ).
|
|
arg( Amarok::escapeHTMLAttr( buildFormatTip() ), i18n( "(Help)" ) ) );
|
|
}
|