]> Some of my projects - anidbudpclient.git/commitdiff
Add creating File instances from ed2k URIs
authorAPTX <marek321@gmail.com>
Wed, 29 Jun 2011 22:07:55 +0000 (00:07 +0200)
committerAPTX <marek321@gmail.com>
Wed, 29 Jun 2011 22:07:55 +0000 (00:07 +0200)
file.cpp
file.h

index f63b9572d497cdaff0fce139d5787ce923473225..a97bb96fbf6b68db59bc49e055705f24ef1f2a2f 100644 (file)
--- 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 2d7f1fd1a2f527005a1a63ddf7ebfcd2823a0424..f302b62174ff2c73819e57827064c77efcf2b47c 100644 (file)
--- 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;