#include #include #include #include #include #include #include "helper.h" namespace Helper { const QString md5Sum(const QString &path){ QFileInfo info(path); if(!info.exists() || !info.isFile()){ return QString(); } QString retval; QCryptographicHash h(QCryptographicHash::Md5); QFile file(path); file.open(QIODevice::ReadOnly); qint64 read = 0; if(info.size() < (5 * 1024 * 1024)){ QByteArray data(4096, '\0'); do { read = file.read(data.data(), 4096); if(read > 0){ h.addData(data.data(), read); } } while (read == 4096); QByteArray res = h.result(); retval = res.toHex().toLower(); }else{ QByteArray data(512, '\0'); int offset = info.size() / 3; file.seek(offset); int numBytes = 512 * 1024; int readBytes = 0; do { read = file.read(data.data(), 512); if(read > 0){ readBytes += read; }else{ return QString(); } h.addData(data.data(), read); } while(readBytes < numBytes); QByteArray res = h.result(); retval = res.toHex().toLower(); } return retval; } const QJsonDocument ffpmegData(const QString &path){ QSettings s; QString ffProbe = s.value("ext/ffprobe").toString(); QStringList args; args << "-v" << "quiet" << "-print_format" << "json" << "-show_format" << "-show_streams" << path; QProcess ffproc; ffproc.start(ffProbe, args); if(!ffproc.waitForStarted()){ return QJsonDocument(); } ffproc.waitForFinished(); QByteArray ffData = ffproc.readAllStandardOutput(); return QJsonDocument::fromJson(ffData); } Duration::Duration() : mHours(0), mMinutes(0), mSeconds(0) {} Duration::Duration(qint64 seconds){ int sec(0), min(0), h(0); // get hours h = (seconds / 60 / 60); // remaining minutes min = (seconds / 60) % 60; // seconds sec = seconds % 60; mHours = h; mMinutes = min; mSeconds = sec; } Duration::Duration(const QString &dur) : mHours(0), mMinutes(0), mSeconds(0){ QStringList parts = dur.split(':'); if(parts.size() == 3){ mHours = parts.at(0).toInt(); mMinutes = parts.at(1).toInt(); mSeconds = parts.at(2).toInt(); } } Duration Duration::operator+(const Duration &dur) const{ Duration retval; retval.mSeconds = mSeconds + dur.mSeconds; retval.mMinutes = mMinutes + dur.mMinutes + retval.mSeconds / 60; retval.mSeconds %= 60; retval.mHours = mHours + dur.mHours + retval.mMinutes / 60; retval.mMinutes %= 60; return retval; } const QString Duration::toString() const { QString retval = QString("%1:%2:%3").arg(QString::number(mHours), 2, '0').arg(QString::number(mMinutes), 2, '0').arg(QString::number(mSeconds), 2, '0'); return retval; } bool Duration::isNull() const { return mHours == 0 && mMinutes == 0 && mSeconds == 0; } qint64 Duration::toSeconds() const { qint64 retval; retval = mHours * 60 * 60 + mMinutes * 60 + mSeconds; return retval; } }