Skip to content

Commit

Permalink
WIP Changes for adding support for MP3 based SMF files
Browse files Browse the repository at this point in the history
- Updated Qx
- Added MP3 class using same paradigm as WAV class
- Renamed UI elements to reference fact that MP3s are now involved
- Verification and creation of WAV/SMF (and now MP3) objects has been
simplified. Removal of public validity checking functions, validity is
now checked during construction and a public instance function isValid()
has been added to check for validity of a given file
  • Loading branch information
oblivioncth committed Feb 19, 2021
1 parent 1dc970a commit d6a511e
Show file tree
Hide file tree
Showing 28 changed files with 724 additions and 475 deletions.
15 changes: 8 additions & 7 deletions CoH_BSC_Editor.pro
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,15 @@ SOURCES += \
src/bsc.cpp \
src/main.cpp \
src/mainwindow.cpp \
src/mp3.cpp \
src/smc.cpp \
src/smf.cpp \
src/wav.cpp

HEADERS += \
resources.rc \
src/bsc.h \
src/mainwindow.h \
src/mp3.h \
src/smc.h \
src/smf.h \
src/version.h \
Expand All @@ -55,13 +56,13 @@ RESOURCES += \

RC_FILE = resources.rc

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -lQx_static32_0-0-1-2_Qt_5-14-0
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -lQx_static32_0-0-1-2_Qt_5-14-0d
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -lQx_static32_0-0-2-14_Qt_5-15-0
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -lQx_static32_0-0-2-14_Qt_5-15-0d

INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include

win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/lib/libQx_static32_0-0-1-2_Qt_5-14-0.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/lib/libQx_static32_0-0-1-2_Qt_5-14-0d.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/lib/Qx_static32_0-0-1-2_Qt_5-14-0.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/lib/Qx_static32_0-0-1-2_Qt_5-14-0d.lib
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/lib/libQx_static32_0-0-2-14_Qt_5-15-0.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/lib/libQx_static32_0-0-2-14_Qt_5-15-0d.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/lib/Qx_static32_0-0-2-14_Qt_5-15-0.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/lib/Qx_static32_0-0-2-14_Qt_5-15-0d.lib
36 changes: 0 additions & 36 deletions include/Windows_c++17_compat.h

This file was deleted.

238 changes: 116 additions & 122 deletions include/qx-io.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,138 +7,132 @@
#include <QDir>
#include <QCryptographicHash>
#include <QTextStream>
#include <QDirIterator>

namespace Qx
{
//-Classes--------------------------------------------------------------------------------------------------
class IO

//-Types------------------------------------------------------------------------------------------------------

enum IOOpType { IO_OP_READ, IO_OP_WRITE, IO_OP_ENUMERATE, IO_OP_INSPECT };
enum IOOpResultType { IO_SUCCESS, IO_ERR_UNKNOWN, IO_ERR_ACCESS_DENIED, IO_ERR_NOT_A_FILE, IO_ERR_NOT_A_DIR, IO_ERR_OUT_OF_RES,
IO_ERR_READ, IO_ERR_WRITE, IO_ERR_FATAL, IO_ERR_OPEN, IO_ERR_ABORT,
IO_ERR_TIMEOUT, IO_ERR_REMOVE, IO_ERR_RENAME, IO_ERR_REPOSITION,
IO_ERR_RESIZE, IO_ERR_COPY, IO_ERR_FILE_DNE, IO_ERR_DIR_DNE,
IO_ERR_FILE_EXISTS, IO_ERR_CANT_MAKE_DIR, IO_ERR_FILE_SIZE_MISMATCH, IO_ERR_CURSOR_OOB};
enum IOOpTargetType { IO_FILE, IO_DIR };

//-Classes--------------------------------------------------------------------------------------------
class IOOpReport
{
//-Inner Class Forward Declarations---------------------------------------------------------------------------------------
//-Class Members----------------------------------------------------------------------------------------------------
public:
static const inline QStringList TARGET_TYPES = {"file", "directory"};
static const inline QString SUCCESS_TEMPLATE = R"(Succesfully %1 %2 "%3")";
static const inline QString ERROR_TEMPLATE = R"(Error while %1 %2 "%3")";
static const inline QStringList SUCCESS_VERBS = {"read", "wrote", "enumerated", "inspected"};
static const inline QStringList ERROR_VERBS = {"reading", "writing", "enumerating", "inspecting"};
static const inline QStringList ERROR_INFO = {"An unknown error has occured.", "Access denied.", "Target is not a file.", "Target is not a directory.", "Out of resources.",
"General read error.", "General write error.", "A fatal error has occured.", "Could not open file.", "The opperation was aborted.",
"Request timed out.", "The file could not be removed.", "The file could not be renamed.", "The file could not be moved.",
"The file could not be resized.", "The file could not be copied.", "File does not exist.", "Directory does not exist.",
"The file already exists.", "The directory could not be created.", "File size mismatch.", "File data cursor has gone out of bounds."};

//-Instance Members-------------------------------------------------------------------------------------------------
private:
bool mNull;
IOOpType mOperation;
IOOpResultType mResult;
IOOpTargetType mTargetType;
QString mTarget = QString();
QString mOutcome = QString();
QString mOutcomeInfo = QString();
//-Constructor-------------------------------------------------------------------------------------------------------
public:
class IOOpReport;
class TextPos;
IOOpReport();
IOOpReport(IOOpType op, IOOpResultType res, const QFile& tar);
IOOpReport(IOOpType op, IOOpResultType res, const QDir& tar);

//-Instance Functions----------------------------------------------------------------------------------------------
private:
void parseOutcome();

public:
IOOpType getOperation() const;
IOOpResultType getResult() const;
IOOpTargetType getTargetType() const;
QString getTarget() const;
QString getOutcome() const;
QString getOutcomeInfo() const;
bool wasSuccessful() const;
bool isNull() const;
};

class TextPos
{
//-Class Types------------------------------------------------------------------------------------------------------
public:
enum IOOpType { IO_OP_READ, IO_OP_WRITE, IO_OP_ENUMERATE, IO_OP_INSPECT };
enum IOOpResultType { IO_SUCCESS, IO_ERR_UNKNOWN, IO_ERR_ACCESS_DENIED, IO_ERR_NOT_A_FILE, IO_ERR_NOT_A_DIR, IO_ERR_OUT_OF_RES,
IO_ERR_READ, IO_ERR_WRITE, IO_ERR_FATAL, IO_ERR_OPEN, IO_ERR_ABORT,
IO_ERR_TIMEOUT, IO_ERR_REMOVE, IO_ERR_RENAME, IO_ERR_REPOSITION,
IO_ERR_RESIZE, IO_ERR_COPY, IO_ERR_FILE_DNE, IO_ERR_DIR_DNE,
IO_ERR_FILE_EXISTS, IO_ERR_CANT_MAKE_DIR, IO_ERR_FILE_SIZE_MISMATCH, IO_ERR_CURSOR_OOB};
enum IOOpTargetType { IO_FILE, IO_DIR };

//-Class Variables-------------------------------------------------------------------------------------------------
static const TextPos START;
static const TextPos END;
//-Instance Variables------------------------------------------------------------------------------------------------
private:
int mLineNum;
int mCharNum;
//-Constructor-------------------------------------------------------------------------------------------------------
public:
static inline QString ENDL = "\r\n"; //NOTE: Currently this is windows only

//- Class Functions-------------------------------------------------------------------------------------------------------------
private:
static IOOpResultType parsedOpen(QFile& file, QIODevice::OpenMode openMode);
static IOOpResultType translateQFileDeviceError(QFileDevice::FileError fileError);
static IOOpResultType translateQTextStreamStatus(QTextStream::Status fileStatus);
static IOOpResultType fileCheck(QFile& file);
static IOOpResultType directoryCheck(QDir& dir);

public:
// General:
static bool fileIsEmpty(QFile& file);
static bool fileIsEmpty(QFile& file, IOOpReport& reportBuffer);
// Text Based:
static IOOpReport getLineCountOfFile(long long& returnBuffer, QFile& textFile);
static IOOpReport findStringInFile(TextPos& returnBuffer, QFile& textFile, const QString& query, int hitsToSkip = 0, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive);
static IOOpReport readTextFromFile(QString& returnBuffer, QFile& textFile, TextPos textPos, int characters = -1);
static IOOpReport readTextRangeFromFile(QString& returnBuffer, QFile& textFile, TextPos startPos, TextPos endPos = TextPos(-1,-1));
static IOOpReport readTextFromFileByLine(QStringList& returnBuffer, QFile &textFile, int startLine = 0, int endLine = -1);
static IOOpReport readAllTextFromFile(QString& returnBuffer, QFile& textFile);
static IOOpReport writeStringAsFile(QFile &textFile, const QString& text, bool overwriteIfExist = false, bool createDirs = true);
static IOOpReport writeStringToEndOfFile(QFile &textFile, const QString& text, bool ensureNewLine = false, bool createIfDNE = false, bool createDirs = true); // Consider making function just writeStringToFile and use TextPos with bool for overwrite vs insert
static IOOpReport deleteTextRangeFromFile(QFile &textFile, TextPos startPos, TextPos endPos);
// Directory Based:
static IOOpReport getDirFileList(QStringList& returnBuffer, QDir directory, bool includeSubdirectories = false, QStringList extFilter = QStringList());
static bool dirContainsFiles(QDir directory, bool includeSubdirectories = false);
static bool dirContainsFiles(QDir directory, IOOpReport& reportBuffer, bool includeSubdirectories = false);
// Integrity Based
static IOOpReport calculateFileChecksum(QByteArray& returnBuffer, QFile& file, QCryptographicHash::Algorithm hashAlgorithm);
// Raw Based
static IOOpReport readAllBytesFromFile(QByteArray& returnBuffer, QFile &file);
static IOOpReport readBytesFromFile(QByteArray& returnBuffer, QFile &file, long long start, long long end = -1);
static IOOpReport writeBytesAsFile(QFile &file, const QByteArray &byteArray, bool overwriteIfExist = false, bool createDirs = true);

//-Inner Classes--------------------------------------------------------------------------------------------
TextPos();
TextPos(int lineNum, int charNum);

//-Instance Functions------------------------------------------------------------------------------------------------
public:
class IOOpReport
{
//-Class Members----------------------------------------------------------------------------------------------------
public:
static const inline QStringList TARGET_TYPES = {"file", "directory"};
static const inline QString SUCCESS_TEMPLATE = "Succesfully %1 ""%3""";
static const inline QString ERROR_TEMPLATE = "Error while %1 ""%3""";
static const inline QStringList SUCCESS_VERBS = {"read", "wrote", "enumerated", "inspecting"};
static const inline QStringList ERROR_VERBS = {"reading", "writing", "enumerating", "inspecting"};
static const inline QStringList ERROR_INFO = {"An unknown error has occured.", "Access denied.", "Target is not a file.", "Target is not a directory.", "Out of resources.",
"General read error.", "General write error.", "A fatal error has occured.", "Could not open file.", "The opperation was aborted.",
"Request timed out.", "The file could not be removed.", "The file could not be renamed.", "The file could not be moved.",
"The file could not be resized.", "The file could not be copied.", "File does not exist.", "Directory does not exist.",
"The file already exists.", "The directory could not be created.", "File size mismatch.", "File data cursor has gone out of bounds."};

//-Instance Members-------------------------------------------------------------------------------------------------
private:
IOOpType mOperation;
IOOpResultType mResult;
IOOpTargetType mTargetType;
QString mTarget = QString();
QString mOutcome = QString();
QString mOutcomeInfo = QString();
//-Constructor-------------------------------------------------------------------------------------------------------
public:
IOOpReport();
IOOpReport(IOOpType op, IOOpResultType res, QFile& tar);
IOOpReport(IOOpType op, IOOpResultType res, QDir& tar);

//-Instance Functions----------------------------------------------------------------------------------------------
public:
IOOpType getOperation() const;
IOOpResultType getResult() const;
IOOpTargetType getTargetType() const;
QString getTarget() const;
QString getOutcome() const;
QString getOutcomeInfo() const;
bool wasSuccessful() const;
private:
void parseOutcome();
};

class TextPos {
//-Class Types------------------------------------------------------------------------------------------------------
public:
static const TextPos START;
static const TextPos END;
//-Instance Variables------------------------------------------------------------------------------------------------
private:
int mLineNum;
int mCharNum;
//-Constructor-------------------------------------------------------------------------------------------------------
public:
TextPos();
TextPos(int lineNum, int charNum);

//-Instance Functions------------------------------------------------------------------------------------------------
public:
int getLineNum();
int getCharNum();
void setLineNum(int lineNum);
void setCharNum(int charNum);
void setNull();
bool isNull();

bool operator== (const TextPos &otherTextPos);
bool operator!= (const TextPos &otherTextPos);
bool operator> (const TextPos &otherTextPos);
bool operator>= (const TextPos &otherTextPos);
bool operator< (const TextPos &otherTextPos);
bool operator<= (const TextPos &otherTextPos);
};
int getLineNum() const;
int getCharNum() const;
void setLineNum(int lineNum);
void setCharNum(int charNum);
void setNull();
bool isNull() const;

bool operator== (const TextPos &otherTextPos);
bool operator!= (const TextPos &otherTextPos);
bool operator> (const TextPos &otherTextPos);
bool operator>= (const TextPos &otherTextPos);
bool operator< (const TextPos &otherTextPos);
bool operator<= (const TextPos &otherTextPos);
};

//-Variables------------------------------------------------------------------------------------------------------------

static inline QString ENDL = "\r\n"; //NOTE: Currently this is windows only

//-Functions-------------------------------------------------------------------------------------------------------------

// General:
bool fileIsEmpty(const QFile& file);
bool fileIsEmpty(const QFile& file, IOOpReport& reportBuffer);
QString kosherizeFileName(QString fileName);
// Text Based:
IOOpReport getLineCountOfFile(long long& returnBuffer, QFile& textFile);
IOOpReport findStringInFile(TextPos& returnBuffer, QFile& textFile, const QString& query, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive, int hitsToSkip = 0 );
IOOpReport findStringInFile(QList<TextPos>& returnBuffer, QFile& textFile, const QString& query, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive, int hitLimit = -1);
IOOpReport fileContainsString(bool& returnBuffer, QFile& textFile, const QString& query, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive);
IOOpReport readTextFromFile(QString& returnBuffer, QFile& textFile, TextPos textPos, int characters = -1);
IOOpReport readTextRangeFromFile(QString& returnBuffer, QFile& textFile, TextPos startPos, TextPos endPos = TextPos::END);
IOOpReport readTextFromFileByLine(QStringList& returnBuffer, QFile &textFile, int startLine = 0, int endLine = -1);
IOOpReport readAllTextFromFile(QString& returnBuffer, QFile& textFile);
IOOpReport writeStringAsFile(QFile &textFile, const QString& text, bool overwriteIfExist = false, bool createDirs = true);
IOOpReport writeStringToEndOfFile(QFile &textFile, const QString& text, bool ensureNewLine = false, bool createIfDNE = false, bool createDirs = true); // Consider making function just writeStringToFile and use TextPos with bool for overwrite vs insert
IOOpReport deleteTextRangeFromFile(QFile &textFile, TextPos startPos, TextPos endPos);
// Directory Based:
IOOpReport getDirFileList(QStringList& returnBuffer, QDir directory, QStringList extFilter = QStringList(), QDirIterator::IteratorFlag traversalFlags = QDirIterator::NoIteratorFlags,
Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive);
bool dirContainsFiles(QDir directory, bool includeSubdirectories = false);
bool dirContainsFiles(QDir directory, IOOpReport& reportBuffer, bool includeSubdirectories = false);
// Integrity Based
IOOpReport calculateFileChecksum(QByteArray& returnBuffer, QFile& file, QCryptographicHash::Algorithm hashAlgorithm);
// Raw Based
IOOpReport readAllBytesFromFile(QByteArray& returnBuffer, QFile &file);
IOOpReport readBytesFromFile(QByteArray& returnBuffer, QFile &file, long long start, long long end = -1);
IOOpReport writeBytesAsFile(QFile &file, const QByteArray &byteArray, bool overwriteIfExist = false, bool createDirs = true);
}

#endif // IO_H
34 changes: 0 additions & 34 deletions include/qx-reg.h

This file was deleted.

Loading

0 comments on commit d6a511e

Please sign in to comment.