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 }