diff --git a/qtox.pro b/qtox.pro index 6c80a2af6..5f1c9aea1 100644 --- a/qtox.pro +++ b/qtox.pro @@ -436,7 +436,8 @@ SOURCES += \ src/widget/tool/screengrabberoverlayitem.cpp \ src/widget/tool/toolboxgraphicsitem.cpp \ src/widget/tool/flyoutoverlaywidget.cpp \ - src/widget/form/settings/verticalonlyscroller.cpp + src/widget/form/settings/verticalonlyscroller.cpp \ + src/core/toxid.cpp HEADERS += \ @@ -468,4 +469,5 @@ HEADERS += \ src/widget/tool/screengrabberoverlayitem.h \ src/widget/tool/toolboxgraphicsitem.h \ src/widget/tool/flyoutoverlaywidget.h \ - src/widget/form/settings/verticalonlyscroller.h + src/widget/form/settings/verticalonlyscroller.h \ + src/core/toxid.h diff --git a/src/core/toxid.cpp b/src/core/toxid.cpp new file mode 100644 index 000000000..423127bb9 --- /dev/null +++ b/src/core/toxid.cpp @@ -0,0 +1,59 @@ +#include "toxid.h" + +#include +#include + +#define TOX_ID_PUBLIC_KEY_LENGTH 64 +#define TOX_ID_NO_SPAM_LENGTH 8 +#define TOX_ID_CHECKSUM_LENGTH 4 +#define TOX_HEX_ID_LENGTH 2*TOX_ADDRESS_SIZE + +ToxId::ToxId() +: publicKey(), noSpam(), checkSum() +{} + +ToxId::ToxId(const ToxId &other) +: publicKey(other.publicKey), noSpam(other.noSpam), checkSum(other.checkSum) +{} + +ToxId::ToxId(const QString &id) +{ + if (isToxId(id)) + { + publicKey = id.left(TOX_ID_PUBLIC_KEY_LENGTH); + noSpam = id.mid(TOX_ID_PUBLIC_KEY_LENGTH, TOX_ID_NO_SPAM_LENGTH); + checkSum = id.mid(TOX_ID_PUBLIC_KEY_LENGTH + TOX_ID_NO_SPAM_LENGTH, TOX_ID_CHECKSUM_LENGTH); + } + else + { + publicKey = id; + } +} + +bool ToxId::operator==(const ToxId& other) const +{ + return publicKey == other.publicKey; +} + +bool ToxId::operator!=(const ToxId &other) const +{ + return publicKey != other.publicKey; +} + +QString ToxId::toString() const +{ + return publicKey + noSpam + checkSum; +} + +void ToxId::clear() +{ + publicKey.clear(); + noSpam.clear(); + checkSum.clear(); +} + +bool ToxId::isToxId(const QString &id) +{ + const QRegularExpression hexRegExp("^[A-Fa-f0-9]+$"); + return id.length() == TOX_HEX_ID_LENGTH && id.contains(hexRegExp); +} diff --git a/src/core/toxid.h b/src/core/toxid.h new file mode 100644 index 000000000..6aa55ef6e --- /dev/null +++ b/src/core/toxid.h @@ -0,0 +1,26 @@ +#ifndef TOXID_H +#define TOXID_H + +#include + +class ToxId +{ +public: + ToxId(); + ToxId(const ToxId& other); + ToxId(const QString& id); + + bool operator==(const ToxId& other) const; + bool operator!=(const ToxId& other) const; + QString toString() const; + void clear(); + + static bool isToxId(const QString& id); + +public: + QString publicKey; + QString noSpam; + QString checkSum; +}; + +#endif // TOXID_H