summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libk3b/core/k3bdefaultexternalprograms.cpp75
-rw-r--r--libk3b/core/k3bdefaultexternalprograms.h16
-rw-r--r--libk3b/projects/audiocd/k3baudionormalizejob.cpp30
-rw-r--r--plugins/encoder/sox/k3bsoxencoder.cpp171
-rw-r--r--translations/desktop_files/es_AR.po9
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