/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include #include #include #include #define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1 #include #include #include #include #include "helper.h" namespace Helper { const QString mimeType(const QString &path){ QString retval; magic_t mc = magic_open(MAGIC_MIME_TYPE); QByteArray name = path.toUtf8(); if(mc){ magic_load(mc, 0); const char* magic_c = magic_file(mc, name.constData()); retval = QString(magic_c); magic_close(mc); } if(retval.toLower().startsWith("application/octet-stream")){ magic_t mc = magic_open(MAGIC_NONE); if(mc){ magic_load(mc, 0); const char* magic_c = magic_file(mc, name.constData()); QString desc(magic_c); magic_close(mc); if(desc.toLower().contains("mpeg sequence") || desc.toLower().contains("microsoft asf")){ retval = "video/"; } } return retval; } } const QString md5Sum(const QString &path){ QFileInfo info(path); if(!info.exists() || !info.isFile()){ return QString(); } using namespace CryptoPP; Weak::MD5 hash; std::string res; QString retval; if(info.size() < (5 * 1024 * 1024)){ FileSource f(qPrintable(path), true, new HashFilter(hash, new HexEncoder(new StringSink(res)))); retval = QString::fromStdString(res).toLower(); }else{ QFile file(path); file.open(QIODevice::ReadOnly); int offset = info.size() / 3; file.seek(offset); int numBytes = 512 * 1024; char *data = new char[numBytes]; int read = file.read(data, numBytes); if(read != numBytes){ delete [] data; return QString(); } StringSource s((byte*)data, numBytes, true, new HashFilter(hash, new HexEncoder(new StringSink(res)))); retval = QString::fromStdString(res).toLower(); delete [] data; } return retval; } }