[Pkg-owncloud-commits] [owncloud-client] 58/175: Filesystem Utilities: Add Checksum calculation methods.
Sandro Knauß
hefee-guest at moszumanska.debian.org
Sat Aug 8 10:36:27 UTC 2015
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit 67d38bc87b775a096d3df22d5df5c4fa118b4ce5
Author: Klaas Freitag <freitag at owncloud.com>
Date: Tue May 12 15:48:13 2015 +0200
Filesystem Utilities: Add Checksum calculation methods.
---
CMakeLists.txt | 2 +-
config.h.in | 2 +
src/libsync/CMakeLists.txt | 5 +++
src/libsync/filesystem.cpp | 94 ++++++++++++++++++++++++++++++++++++++++++++++
src/libsync/filesystem.h | 14 +++++++
5 files changed, 116 insertions(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2ff58de..da6d004 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -165,13 +165,13 @@ endif()
find_package(Sphinx)
find_package(PdfLatex)
-
find_package(SQLite3 3.8.0 REQUIRED)
# On some OS, we want to use our own, not the system sqlite
if (USE_OUR_OWN_SQLITE3)
include_directories(BEFORE ${SQLITE3_INCLUDE_DIR})
endif()
+find_package(ZLIB)
configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
diff --git a/config.h.in b/config.h.in
index 48e9d88..601dc6b 100644
--- a/config.h.in
+++ b/config.h.in
@@ -19,6 +19,8 @@
#cmakedefine APPLICATION_EXECUTABLE "@APPLICATION_EXECUTABLE@"
#cmakedefine APPLICATION_UPDATE_URL "@APPLICATION_UPDATE_URL@"
+#cmakedefine ZLIB_FOUND @ZLIB_FOUND@
+
#cmakedefine SYSCONFDIR "@SYSCONFDIR@"
#cmakedefine DATADIR "@DATADIR@"
diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt
index cb9490b..aaa1d93 100644
--- a/src/libsync/CMakeLists.txt
+++ b/src/libsync/CMakeLists.txt
@@ -141,6 +141,11 @@ if(NEON_FOUND)
endif()
endif()
+if(ZLIB_FOUND)
+ list(APPEND libsync_LINK_TARGETS ${ZLIB_LIBRARIES})
+ include_directories(${ZLIB_INCLUDE_DIRS})
+endif(ZLIB_FOUND)
+
add_library(${synclib_NAME} SHARED ${libsync_SRCS} ${syncMoc})
GENERATE_EXPORT_HEADER( ${synclib_NAME}
BASE_NAME ${synclib_NAME}
diff --git a/src/libsync/filesystem.cpp b/src/libsync/filesystem.cpp
index 4191686..b80d485 100644
--- a/src/libsync/filesystem.cpp
+++ b/src/libsync/filesystem.cpp
@@ -11,6 +11,7 @@
* for more details.
*/
+#include "config.h"
#include "filesystem.h"
#include "utility.h"
@@ -18,6 +19,13 @@
#include <QFileInfo>
#include <QCoreApplication>
#include <QDebug>
+#include <QCryptographicHash>
+#include <QFuture>
+#include <qtconcurrentrun.h>
+
+#ifdef ZLIB_FOUND
+#include <zlib.h>
+#endif
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
#include <qabstractfileengine.h>
@@ -394,4 +402,90 @@ QString FileSystem::fileSystemForPath(const QString & path)
}
#endif
+QByteArray FileSystem::calcMd5Worker( const QString& filename )
+{
+ QByteArray arr;
+
+ QCryptographicHash crypto( QCryptographicHash::Md5 );
+
+ QFile file(filename);
+ if (file.open(QIODevice::ReadOnly)) {
+ QByteArray data;
+ while (!file.atEnd()) {
+ data = file.read(1024*1024*10);
+ crypto.addData(data);
+ }
+ arr = crypto.result().toHex();
+ }
+ return arr;
+}
+
+QByteArray FileSystem::calcSha1Worker( const QString& filename )
+{
+ QByteArray arr;
+
+ QCryptographicHash crypto( QCryptographicHash::Sha1 );
+
+ QFile file(filename);
+ if (file.open(QIODevice::ReadOnly)) {
+ QByteArray data;
+ while (!file.atEnd()) {
+ data = file.read(1024*1024*10);
+ crypto.addData(data);
+ }
+ arr = crypto.result().toHex();
+ }
+ return arr;
+}
+
+#ifdef ZLIB_FOUND
+QByteArray FileSystem::calcAdler32Worker( const QString& filename )
+{
+ unsigned int adler = adler32(0L, Z_NULL, 0);
+
+ QFile file(filename);
+ if (file.open(QIODevice::ReadOnly)) {
+ QByteArray data;
+ while (!file.atEnd()) {
+ data = file.read(1024*1024*10);
+ adler = adler32(adler, (const Bytef*) data.data(), data.size());
+ }
+ }
+
+ return QString::number( adler, 16 ).toUtf8();
+}
+#endif
+
+QByteArray FileSystem::calcMd5( const QString& fileName )
+{
+ QFuture<QByteArray> f1 = QtConcurrent::run(calcMd5Worker, fileName );
+ f1.waitForFinished();
+
+ const QByteArray md5 = f1.result();
+
+ return md5;
+}
+
+QByteArray FileSystem::calcSha1( const QString& fileName )
+{
+ QFuture<QByteArray> f1 = QtConcurrent::run(calcSha1Worker, fileName );
+ f1.waitForFinished();
+
+ const QByteArray sha1 = f1.result();
+
+ return sha1;
+}
+
+#ifdef ZLIB_FOUND
+QByteArray FileSystem::calcAdler32( const QString& fileName )
+{
+ QFuture<QByteArray> f1 = QtConcurrent::run(calcAdler32Worker, fileName );
+ f1.waitForFinished();
+
+ const QByteArray checksum = f1.result();
+
+ return checksum;
+}
+#endif
+
} // namespace OCC
diff --git a/src/libsync/filesystem.h b/src/libsync/filesystem.h
index ac51e63..a2a1450 100644
--- a/src/libsync/filesystem.h
+++ b/src/libsync/filesystem.h
@@ -121,4 +121,18 @@ bool openAndSeekFileSharedRead(QFile* file, QString* error, qint64 seek);
QString fileSystemForPath(const QString & path);
#endif
+/**
+ * Calculate the checksum of a file in a worker thread. Each function waits
+ * until the calculation is finished.
+ */
+QByteArray calcMd5( const QString& fileName );
+QByteArray calcSha1( const QString& fileName );
+QByteArray calcAdler32( const QString& fileName );
+
+#ifdef ZLIB_FOUND
+QByteArray calcAdler32Worker( const QString& filename );
+#endif
+QByteArray calcSha1Worker( const QString& filename );
+QByteArray calcMd5Worker( const QString& filename );
+
}}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list