diff options
-rw-r--r-- | libk3b/core/k3bdefaultexternalprograms.cpp | 75 | ||||
-rw-r--r-- | libk3b/core/k3bdefaultexternalprograms.h | 16 | ||||
-rw-r--r-- | libk3b/projects/audiocd/k3baudionormalizejob.cpp | 30 | ||||
-rw-r--r-- | plugins/encoder/sox/k3bsoxencoder.cpp | 171 | ||||
-rw-r--r-- | translations/desktop_files/es_AR.po | 9 |
5 files changed, 163 insertions, 138 deletions
diff --git a/libk3b/core/k3bdefaultexternalprograms.cpp b/libk3b/core/k3bdefaultexternalprograms.cpp index 4b86055..7fbace6 100644 --- a/libk3b/core/k3bdefaultexternalprograms.cpp +++ b/libk3b/core/k3bdefaultexternalprograms.cpp @@ -49,13 +49,13 @@ void K3b::addDefaultPrograms( K3bExternalBinManager* m ) void K3b::addTranscodePrograms( K3bExternalBinManager* m ) { static const char* transcodeTools[] = { "transcode", - 0, // K3b 1.0 only uses the transcode binary - "tcprobe", - "tccat", - "tcscan", - "tcextract", - "tcdecode", - 0 }; + 0, // K3b 1.0 only uses the transcode binary + "tcprobe", + "tccat", + "tcscan", + "tcextract", + "tcdecode", + 0 }; for( int i = 0; transcodeTools[i]; ++i ) m->addProgram( new K3bTranscodeProgram( transcodeTools[i] ) ); @@ -102,16 +102,16 @@ static TQString& debianWeirdnessHack( TQString& path ) f.open( IO_ReadOnly ); TQString s = TQTextStream( &f ).read(); if( s.contains( "cdrecord.mmap" ) && s.contains( "cdrecord.shm" ) ) { - kdDebug() << "(K3bCdrecordProgram) Found Debian Wrapper script." << endl; - TQString ext; - if( K3b::kernelVersion().versionString().left(3) > "2.2" ) - ext = ".mmap"; - else - ext = ".shm"; + kdDebug() << "(K3bCdrecordProgram) Found Debian Wrapper script." << endl; + TQString ext; + if( K3b::kernelVersion().versionString().left(3) > "2.2" ) + ext = ".mmap"; + else + ext = ".shm"; - kdDebug() << "(K3bCdrecordProgram) Using cdrecord" << ext << endl; + kdDebug() << "(K3bCdrecordProgram) Using cdrecord" << ext << endl; - path += ext; + path += ext; } } } @@ -214,7 +214,7 @@ bool K3bCdrecordProgram::scan( const TQString& p ) if( out.output().contains( "-tao" ) ) bin->addFeature( "tao" ); if( out.output().contains( "cuefile=" ) && - ( wodim || bin->version > K3bVersion( 2, 1, -1, "a14") ) ) // cuefile handling was still buggy in a14 + ( wodim || bin->version > K3bVersion( 2, 1, -1, "a14") ) ) // cuefile handling was still buggy in a14 bin->addFeature( "cuefile" ); // new mode 2 options since cdrecord 2.01a12 @@ -223,15 +223,15 @@ bool K3bCdrecordProgram::scan( const TQString& p ) // two checks) // and the version check does not handle versions like 2.01-dvd properly if( out.output().contains( "-xamix" ) || - bin->version >= K3bVersion( 2, 1, -1, "a12" ) || - wodim ) + bin->version >= K3bVersion( 2, 1, -1, "a12" ) || + wodim ) bin->addFeature( "xamix" ); // check if we run cdrecord as root struct stat s; if( !::stat( TQFile::encodeName(path), &s ) ) { if( (s.st_mode & S_ISUID) && s.st_uid == 0 ) - bin->addFeature( "suidroot" ); + bin->addFeature( "suidroot" ); } } else { @@ -352,7 +352,7 @@ bool K3bMkisofsProgram::scan( const TQString& p ) struct stat s; if( !::stat( TQFile::encodeName(path), &s ) ) { if( (s.st_mode & S_ISUID) && s.st_uid == 0 ) - bin->addFeature( "suidroot" ); + bin->addFeature( "suidroot" ); } } else { @@ -458,7 +458,7 @@ bool K3bReadcdProgram::scan( const TQString& p ) struct stat s; if( !::stat( TQFile::encodeName(path), &s ) ) { if( (s.st_mode & S_ISUID) && s.st_uid == 0 ) - bin->addFeature( "suidroot" ); + bin->addFeature( "suidroot" ); } } else { @@ -551,7 +551,7 @@ bool K3bCdrdaoProgram::scan( const TQString& p ) struct stat s; if( !::stat( TQFile::encodeName(path), &s ) ) { if( (s.st_mode & S_ISUID) && s.st_uid == 0 ) - bin->addFeature( "suidroot" ); + bin->addFeature( "suidroot" ); } } else { @@ -712,20 +712,41 @@ K3bNormalizeProgram::K3bNormalizeProgram() { } +TQStringList K3bNormalizeProgram::binNames() const { + TQStringList rv; + rv << "normalize-audio" << "normalize"; + return rv; +} bool K3bNormalizeProgram::scan( const TQString& p ) { if( p.isEmpty() ) return false; - TQString path = p; - TQFileInfo fi( path ); + bool found = false; + + TQFileInfo fi( p ); if( fi.isDir() ) { - if( path[path.length()-1] != '/' ) - path.append("/"); - path.append("normalize-audio"); + + for(const auto & name: binNames()) { + TQString path = p; + if( path[path.length()-1] != '/' ) + path.append("/"); + path.append(name); + + if( verifyAddBin(path) ) + found = true; + } + } else { + if( verifyAddBin(p) ) + found = true; } + return found; +} + + +bool K3bNormalizeProgram::verifyAddBin( const TQString& path ) { if( !TQFile::exists( path ) ) return false; diff --git a/libk3b/core/k3bdefaultexternalprograms.h b/libk3b/core/k3bdefaultexternalprograms.h index bc4d41c..daca769 100644 --- a/libk3b/core/k3bdefaultexternalprograms.h +++ b/libk3b/core/k3bdefaultexternalprograms.h @@ -102,6 +102,22 @@ class LIBK3B_EXPORT K3bNormalizeProgram : public K3bExternalProgram K3bNormalizeProgram(); bool scan( const TQString& ); + protected: + /** + * Returns list of names the executable of this program could be called + */ + TQStringList binNames() const; + + /** + * Verifies if binary on the given path suitable to be used by k3b and + * addBin()s it if so + */ + bool verifyAddBin( const TQString& path ); + + /** + * @note: it would make sense to make binNames() and verifyBin() virtuals in + * K3bExternalProgram and reimplement scan() in a more generic way. + */ }; diff --git a/libk3b/projects/audiocd/k3baudionormalizejob.cpp b/libk3b/projects/audiocd/k3baudionormalizejob.cpp index 85fd698..beb05fb 100644 --- a/libk3b/projects/audiocd/k3baudionormalizejob.cpp +++ b/libk3b/projects/audiocd/k3baudionormalizejob.cpp @@ -131,18 +131,18 @@ void K3bAudioNormalizeJob::slotStdLine( const TQString& line ) if( m_currentAction == ADJUSTING_LEVELS ) { emit newTask( i18n("Adjusting volume level for track %1 of %2").arg(m_currentTrack).arg(m_files.count()) ); kdDebug() << "(K3bAudioNormalizeJob) adjusting level for track " - << m_currentTrack - << " " - << m_files.at(m_currentTrack-1) - << endl; + << m_currentTrack + << " " + << m_files.at(m_currentTrack-1) + << endl; } else { emit newTask( i18n("Computing level for track %1 of %2").arg(m_currentTrack).arg(m_files.count()) ); kdDebug() << "(K3bAudioNormalizeJob) computing level for track " - << m_currentTrack - << " " - << m_files.at(m_currentTrack-1) - << endl; + << m_currentTrack + << " " + << m_files.at(m_currentTrack-1) + << endl; } m_currentTrack++; @@ -159,7 +159,7 @@ void K3bAudioNormalizeJob::slotStdLine( const TQString& line ) emit subPercent( p ); else kdDebug() << "(K3bAudioNormalizeJob) subPercent parsing error at pos " - << 19 << " in line '" << line.mid( 19, 3 ) << "'" << endl; + << 19 << " in line '" << line.mid( 19, 3 ) << "'" << endl; // batch progress starts at position 50 in version 0.7.6 p = line.mid( 50, 3 ).toInt(&ok); @@ -169,7 +169,7 @@ void K3bAudioNormalizeJob::slotStdLine( const TQString& line ) emit percent( 50 + (int)((double)p/2.0) ); else kdDebug() << "(K3bAudioNormalizeJob) percent parsing error at pos " - << 50 << " in line '" << line.mid( 50, 3 ) << "'" << endl; + << 50 << " in line '" << line.mid( 50, 3 ) << "'" << endl; } } @@ -185,13 +185,13 @@ void K3bAudioNormalizeJob::slotProcessExited( TDEProcess* p ) break; default: if( !m_canceled ) { - emit infoMessage( i18n("%1 returned an unknown error (code %2).").arg("normalize-audio").arg(p->exitStatus()), - K3bJob::ERROR ); - emit infoMessage( i18n("Please send me an email with the last output."), K3bJob::ERROR ); - emit infoMessage( i18n("Error while normalizing tracks."), ERROR ); + emit infoMessage( i18n("%1 returned an unknown error (code %2).").arg("normalize-audio").arg(p->exitStatus()), + K3bJob::ERROR ); + emit infoMessage( i18n("Please send me an email with the last output."), K3bJob::ERROR ); + emit infoMessage( i18n("Error while normalizing tracks."), ERROR ); } else - emit canceled(); + emit canceled(); jobFinished(false); break; } diff --git a/plugins/encoder/sox/k3bsoxencoder.cpp b/plugins/encoder/sox/k3bsoxencoder.cpp index 8b170f6..1cc7c3a 100644 --- a/plugins/encoder/sox/k3bsoxencoder.cpp +++ b/plugins/encoder/sox/k3bsoxencoder.cpp @@ -34,6 +34,7 @@ #include <tqcombobox.h> #include <tqcheckbox.h> #include <tqlayout.h> +#include <tqregexp.h> #include <sys/types.h> #include <sys/wait.h> @@ -58,61 +59,47 @@ class K3bSoxProgram : public K3bExternalProgram TQFileInfo fi( path ); if( fi.isDir() ) { if( path[path.length()-1] != '/' ) - path.append("/"); + path.append("/"); path.append("sox"); } if( !TQFile::exists( path ) ) return false; - K3bExternalBin* bin = 0; - // probe version TDEProcess vp; K3bProcessOutputCollector out( &vp ); vp << path << "-h"; if( vp.start( TDEProcess::Block, TDEProcess::AllOutput ) ) { - int pos = out.output().find( "sox: SoX Version" ); - if ( pos < 0 ) - pos = out.output().find( "sox: SoX v" ); // newer sox versions - int endPos = out.output().find( "\n", pos ); - if( pos > 0 && endPos > 0 ) { - pos += 17; - bin = new K3bExternalBin( this ); - bin->path = path; - bin->version = out.output().mid( pos, endPos-pos ); - - addBin( bin ); - - return true; - } - else { - pos = out.output().find( "sox: Version" ); - endPos = out.output().find( "\n", pos ); - if( pos > 0 && endPos > 0 ) { - pos += 13; - bin = new K3bExternalBin( this ); - bin->path = path; - bin->version = out.output().mid( pos, endPos-pos ); - - addBin( bin ); - - return true; + TQRegExp versionRe ("sox: +(SoX )?(Version |v)([^\\n]+)"); + // Should match: + // * sox: Version 12.2.3 + // * sox: SoX Version 12.18.1 + // * sox: SoX v14.0.0 + // * sox: SoX v14.4.0 + int pos = versionRe.search( out.output() ); + if( pos > 0 ) { + TQString version = versionRe.cap(3); + + K3bExternalBin* bin = new K3bExternalBin( this ); + + bin->path = path; + bin->version = version; + + addBin( bin ); + + return true; } - else - return false; - } } - else - return false; + return false; } }; class K3bSoxEncoder::Private { -public: + public: Private() : process(0) { } @@ -183,20 +170,20 @@ bool K3bSoxEncoder::initEncoderInternal( const TQString& extension ) d->process->setRawStdin(true); connect( d->process, TQ_SIGNAL(processExited(TDEProcess*)), - this, TQ_SLOT(slotSoxFinished(TDEProcess*)) ); + this, TQ_SLOT(slotSoxFinished(TDEProcess*)) ); connect( d->process, TQ_SIGNAL(stderrLine(const TQString&)), - this, TQ_SLOT(slotSoxOutputLine(const TQString&)) ); + this, TQ_SLOT(slotSoxOutputLine(const TQString&)) ); connect( d->process, TQ_SIGNAL(stdoutLine(const TQString&)), - this, TQ_SLOT(slotSoxOutputLine(const TQString&)) ); + this, TQ_SLOT(slotSoxOutputLine(const TQString&)) ); // input settings *d->process << soxBin->path - << "-t" << "raw" // raw samples - << "-r" << "44100" // samplerate - << "-s" // signed linear - << "-w" // 16-bit words - << "-c" << "2" // stereo - << "-"; // read from stdin + << "-t" << "raw" // raw samples + << "-r" << "44100" // samplerate + << "-s" // signed linear + << "-w" // 16-bit words + << "-c" << "2" // stereo + << "-"; // read from stdin // output settings *d->process << "-t" << extension; @@ -205,28 +192,28 @@ bool K3bSoxEncoder::initEncoderInternal( const TQString& extension ) c->setGroup( "K3bSoxEncoderPlugin" ); if( c->readBoolEntry( "manual settings", false ) ) { *d->process << "-r" << TQString::number( c->readNumEntry( "samplerate", 44100 ) ) - << "-c" << TQString::number( c->readNumEntry( "channels", 2 ) ); + << "-c" << TQString::number( c->readNumEntry( "channels", 2 ) ); int size = c->readNumEntry( "data size", 16 ); *d->process << ( size == 8 ? TQString("-b") : ( size == 32 ? TQString("-l") : TQString("-w") ) ); TQString encoding = c->readEntry( "data encoding", "signed" ); if( encoding == "unsigned" ) - *d->process << "-u"; + *d->process << "-u"; else if( encoding == "u-law" ) - *d->process << "-U"; + *d->process << "-U"; else if( encoding == "A-law" ) - *d->process << "-A"; + *d->process << "-A"; else if( encoding == "ADPCM" ) - *d->process << "-a"; + *d->process << "-a"; else if( encoding == "IMA_ADPCM" ) - *d->process << "-i"; + *d->process << "-i"; else if( encoding == "GSM" ) - *d->process << "-g"; + *d->process << "-g"; else if( encoding == "Floating-point" ) - *d->process << "-f"; + *d->process << "-f"; else - *d->process << "-s"; + *d->process << "-s"; } *d->process << d->fileName; @@ -273,24 +260,24 @@ TQStringList K3bSoxEncoder::extensions() const static TQStringList s_extensions; if( s_extensions.isEmpty() ) { s_extensions << "au" - << "8svx" - << "aiff" - << "avr" - << "cdr" - << "cvs" - << "dat" - << "gsm" - << "hcom" - << "maud" - << "sf" - << "sph" - << "smp" - << "txw" - << "vms" - << "voc" - << "wav" - << "wve" - << "raw"; + << "8svx" + << "aiff" + << "avr" + << "cdr" + << "cvs" + << "dat" + << "gsm" + << "hcom" + << "maud" + << "sf" + << "sph" + << "smp" + << "txw" + << "vms" + << "voc" + << "wav" + << "wve" + << "raw"; } if( k3bcore->externalBinManager()->foundBin( "sox" ) ) @@ -348,24 +335,24 @@ TQString K3bSoxEncoder::fileTypeComment( const TQString& ext ) const long long K3bSoxEncoder::fileSize( const TQString&, const K3b::Msf& msf ) const { // for now we make a rough assumption based on the settings - TDEConfig* c = k3bcore->config(); - c->setGroup( "K3bSoxEncoderPlugin" ); - if( c->readBoolEntry( "manual settings", false ) ) { - int sr = c->readNumEntry( "samplerate", 44100 ); - int ch = c->readNumEntry( "channels", 2 ); - int wsize = c->readNumEntry( "data size", 16 ); + TDEConfig* c = k3bcore->config(); + c->setGroup( "K3bSoxEncoderPlugin" ); + if( c->readBoolEntry( "manual settings", false ) ) { + int sr = c->readNumEntry( "samplerate", 44100 ); + int ch = c->readNumEntry( "channels", 2 ); + int wsize = c->readNumEntry( "data size", 16 ); - return msf.totalFrames()*sr*ch*wsize/75; - } - else { - // fallback to raw - return msf.audioBytes(); - } + return msf.totalFrames()*sr*ch*wsize/75; + } + else { + // fallback to raw + return msf.audioBytes(); + } } K3bPluginConfigWidget* K3bSoxEncoder::createConfigWidget( TQWidget* parent, - const char* name ) const + const char* name ) const { return new K3bSoxEncoderSettingsWidget( parent, name ); } @@ -435,16 +422,16 @@ void K3bSoxEncoderSettingsWidget::saveConfig() c->writeEntry( "manual settings", w->m_checkManual->isChecked() ); c->writeEntry( "channels", w->m_comboChannels->currentItem() == 0 - ? 1 - : ( w->m_comboChannels->currentItem() == 2 - ? 4 - : 2 ) ); + ? 1 + : ( w->m_comboChannels->currentItem() == 2 + ? 4 + : 2 ) ); c->writeEntry( "data size", w->m_comboSize->currentItem() == 0 - ? 8 - : ( w->m_comboSize->currentItem() == 2 - ? 32 - : 16 ) ); + ? 8 + : ( w->m_comboSize->currentItem() == 2 + ? 32 + : 16 ) ); c->writeEntry( "samplerate", w->m_editSamplerate->text().toInt() ); diff --git a/translations/desktop_files/es_AR.po b/translations/desktop_files/es_AR.po index adbcc33..7a9a6ca 100644 --- a/translations/desktop_files/es_AR.po +++ b/translations/desktop_files/es_AR.po @@ -2,13 +2,14 @@ # This file is put in the public domain. # Slávek Banko <slavek.banko@axis.cz>, 2025. # Máximo Vega <veegamaxi@gmail.com>, 2025. +# Alejo Fernández <alejofernandez@hotmail.com.ar>, 2025. msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-08-31 18:33+0000\n" -"PO-Revision-Date: 2025-06-24 16:59+0000\n" -"Last-Translator: Máximo Vega <veegamaxi@gmail.com>\n" +"PO-Revision-Date: 2025-07-07 06:59+0000\n" +"Last-Translator: Alejo Fernández <alejofernandez@hotmail.com.ar>\n" "Language-Team: Spanish (Argentina) <https://mirror.git.trinitydesktop.org/" "weblate/projects/applications/k3b-desktop-files/es_AR/>\n" "Language: es_AR\n" @@ -104,12 +105,12 @@ msgstr "Un tema semitransparente que utiliza el color de tu sistema. " #. Comment #: src/pics/crystal/k3b.theme:4 msgid "The cool crystal theme" -msgstr "El tema cristalino cool" +msgstr "El tema cristalino copado" #. Comment #: src/pics/quant/k3b.theme:4 msgid "New official theme for K3b. Enjoy! " -msgstr "Nuevo tema oficial por K3b. Disfrutá! " +msgstr "Nuevo tema oficial por K3b, ¡Disfrutá! " #. Name #: plugins/audiooutput/alsa/k3balsaoutputplugin.plugin:2 |