From 4aa992f0f5a15fb076298f2a5425129bfce61c1b Mon Sep 17 00:00:00 2001 From: APTX Date: Thu, 30 Jun 2011 00:07:55 +0200 Subject: [PATCH] Add creating File instances from ed2k URIs --- file.cpp | 30 +++++++++++++++++++++++++++++- file.h | 3 +++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/file.cpp b/file.cpp index f63b957..a97bb96 100644 --- a/file.cpp +++ b/file.cpp @@ -60,11 +60,14 @@ void File::setFile(const QFileInfo &file) return; m_file = file; + m_size = 0; + m_ed2k = 0; + m_hashingState = m_renamingState = m_addingState = m_markingState = m_settingStateState = NotStarted; } qint64 File::size() { - return m_file.size(); + return m_size ? m_size : m_file.size(); } QByteArray File::ed2k() @@ -127,6 +130,9 @@ bool File::rename() if (m_renamingState == Success) return true; + if (!m_file.isFile()) + return false; + if (m_hashingState != Success) actionsQueue.enqueue(Hashing); @@ -194,6 +200,26 @@ MyListState File::state() const return m_state; } +File *File::fromEd2k(const QString &ed2k) +{ + QRegExp rx("^ed2k://\\|file\\|[^|]+\\|([0-9]+)\\|([a-z0-9]{32})\\|", Qt::CaseInsensitive, QRegExp::RegExp2); + + if (rx.indexIn(ed2k) == -1) + return 0; + + bool ok = false; + qint64 size = rx.cap(1).toLongLong(&ok); + if (!ok) + return 0; + + QByteArray hash = rx.cap(2).toLower().toLatin1(); + + File *ret = new File(); + ret->m_size = size; + ret->m_ed2k = hash; + return ret; +} + MyListState File::defaultState() { return m_defaultState; @@ -521,6 +547,8 @@ void File::init() { staticInit(); + m_size = 0; + hashResult = 0; fileReply = 0; addReply = 0; diff --git a/file.h b/file.h index 2d7f1fd..f302b62 100644 --- a/file.h +++ b/file.h @@ -91,6 +91,8 @@ public: void clearState(); MyListState state() const; + static File *fromEd2k(const QString &ed2k); + static MyListState defaultState(); static void setDefaultState(const MyListState &defaultState); @@ -131,6 +133,7 @@ private: QFileInfo m_file; QByteArray m_ed2k; + qint64 m_size; bool notWorking; -- 2.52.0