OSDN Git Service

Improved the WaveDecoder to do proper progress reporting.
authorLoRd_MuldeR <mulder2@gmx.de>
Sun, 22 Mar 2015 20:33:15 +0000 (21:33 +0100)
committerLoRd_MuldeR <mulder2@gmx.de>
Sun, 22 Mar 2015 20:33:15 +0000 (21:33 +0100)
src/Config.h
src/Decoder_Wave.cpp
src/Decoder_Wave.h

index 9bc38d6..78af76e 100644 (file)
@@ -35,7 +35,7 @@
 #define VER_LAMEXP_MINOR_LO                                    1
 #define VER_LAMEXP_TYPE                                                RC
 #define VER_LAMEXP_PATCH                                       3
-#define VER_LAMEXP_BUILD                                       1688
+#define VER_LAMEXP_BUILD                                       1689
 #define VER_LAMEXP_CONFG                                       1558
 
 ///////////////////////////////////////////////////////////////////////////////
index e9e8f4e..1a61c71 100644 (file)
 //Qt
 #include <QDir>
 
+//Type
+typedef struct _ProgressData
+{
+       WaveDecoder   *const instance;
+       volatile bool *const abrtFlag;
+}
+ProgressData;
+
 WaveDecoder::WaveDecoder(void)
 {
 }
@@ -41,9 +49,11 @@ WaveDecoder::~WaveDecoder(void)
 bool WaveDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
 {
        emit messageLogged(QString("Copy file \"%1\" to \"%2\"").arg(QDir::toNativeSeparators(sourceFile), QDir::toNativeSeparators(outputFile)));
-
        emit statusUpdated(0);
-       const bool okay = MUtils::OS::copy_file(sourceFile, outputFile);
+
+       ProgressData progressData = { this, abortFlag };
+       const bool okay = MUtils::OS::copy_file(sourceFile, outputFile, true, progressHandler, &progressData);
+       
        emit statusUpdated(100);
 
        if(okay)
@@ -75,3 +85,19 @@ QStringList WaveDecoder::supportedTypes(void)
 {
        return QStringList() << "Waveform Audio File (*.wav)";
 }
+
+bool WaveDecoder::progressHandler(const double &progress, void *const data)
+{
+       if(data)
+       {
+               //qWarning("Copy progress: %.2f", progress);
+               reinterpret_cast<ProgressData*>(data)->instance->updateProgress(progress);
+               return (!(*reinterpret_cast<ProgressData*>(data)->abrtFlag));
+       }
+       return true;
+}
+
+void WaveDecoder::updateProgress(const double &progress)
+{
+       emit statusUpdated(qBound(0, qRound(progress * 100.0), 100));
+}
index d283e06..cb0105c 100644 (file)
@@ -31,6 +31,10 @@ public:
        ~WaveDecoder(void);
 
        virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+       
        static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
        static QStringList supportedTypes(void);
+
+       static bool progressHandler(const double &progress, void *const data);
+       void updateProgress(const double &progress);
 };