1
2 #include "flakecodecglobal.h"
3
4 #include "soundkonverter_codec_flake.h"
5 #include "../../core/conversionoptions.h"
6 #include "flakecodecwidget.h"
7
8
soundkonverter_codec_flake(QObject * parent,const QVariantList & args)9 soundkonverter_codec_flake::soundkonverter_codec_flake( QObject *parent, const QVariantList& args )
10 : CodecPlugin( parent )
11 {
12 Q_UNUSED(args)
13
14 binaries["flake"] = "";
15
16 allCodecs += "flac";
17 allCodecs += "wav";
18 }
19
~soundkonverter_codec_flake()20 soundkonverter_codec_flake::~soundkonverter_codec_flake()
21 {}
22
name() const23 QString soundkonverter_codec_flake::name() const
24 {
25 return global_plugin_name;
26 }
27
codecTable()28 QList<ConversionPipeTrunk> soundkonverter_codec_flake::codecTable()
29 {
30 QList<ConversionPipeTrunk> table;
31 ConversionPipeTrunk newTrunk;
32
33 newTrunk.codecFrom = "wav";
34 newTrunk.codecTo = "flac";
35 newTrunk.rating = 100;
36 newTrunk.enabled = ( binaries["flake"] != "" );
37 newTrunk.problemInfo = standardMessage( "encode_codec,backend", "flac", "flake" ) + "\n" + standardMessage( "install_website_backend,url", "flake", "http://flake-enc.sourceforge.net" );
38 newTrunk.data.hasInternalReplayGain = false;
39 table.append( newTrunk );
40
41 return table;
42 }
43
isConfigSupported(ActionType action,const QString & codecName)44 bool soundkonverter_codec_flake::isConfigSupported( ActionType action, const QString& codecName )
45 {
46 Q_UNUSED(action)
47 Q_UNUSED(codecName)
48
49 return false;
50 }
51
showConfigDialog(ActionType action,const QString & codecName,QWidget * parent)52 void soundkonverter_codec_flake::showConfigDialog( ActionType action, const QString& codecName, QWidget *parent )
53 {
54 Q_UNUSED(action)
55 Q_UNUSED(codecName)
56 Q_UNUSED(parent)
57 }
58
hasInfo()59 bool soundkonverter_codec_flake::hasInfo()
60 {
61 return false;
62 }
63
showInfo(QWidget * parent)64 void soundkonverter_codec_flake::showInfo( QWidget *parent )
65 {
66 Q_UNUSED(parent)
67 // info.description = i18n("Flake is an alternative flac encoder.\nFor more information see: http://flake-enc.sourceforge.net");
68 }
69
newCodecWidget()70 CodecWidget *soundkonverter_codec_flake::newCodecWidget()
71 {
72 FlakeCodecWidget *widget = new FlakeCodecWidget();
73 return qobject_cast<CodecWidget*>(widget);
74 }
75
convert(const KUrl & inputFile,const KUrl & outputFile,const QString & inputCodec,const QString & outputCodec,const ConversionOptions * _conversionOptions,TagData * tags,bool replayGain)76 int soundkonverter_codec_flake::convert( const KUrl& inputFile, const KUrl& outputFile, const QString& inputCodec, const QString& outputCodec, const ConversionOptions *_conversionOptions, TagData *tags, bool replayGain )
77 {
78 QStringList command = convertCommand( inputFile, outputFile, inputCodec, outputCodec, _conversionOptions, tags, replayGain );
79 if( command.isEmpty() )
80 return BackendPlugin::UnknownError;
81
82 CodecPluginItem *newItem = new CodecPluginItem( this );
83 newItem->id = lastId++;
84 newItem->process = new KProcess( newItem );
85 newItem->process->setOutputChannelMode( KProcess::MergedChannels );
86 connect( newItem->process, SIGNAL(readyRead()), this, SLOT(processOutput()) );
87 connect( newItem->process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(processExit(int,QProcess::ExitStatus)) );
88
89 newItem->process->clearProgram();
90 newItem->process->setShellCommand( command.join(" ") );
91 newItem->process->start();
92
93 logCommand( newItem->id, command.join(" ") );
94
95 backendItems.append( newItem );
96 return newItem->id;
97 }
98
convertCommand(const KUrl & inputFile,const KUrl & outputFile,const QString & inputCodec,const QString & outputCodec,const ConversionOptions * _conversionOptions,TagData * tags,bool replayGain)99 QStringList soundkonverter_codec_flake::convertCommand( const KUrl& inputFile, const KUrl& outputFile, const QString& inputCodec, const QString& outputCodec, const ConversionOptions *_conversionOptions, TagData *tags, bool replayGain )
100 {
101 Q_UNUSED(inputCodec)
102 Q_UNUSED(tags)
103 Q_UNUSED(replayGain)
104
105 if( !_conversionOptions )
106 return QStringList();
107
108 QStringList command;
109 const ConversionOptions *conversionOptions = _conversionOptions;
110
111 if( outputCodec == "flac" )
112 {
113 command += binaries["flake"];
114 if( conversionOptions->pluginName == global_plugin_name )
115 {
116 command += "-"+QString::number((int)conversionOptions->compressionLevel);
117 command += conversionOptions->cmdArguments;
118 }
119 command += "\"" + escapeUrl(inputFile) + "\"";
120 command += "-o";
121 command += "\"" + escapeUrl(outputFile) + "\"";
122 }
123
124 return command;
125 }
126
parseOutput(const QString & output)127 float soundkonverter_codec_flake::parseOutput( const QString& output )
128 {
129 // progress: 6% | ratio: 0.556 | bitrate: 784.4 kbps
130
131 QRegExp regEnc("progress:\\s+(\\d+)%");
132 if( output.contains(regEnc) )
133 {
134 return (float)regEnc.cap(1).toInt();
135 }
136
137 return -1;
138 }
139
140 K_PLUGIN_FACTORY(codec_flake, registerPlugin<soundkonverter_codec_flake>();)
141
142 #include "soundkonverter_codec_flake.moc"
143