File indexing completed on 2024-05-19 04:52:39
0001 /* 0002 SPDX-FileCopyrightText: 2003-2009 Sebastian Trueg <trueg@k3b.org> 0003 SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 #include "k3bexternalencodercommand.h" 0008 0009 #include <config-k3b.h> 0010 0011 #include "k3bcore.h" 0012 0013 #include <KConfig> 0014 #include <KConfigGroup> 0015 #include <KSharedConfig> 0016 0017 #include <QSet> 0018 #include <QStandardPaths> 0019 0020 0021 QList<K3bExternalEncoderCommand> K3bExternalEncoderCommand::defaultCommands() 0022 { 0023 QList<K3bExternalEncoderCommand> commands; 0024 0025 // check if the lame encoding plugin has been compiled 0026 #ifndef HAVE_LAME 0027 if( !QStandardPaths::findExecutable( "lame" ).isEmpty() ) { 0028 K3bExternalEncoderCommand lameCmd; 0029 lameCmd.name = "Mp3 (Lame)"; 0030 lameCmd.extension = "mp3"; 0031 lameCmd.command = "lame " 0032 "-r " 0033 "--bitwidth 16 " 0034 "--little-endian " 0035 "-s 44.1 " 0036 "-h " 0037 "--tt %t " 0038 "--ta %a " 0039 "--tl %m " 0040 "--ty %y " 0041 "--tc %c " 0042 "--tn %n " 0043 "- %f"; 0044 0045 commands.append( lameCmd ); 0046 } 0047 #endif 0048 0049 if( !QStandardPaths::findExecutable( "flac" ).isEmpty() ) { 0050 K3bExternalEncoderCommand flacCmd; 0051 flacCmd.name = "Flac"; 0052 flacCmd.extension = "flac"; 0053 flacCmd.command = "flac " 0054 "-V " 0055 "-o %f " 0056 "--force-raw-format " 0057 "--endian=little " 0058 "--channels=2 " 0059 "--sample-rate=44100 " 0060 "--sign=signed " 0061 "--bps=16 " 0062 "-T ARTIST=%a " 0063 "-T TITLE=%t " 0064 "-T TRACKNUMBER=%n " 0065 "-T DATE=%y " 0066 "-T ALBUM=%m " 0067 "-"; 0068 0069 commands.append( flacCmd ); 0070 } 0071 0072 if( !QStandardPaths::findExecutable( "mppenc" ).isEmpty() ) { 0073 K3bExternalEncoderCommand mppCmd; 0074 mppCmd.name = "Musepack"; 0075 mppCmd.extension = "mpc"; 0076 mppCmd.command = "mppenc " 0077 "--standard " 0078 "--overwrite " 0079 "--silent " 0080 "--artist %a " 0081 "--title %t " 0082 "--track %n " 0083 "--album %m " 0084 "--comment %c " 0085 "--year %y " 0086 "- " 0087 "%f"; 0088 mppCmd.writeWaveHeader = true; 0089 0090 commands.append( mppCmd ); 0091 } 0092 0093 return commands; 0094 } 0095 0096 QList<K3bExternalEncoderCommand> K3bExternalEncoderCommand::readCommands() 0097 { 0098 KSharedConfig::Ptr c = KSharedConfig::openConfig(); 0099 c->reparseConfiguration(); 0100 KConfigGroup grp(c, QStringLiteral("K3bExternalEncoderPlugin") ); 0101 0102 QList<K3bExternalEncoderCommand> commands; 0103 QSet<QString> commandNames; 0104 0105 QStringList cmds = grp.readEntry( "commands",QStringList() ); 0106 for( QStringList::iterator it = cmds.begin(); it != cmds.end(); ++it ) { 0107 QStringList cmdString = grp.readEntry( "command_" + *it,QStringList() ); 0108 K3bExternalEncoderCommand cmd; 0109 cmd.name = cmdString[0]; 0110 cmd.extension = cmdString[1]; 0111 cmd.command = cmdString[2]; 0112 for( int i = 3; i < cmdString.count(); ++i ) { 0113 if( cmdString[i] == "swap" ) 0114 cmd.swapByteOrder = true; 0115 else if( cmdString[i] == "wave" ) 0116 cmd.writeWaveHeader = true; 0117 } 0118 0119 commands.append( cmd ); 0120 commandNames.insert( cmd.name ); 0121 } 0122 0123 // some defaults 0124 QList<K3bExternalEncoderCommand> defaults = defaultCommands(); 0125 Q_FOREACH( const K3bExternalEncoderCommand& command, defaults ) 0126 { 0127 if ( !commandNames.contains( command.name ) ) { 0128 commands.append( command ); 0129 commandNames.insert( command.name ); 0130 } 0131 } 0132 0133 return commands; 0134 } 0135 0136 0137 void K3bExternalEncoderCommand::saveCommands( const QList<K3bExternalEncoderCommand>& cmds ) 0138 { 0139 KSharedConfig::Ptr c = KSharedConfig::openConfig(); 0140 c->reparseConfiguration(); 0141 c->deleteGroup( QStringLiteral("K3bExternalEncoderPlugin") ); 0142 KConfigGroup grp(c, QStringLiteral("K3bExternalEncoderPlugin") ); 0143 0144 QStringList cmdNames; 0145 0146 foreach( const K3bExternalEncoderCommand& cmd, cmds ) { 0147 cmdNames << cmd.name; 0148 0149 QStringList cmdArgs; 0150 cmdArgs << cmd.name << cmd.extension << cmd.command; 0151 if( cmd.swapByteOrder ) 0152 cmdArgs << "swap"; 0153 if( cmd.writeWaveHeader ) 0154 cmdArgs << "wave"; 0155 grp.writeEntry( "command_" + cmd.name, cmdArgs ); 0156 } 0157 grp.writeEntry( "commands", cmdNames ); 0158 }