From: APTX Date: Mon, 31 May 2010 18:16:54 +0000 (+0200) Subject: Remove anidbudpclient from repo X-Git-Url: https://gitweb.aptx.org/?a=commitdiff_plain;h=5b56e41e94effe90debf77498c797e95331de02a;p=aniplayer-old.git Remove anidbudpclient from repo --- diff --git a/lib/anidbudpclient/abstractcommand.cpp b/lib/anidbudpclient/abstractcommand.cpp deleted file mode 100644 index bf2d151..0000000 --- a/lib/anidbudpclient/abstractcommand.cpp +++ /dev/null @@ -1,74 +0,0 @@ -#include "abstractcommand.h" - -namespace AniDBUdpClient { - -AbstractCommand::AbstractCommand() -{ -} - -AbstractCommand::~AbstractCommand() -{ -} - -Command AbstractCommand::rawCommand() const -{ - return Command("", QVariantMap()); -} - -bool AbstractCommand::waitForResult() const -{ - return false; -} - -bool AbstractCommand::requiresSession() const -{ - return true; -} - -// === - -AbstractReply::AbstractReply(const QByteArray &id, Client *client, QObject *parent) : QObject(parent) -{ - m_replyCode = UNKNOWN_REPLY; - m_id = id; - m_client = client; - m_commandPtr = 0; -} - -AbstractReply::~AbstractReply() -{ - -} - -const AbstractCommand &AbstractReply::command() const -{ - return m_commandPtr == 0 ? m_command : *m_commandPtr; -} - -void AbstractReply::setRawReply(ReplyCode replyCode, const QString &reply) -{ - m_replyCode = replyCode; - m_rawReply = reply; -} - -QString AbstractReply::rawReply() const -{ - return m_rawReply; -} - -ReplyCode AbstractReply::replyCode() const -{ - return m_replyCode; -} - -QByteArray AbstractReply::id() const -{ - return m_id; -} - -void AbstractReply::setId(const QByteArray &id) -{ - m_id = id; -} - -} // namespace AniDBUdpClient diff --git a/lib/anidbudpclient/abstractcommand.h b/lib/anidbudpclient/abstractcommand.h deleted file mode 100644 index 62cad54..0000000 --- a/lib/anidbudpclient/abstractcommand.h +++ /dev/null @@ -1,92 +0,0 @@ -#ifndef ABSTRACTCOMMAND_H -#define ABSTRACTCOMMAND_H - -#include "anidbudpclient_global.h" - -#include -#include -#include - - -namespace AniDBUdpClient { - -class Client; - -typedef QPair Command; - -class AbstractReply; - -class ANIDBUDPCLIENTSHARED_EXPORT AbstractCommand -{ - friend class Client; -public: - typedef AbstractReply ReplyType; - AbstractCommand(); - virtual ~AbstractCommand(); - - virtual Command rawCommand() const; - - /** - If it's false the client takes ownership of the request! - **/ - virtual bool waitForResult() const; - virtual bool requiresSession() const; -}; - -#define REPLY_DEFINITION_HELPER_INTERNAL(name, constructor) \ -friend class Client; \ -public: \ -typedef name##Command CommandType; \ -private: \ -CommandType m_command; \ -Client *m_client; \ -name##Reply(const CommandType command, const QByteArray &id, Client *client, QObject *parent) : m_command(command), m_client(client), AbstractReply(id, client, parent) {constructor} \ -inline const CommandType &command() const { return m_command; } - -#define REPLY_DEFINITION_HELPER(name) \ - REPLY_DEFINITION_HELPER_INTERNAL(name, m_commandPtr = &m_command;) - -#define REPLY_DEFINITION_HELPER2(name) \ - REPLY_DEFINITION_HELPER_INTERNAL(name, m_commandPtr = &m_command; init();) - -class ANIDBUDPCLIENTSHARED_EXPORT AbstractReply : public QObject -{ - friend class Client; - - Q_OBJECT - - Q_PROPERTY(QByteArray id READ id); - Q_PROPERTY(ReplyCode replyCode READ replyCode); - -public: - typedef AbstractCommand CommandType; - - AbstractReply(const QByteArray &id, Client *client, QObject *parent = 0); - virtual ~AbstractReply(); - - const CommandType &command() const; - - virtual void setRawReply(ReplyCode replyCode, const QString &reply); - virtual QString rawReply() const; - - virtual ReplyCode replyCode() const; - virtual QByteArray id() const; - -signals: - void replyReady(bool success = false); - -protected: - void setId(const QByteArray &id); - - QString m_rawReply; - ReplyCode m_replyCode; - QByteArray m_id; - Client *m_client; - - AbstractCommand *m_commandPtr; - AbstractCommand m_command; -}; - -} // namespace AniDBUdpClient - -#endif // ABSTRACTCOMMAND_H diff --git a/lib/anidbudpclient/anidbudpclient.pri b/lib/anidbudpclient/anidbudpclient.pri deleted file mode 100644 index 40880fa..0000000 --- a/lib/anidbudpclient/anidbudpclient.pri +++ /dev/null @@ -1,28 +0,0 @@ -# Avoiding symbol clash with other instances of the Qt library -# (ref. developingplugins.html in the doc.): -# For Qt 4.4 and later, just configure Qt to use a separate namespace: -# configure -qtnamespace SomeNamespace -# For Qt 4.3: Uncomment the line below. -# It makes the dynamic linker prefer our own Qt symbols for the plugin, -# provided that our Qt is statically built and linked into the -# plugin. Note that to force the linker to prefer the static Qt -# libraries (.a files), the dynamic libraries (.so) files must not -# be present in the lib directory. -# QMAKE_LFLAGS += -Wl,-Bsymbolic -# Avoiding symbol clash with other instances of the Qt library -# (ref. developingplugins.html in the doc.): -# For Qt 4.4 and later, just configure Qt to use a separate namespace: -# configure -qtnamespace SomeNamespace -# For Qt 4.3: Uncomment the line below. -# It makes the dynamic linker prefer our own Qt symbols for the plugin, -# provided that our Qt is statically built and linked into the -# plugin. Note that to force the linker to prefer the static Qt -# libraries (.a files), the dynamic libraries (.so) files must not -# be present in the lib directory. -# QMAKE_LFLAGS += -Wl,-Bsymbolic -QT *= network \ - script -INCLUDEPATH += $$PWD/include -DEPENDPATH += $$PWD -LIBS += -lanidbudpclient -LIBS += -L$$DESTDIR diff --git a/lib/anidbudpclient/anidbudpclient.pro b/lib/anidbudpclient/anidbudpclient.pro deleted file mode 100644 index 9f2968b..0000000 --- a/lib/anidbudpclient/anidbudpclient.pro +++ /dev/null @@ -1,59 +0,0 @@ -# ------------------------------------------------- -# Project created by QtCreator 2009-03-22T14:53:52 -# ------------------------------------------------- -QT += network \ - script -QT -= gui -TEMPLATE = lib -TARGET = anidbudpclient -static { - message(anidbpudpclinet: Static build) - DESTDIR = ../../build-static -} -!static { - message(anidbpudpclinet: Dynamic build) - DESTDIR = ../../build -} -INCLUDEPATH += $$PWD -DEPENDPATH += $$PWD -DEFINES += ANIDBUDPCLIENT_LIBRARY -SOURCES += client.cpp \ - abstractcommand.cpp \ - authcommand.cpp \ - rawcommand.cpp \ - mylistaddcommand.cpp \ - logoutcommand.cpp \ - uptimecommand.cpp \ - mylistcommand.cpp \ - filecommand.cpp \ - file.cpp \ - hash.cpp \ - hashproducer.cpp \ - hashconsumer.cpp - -HEADERS += client.h \ - anidbudpclient_global.h \ - abstractcommand.h \ - authcommand.h \ - rawcommand.h \ - mylistaddcommand.h \ - logoutcommand.h \ - uptimecommand.h \ - mylistcommand.h \ - filecommand.h \ - file.h \ - hash.h \ - hashproducer.h \ - hashconsumer.h \ - circularbuffer.h - -CONV_HEADERS += include/AniDBUdpClient/Client \ - include/AniDBUdpClient/AbstractCommand \ - include/AniDBUdpClient/RawCommand \ - include/AniDBUdpClient/MyListCommand \ - include/AniDBUdpClient/MyListAddCommand \ - include/AniDBUdpClient/FileCommand \ - include/AniDBUdpClient/File \ - include/AniDBUdpClient/UptimeCommand \ - include/AniDBUdpClient/Hash \ - include/AniDBUdpClient/UptimeCommand \ diff --git a/lib/anidbudpclient/anidbudpclient_global.h b/lib/anidbudpclient/anidbudpclient_global.h deleted file mode 100644 index ff6787c..0000000 --- a/lib/anidbudpclient/anidbudpclient_global.h +++ /dev/null @@ -1,408 +0,0 @@ -#ifndef ANIDBUDPCLIENT_GLOBAL_H -#define ANIDBUDPCLIENT_GLOBAL_H - -#include -#include -#include - -#define CLIENT_NAME "anidbudpclient" -#define CLIENT_VERSION 0x000003 -#define PROTOCOL_VERSION 3 - -#if defined(ANIDBUDPCLIENT_LIBRARY) -# define ANIDBUDPCLIENTSHARED_EXPORT Q_DECL_EXPORT -#else -# define ANIDBUDPCLIENTSHARED_EXPORT Q_DECL_IMPORT -#endif - -namespace AniDBUdpClient -{ - enum Error - { - NoError, - BindError, - HostLookupError, - HostUnreachableError, - AuthenticationError, - BannedError, - ClientBannedError, - ClientVersionOutdatedError, - ServerError, - UnknownError, - }; - - enum IdlePolicy - { - DoNothingIdlePolicy, - LogoutIdlePolicy, - ImmediateLogoutIdlePolicy, - KeepAliveIdlePolicy, - }; - - enum ReplyCode - { - CLIENT_DESTROYED = -1, - UNKNOWN_REPLY = 0, - - // POSITIVE 2XX - LOGIN_ACCEPTED = 200, //a - LOGIN_ACCEPTED_NEW_VER = 201, //a - LOGGED_OUT = 203, //a - RESOURCE = 205, //d - STATS = 206, //b - TOP = 207, //b - UPTIME = 208, //b - ENCRYPTION_ENABLED = 209, //c - - MYLIST_ENTRY_ADDED = 210, //a - MYLIST_ENTRY_DELETED = 211, //a - - ADDED_FILE = 214, //e - ADDED_STREAM = 215, //e - - ENCODING_CHANGED = 219, //c - - FILE = 220, //a - MYLIST = 221, //a - MYLIST_STATS = 222, //b - - ANIME = 230, //b - ANIME_BEST_MATCH = 231, //b - RANDOMANIME = 232, //b - ANIME_DESCRIPTION = 233, //b - - EPISODE = 240, //b - PRODUCER = 245, //b - GROUP = 250, //b - - BUDDY_LIST = 253, //c - BUDDY_STATE = 254, //c - BUDDY_ADDED = 255, //c - BUDDY_DELETED = 256, //c - BUDDY_ACCEPTED = 257, //c - BUDDY_DENIED = 258, //c - - VOTED = 260, //b - VOTE_FOUND = 261, //b - VOTE_UPDATED = 262, //b - VOTE_REVOKED = 263, //b - - NOTIFICATION_ENABLED = 270, //a - NOTIFICATION_NOTIFY = 271, //a - NOTIFICATION_MESSAGE = 272, //a - NOTIFICATION_BUDDY = 273, //c - NOTIFICATION_SHUTDOWN = 274, //c - PUSHACK_CONFIRMED = 280, //a - NOTIFYACK_SUCCESSFUL_M = 281, //a - NOTIFYACK_SUCCESSFUL_N = 282, //a - NOTIFICATION = 290, //a - NOTIFYLIST = 291, //a - NOTIFYGET_MESSAGE = 292, //a - NOTIFYGET_NOTIFY = 293, //a - - SENDMSG_SUCCESSFUL = 294, //a - USER = 295, //d - - // AFFIRMATIVE/NEGATIVE 3XX - PONG = 300, //a - AUTHPONG = 301, //c - NO_SUCH_RESOURCE = 305, //d - API_PASSWORD_NOT_DEFINED = 309, //c - - FILE_ALREADY_IN_MYLIST = 310, //a - MYLIST_ENTRY_EDITED = 311, //a - MULTIPLE_MYLIST_ENTRIES = 312, //e - - SIZE_HASH_EXISTS = 314, //c - INVALID_DATA = 315, //c - STREAMNOID_USED = 316, //c - - NO_SUCH_FILE = 320, //a - NO_SUCH_ENTRY = 321, //a - MULTIPLE_FILES_FOUND = 322, //b - - NO_SUCH_ANIME = 330, //b - NO_SUCH_ANIME_DESCRIPTION = 333, //b - NO_SUCH_EPISODE = 340, //b - NO_SUCH_PRODUCER = 345, //b - NO_SUCH_GROUP = 350, //b - - BUDDY_ALREADY_ADDED = 355, //c - NO_SUCH_BUDDY = 356, //c - BUDDY_ALREADY_ACCEPTED = 357, //c - BUDDY_ALREADY_DENIED = 358, //c - - NO_SUCH_VOTE = 360, //b - INVALID_VOTE_TYPE = 361, //b - INVALID_VOTE_VALUE = 362, //b - PERMVOTE_NOT_ALLOWED = 363, //b - ALREADY_PERMVOTED = 364, //b - - NOTIFICATION_DISABLED = 370, //a - NO_SUCH_PACKET_PENDING = 380, //a - NO_SUCH_ENTRY_M = 381, //a - NO_SUCH_ENTRY_N = 382, //a - - NO_SUCH_MESSAGE = 392, //a - NO_SUCH_NOTIFY = 393, //a - NO_SUCH_USER = 394, //a - - // NEGATIVE 4XX - NOT_LOGGED_IN = 403, //a - - NO_SUCH_MYLIST_FILE = 410, //a - NO_SUCH_MYLIST_ENTRY = 411, //a - - - // CLIENT SIDE FAILURE 5XX - LOGIN_FAILED = 500, //a - LOGIN_FIRST = 501, //a - ACCESS_DENIED = 502, //a - CLIENT_VERSION_OUTDATED = 503, //a - CLIENT_BANNED = 504, //a - ILLEGAL_INPUT_OR_ACCESS_DENIED = 505, //a - INVALID_SESSION = 506, //a - NO_SUCH_ENCRYPTION_TYPE = 509, //c - ENCODING_NOT_SUPPORTED = 519, //c - - BANNED = 555, //a - UNKNOWN_COMMAND = 598, //a - - - // SERVER SIDE FAILURE 6XX - INTERNAL_SERVER_ERROR = 600, //a - ANIDB_OUT_OF_SERVICE = 601, //a - SERVER_BUSY = 602, //d - API_VIOLATION = 666, //a - }; - - enum State { - StateUnknown = 0, - StateOnHdd = 1, - StateOnCd = 2, - StateDeleted = 3 - }; - - enum FileState { - FileStateNormal = 0, - FileStateCorrupted = 1, - FileStateSelfEdited = 2, - FileStateSelfRipped = 10, - FileStateOnDVD = 11, - FileStateOnVHS = 12, - FileStateOnTV = 13, - FileStateInTheatres = 14, - FileStateStreamed = 15, - FileStateOther = 100 - }; - - Q_ENUMS(Error IdlePolicy ReplyCode State FileState); - - namespace FileFlag { - enum FileFlag { - AniDBFileName = 0x00000001, - // Unused = 0x00000002, - // Unused = 0x00000004, - AiredDate = 0x00000008, - Description = 0x00000010, - LengthInSeconds = 0x00000020, - SubLanguage = 0x00000040, - DubLanguage = 0x00000080, - - FileType = 0x00000100, - VideoResolution = 0x00000200, - VideoBitrate = 0x00000400, - VideoCodec = 0x00000800, - AudioBitrate = 0x00001000, - AudioCodec = 0x00002000, - Source = 0x00004000, - Quality = 0x00008000, - - // Reserved = 0x00010000, - // Unused = 0x00020000, - // Unused = 0x00040000, - Crc32 = 0x00080000, - Sha1 = 0x00100000, - Md5 = 0x00200000, - Ed2k = 0x00400000, - Size = 0x00800000, - - State = 0x01000000, - IsDeprecated = 0x02000000, - OtherEpisodes = 0x04000000, - Lid = 0x08000000, - Gid = 0x10000000, - Eid = 0x20000000, - Aid = 0x40000000, - // Unused = 0x80000000, - - Extension = FileType, - - Byte4 = AniDBFileName | AiredDate | Description - | LengthInSeconds | SubLanguage | DubLanguage, - Byte3 = FileType | VideoResolution | VideoBitrate - | VideoCodec | AudioBitrate | AudioCodec - | Source | Quality, - Byte2 = Crc32 | Sha1 | Md5 | Ed2k, - Byte1 = State | IsDeprecated | OtherEpisodes - | Lid | Gid | Eid | Aid, - AllData = Byte1 | Byte2 | Byte3 | Byte4, - InvalidBits = ~AllData - }; - } - - Q_FLAGS(FileFlag::FileFlag); - Q_DECLARE_FLAGS(FileFlags, FileFlag::FileFlag); - Q_DECLARE_OPERATORS_FOR_FLAGS(FileFlags); - typedef FileFlags FMask; - - namespace FileAnimeFlag { - enum FileAnimeFlag { - DateAidRecordUpdated = 0x00000001, - // Unused = 0x00000002, - // Unused = 0x00000004, - // Unused = 0x00000008, - // Unused = 0x00000010, - // Unused = 0x00000020, - GroupShortName = 0x00000040, - GroupName = 0x00000080, - - // Unused = 0x00000100, - // Unused = 0x00000200, - EpisodeVoteCount = 0x00000400, - EpisodeRating = 0x00000800, - EpKanjiName = 0x00001000, - EpRomajiName = 0x00002000, - EpName = 0x00004000, - EpNo = 0x00008000, - - // Retired = 0x00010000, - // Retired = 0x00020000, - SynonymList = 0x00040000, - ShortNameList = 0x00080000, - OtherName = 0x00100000, - EnglishName = 0x00200000, - KanjiName = 0x00400000, - RomajiName = 0x00800000, - - // Reserved = 0x01000000, - CateogryList = 0x02000000, - RelatedAidType = 0x04000000, - RelatedAidList = 0x08000000, - Type = 0x10000000, - Year = 0x20000000, - HighestEpisodeNumber = 0x40000000, - AnimeTotalEpisodes = 0x80000000, - - Byte4 = DateAidRecordUpdated | GroupShortName - | GroupName, - Byte3 = EpisodeVoteCount | EpisodeRating - | EpKanjiName | EpRomajiName | EpName - | EpNo, - Byte2 = SynonymList | ShortNameList - | OtherName | EnglishName | KanjiName - | RomajiName, - Byte1 = CateogryList | RelatedAidType - | RelatedAidList | Type | Year - | HighestEpisodeNumber - | AnimeTotalEpisodes, - AllData = Byte1 | Byte2 | Byte3 | Byte4, - InvalidBits = ~AllData - }; - } - - Q_FLAGS(FileAnimeFlag::FileAnimeFlag); - Q_DECLARE_FLAGS(FileAnimeFlags, FileAnimeFlag::FileAnimeFlag); - Q_DECLARE_OPERATORS_FOR_FLAGS(FileAnimeFlags); - typedef FileAnimeFlag::FileAnimeFlag FileAMask; - - namespace AnimeFlag { - static const qint64 CategoryWeightList = Q_INT64_C(0x0000000000000001); - static const qint64 CategoryList = Q_INT64_C(0x0000000000000002); - static const qint64 RelatedAidType = Q_INT64_C(0x0000000000000004); - static const qint64 RelatedAidList = Q_INT64_C(0x0000000000000008); - static const qint64 Type = Q_INT64_C(0x0000000000000010); - static const qint64 Year = Q_INT64_C(0x0000000000000020); - // static const qint64 Unused = Q_INT64_C(0x0000000000000040); - static const qint64 Aid = Q_INT64_C(0x0000000000000080); - - // static const qint64 Retired = Q_INT64_C(0x0000000000000100); - // static const qint64 Retired = Q_INT64_C(0x0000000000000200); - static const qint64 SynonymList = Q_INT64_C(0x0000000000000400); - static const qint64 ShortNameList = Q_INT64_C(0x0000000000000800); - static const qint64 OtherName = Q_INT64_C(0x0000000000001000); - static const qint64 EnglishName = Q_INT64_C(0x0000000000002000); - static const qint64 KanjiName = Q_INT64_C(0x0000000000004000); - static const qint64 RomajiName = Q_INT64_C(0x0000000000008000); - - static const qint64 CategoryIdList = Q_INT64_C(0x0000000000010000); - static const qint64 PicName = Q_INT64_C(0x0000000000020000); - static const qint64 Url = Q_INT64_C(0x0000000000040000); - static const qint64 EndDate = Q_INT64_C(0x0000000000080000); - static const qint64 AirDate = Q_INT64_C(0x0000000000100000); - static const qint64 SpecialEpCount = Q_INT64_C(0x0000000000200000); - static const qint64 NormalEpCount = Q_INT64_C(0x0000000000400000); - static const qint64 Episodes = Q_INT64_C(0x0000000000800000); - - static const qint64 Is18Restricted = Q_INT64_C(0x0000000001000000); - static const qint64 AwardList = Q_INT64_C(0x0000000002000000); - static const qint64 ReviewCount = Q_INT64_C(0x0000000004000000); - static const qint64 AverageReviewRating = Q_INT64_C(0x0000000008000000); - static const qint64 TempVoteCount = Q_INT64_C(0x0000000010000000); - static const qint64 TempRating = Q_INT64_C(0x0000000020000000); - static const qint64 VoteCount = Q_INT64_C(0x0000000040000000); - static const qint64 Rating = Q_INT64_C(0x0000000080000000); - - static const qint64 DateRecordUpdated = Q_INT64_C(0x0000000100000000); - // static const qint64 Unused = Q_INT64_C(0x0000000200000000); - // static const qint64 Unused = Q_INT64_C(0x0000000400000000); - // static const qint64 Unused = Q_INT64_C(0x0000000800000000); - static const qint64 AniemNfoId = Q_INT64_C(0x0000001000000000); - static const qint64 AllCinemaId = Q_INT64_C(0x0000002000000000); - static const qint64 ANNId = Q_INT64_C(0x0000004000000000); - static const qint64 AnimePlanetId = Q_INT64_C(0x0000008000000000); - - // static const qint64 Unused = Q_INT64_C(0x0000010000000000); - // static const qint64 Unused = Q_INT64_C(0x0000020000000000); - // static const qint64 Unused = Q_INT64_C(0x0000040000000000); - // static const qint64 Unused = Q_INT64_C(0x0000080000000000); - static const qint64 ProducerNameList = Q_INT64_C(0x0000100000000000); - static const qint64 ProducerIdList = Q_INT64_C(0x0000200000000000); - static const qint64 CreatorIdList = Q_INT64_C(0x0000400000000000); - static const qint64 CharacterIdList = Q_INT64_C(0x0000800000000000); - - static const qint64 Byte1 = CategoryWeightList | CategoryList | RelatedAidType - | RelatedAidList | Type | Year | Aid; - static const qint64 Byte2 = SynonymList | ShortNameList | OtherName - | EnglishName | KanjiName | RomajiName; - static const qint64 Byte3 = CategoryIdList | PicName | Url | EndDate | AirDate - | SpecialEpCount | NormalEpCount | Episodes; - static const qint64 Byte4 = Is18Restricted | AwardList | ReviewCount - | AverageReviewRating | TempVoteCount | TempRating - | VoteCount | Rating; - static const qint64 Byte5 = DateRecordUpdated | AniemNfoId | AllCinemaId - | ANNId | AnimePlanetId; - static const qint64 Byte6 = ProducerNameList | ProducerIdList | CreatorIdList - | CharacterIdList; - static const qint64 AllData = Byte1 | Byte2 | Byte3 | Byte4 - | Byte5 | Byte6; - static const qint64 InvalidBits = ~AllData; - } - - typedef qint64 AnimeFlags; - typedef AnimeFlags AMask; - - namespace HashPrivate { - static const qint64 ED2K_PART_SIZE = 9728000; - } -} - -Q_DECLARE_METATYPE(AniDBUdpClient::Error); -Q_DECLARE_METATYPE(AniDBUdpClient::IdlePolicy); -Q_DECLARE_METATYPE(AniDBUdpClient::ReplyCode); -Q_DECLARE_METATYPE(AniDBUdpClient::State); -Q_DECLARE_METATYPE(AniDBUdpClient::FileState); - -Q_DECLARE_METATYPE(QFileInfo); - -#endif // ANIDBUDPCLIENT_GLOBAL_H diff --git a/lib/anidbudpclient/authcommand.cpp b/lib/anidbudpclient/authcommand.cpp deleted file mode 100644 index 6153b66..0000000 --- a/lib/anidbudpclient/authcommand.cpp +++ /dev/null @@ -1,125 +0,0 @@ -#include "authcommand.h" - -#include "client.h" - -namespace AniDBUdpClient { - -AuthCommand::AuthCommand() : AbstractCommand() -{ - m_compression = false; -} - -AuthCommand::AuthCommand(const QString &user, const QString &pass) : AbstractCommand() -{ - m_user = user; - m_pass = pass; - m_compression = false; -} - -QString AuthCommand::user() const -{ - return m_user; -} - -void AuthCommand::setUser(const QString &user) -{ - m_user = user; -} - -QString AuthCommand::pass() const -{ - return m_pass; -} - -void AuthCommand::setPass(const QString &pass) -{ - m_pass = pass; -} - -bool AuthCommand::compression() const -{ - return m_compression; -} - -void AuthCommand::setCompression(bool compress) -{ - m_compression = compress; -} - -bool AuthCommand::waitForResult() const -{ - return true; -} - -bool AuthCommand::requiresSession() const -{ - return false; -} - -Command AuthCommand::rawCommand() const -{ - Command command; - - command.first = "AUTH"; - - command.second["user"] = m_user.toLower(); // All usernames are lower case - command.second["pass"] = m_pass; - command.second["protover"] = Client::protocolVersion; - command.second["client"] = Client::clientName.constData(); - command.second["clientver"] = Client::clientVersion; - command.second["enc"] = "UTF8"; - command.second["comp"] = m_compression; - return command; -} - -// === - -QString AuthReply::sessionId() const -{ - return m_sessionId; -} - -QString AuthReply::errorString() const -{ - return m_errorString; -} - -void AuthReply::clearError() -{ - m_errorString = ""; -} - -void AuthReply::setRawReply(ReplyCode replyCode, const QString &reply) -{ -qDebug() << replyCode; - AbstractReply::setRawReply(replyCode, reply); - - switch(replyCode) - { - - case LOGIN_ACCEPTED: - case LOGIN_ACCEPTED_NEW_VER: - m_errorString = ""; - m_sessionId = m_rawReply.mid(0, m_rawReply.indexOf(" ")); - emit replyReady(true); - break; - case LOGIN_FAILED: - m_errorString = tr("Username and/or password incorrect"); - emit replyReady(false); - break; - case CLIENT_VERSION_OUTDATED: - m_errorString = tr("Client version outdated"); - emit replyReady(false); - break; - case CLIENT_BANNED: - m_errorString = tr("Banned: %1").arg(m_rawReply.mid(m_rawReply.indexOf("BANNED") + 1)); - emit replyReady(false); - break; - default: -qDebug() << "ERROR CODE: " << replyCode; - m_errorString = tr("Unknown errorString (CODE: %1)").arg(m_replyCode); - emit replyReady(false); - } -} - -} // namespace AniDBUdpClient diff --git a/lib/anidbudpclient/authcommand.h b/lib/anidbudpclient/authcommand.h deleted file mode 100644 index 806e5ed..0000000 --- a/lib/anidbudpclient/authcommand.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef AUTHCOMMAND_H -#define AUTHCOMMAND_H - -#include "abstractcommand.h" - -namespace AniDBUdpClient { - -class AuthReply; - -class AuthCommand : public AbstractCommand -{ -/* - Q_PROPERTY(QString user READ user WRITE setUser); - Q_PROPERTY(QString pass READ pass WRITE setPass); - Q_PROPERTY(bool compression READ compression WRITE setCompression); -*/ -public: - typedef AuthReply ReplyType; - AuthCommand(); - AuthCommand(const QString &user, const QString &pass); - - QString user() const; - void setUser(const QString &user); - - QString pass() const; - void setPass(const QString &pass); - - bool compression() const; - void setCompression(bool compress); - - - bool waitForResult() const; - bool requiresSession() const; - - Command rawCommand() const; - -private: - QString m_user; - QString m_pass; - - bool m_compression; -}; - -class AuthReply : public AbstractReply -{ - Q_OBJECT - REPLY_DEFINITION_HELPER(Auth) - - Q_PROPERTY(QString sessionId READ sessionId); - Q_PROPERTY(QString errorString READ errorString RESET clearError); - -public: - - QString sessionId() const; - QString errorString() const; - void clearError(); - - void setRawReply(ReplyCode replyCode, const QString &reply); - -private: - QString m_sessionId; - QString m_errorString; -}; - -} // namespace AniDBUdpClient - -#endif // AUTHCOMMAND_H diff --git a/lib/anidbudpclient/circularbuffer.h b/lib/anidbudpclient/circularbuffer.h deleted file mode 100644 index 4973e26..0000000 --- a/lib/anidbudpclient/circularbuffer.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef CIRCULARBUFFER_H -#define CIRCULARBUFFER_H - -#include -namespace AniDBUdpClient { -namespace HashPrivate { - -template class CircularBuffer -{ -public: - CircularBuffer() - { - // Set N to SIZE - free.release(SIZE); - r = w = 0; - m_end = false; - } - - bool put(T data, bool last = false, int timeout = SEMAPHORE_ACQUIRE_TIMEOUT) - { - if (m_end) return false; - - if (!free.tryAcquire(1, timeout)) - return false; - buffer[w] = data; - m_end = last; - ++w; - w %= SIZE; - used.release(); - - return true; - } - - bool get(T *data, int timeout = SEMAPHORE_ACQUIRE_TIMEOUT) - { - if (!used.tryAcquire(1, timeout)) - return false; - *data = buffer[r]; - ++r; - r %= SIZE; - free.release(); - return true; - } - - bool end() const - { - return m_end && used.available() == 0; - } - - bool reset() - { - if (!end()) - return false; - - m_end = false; - r = w = 0; - return true; - } - -private: - T buffer[SIZE]; - QSemaphore free; - QSemaphore used; - - int r; - int w; - bool m_end; - - static const int SEMAPHORE_ACQUIRE_TIMEOUT = 100; -}; - -typedef CircularBuffer Buffer; - -} // namespace HashPrivate -} // namesapce AniDBUdpClient - -#endif // CIRCULARBUFFER_H diff --git a/lib/anidbudpclient/client.cpp b/lib/anidbudpclient/client.cpp deleted file mode 100644 index e55c025..0000000 --- a/lib/anidbudpclient/client.cpp +++ /dev/null @@ -1,879 +0,0 @@ -#include "client.h" - -#include -#include -#include - -#include -#include -#include -#include - -#include "rawcommand.h" -#include "logoutcommand.h" -#include "uptimecommand.h" -#include "hash.h" - -#include - -namespace AniDBUdpClient { - -const QByteArray Client::clientName = CLIENT_NAME; -const int Client::clientVersion = CLIENT_VERSION; -const int Client::protocolVersion = PROTOCOL_VERSION; - -Client::Client(QObject *parent) : QObject(parent) -{ -qDebug() << "Api instance init!"; - - authReply = 0; - uptimeReply = 0; - - m_error = NoError; - m_idlePolicy = DoNothingIdlePolicy; - - disconnecting = false; - commandsTimedOut = 0; - - socket = new QUdpSocket(this); - - commandTimer = new QTimer(this); - commandTimer->setSingleShot(true); - - idleTimer = new QTimer(this); - idleTimer->setSingleShot(true); - - m_localPort = 9001; - m_host = "api.anidb.info"; - m_hostPort = 9000; - - setFloodInterval(3); - - stateMachine = new QStateMachine(this); - - errorState = new QState; - disconnectedState = new QState; - connectingState = new QState; - connectedState = new QState; - authenticatingState = new QState(connectedState); - idleState = new QState(connectedState); - idleTimeoutState = new QState(connectedState); - sendState = new QState(connectedState); - waitState = new QState(connectedState); - recieveState = new QState; - recieveFailState = new QState; - connectedHistoryState = new QHistoryState(connectedState); - - stateMachine->addState(errorState); - stateMachine->addState(disconnectedState); - stateMachine->addState(connectingState); - stateMachine->addState(connectedState); - stateMachine->addState(recieveState); - stateMachine->addState(recieveFailState); - stateMachine->setInitialState(disconnectedState); - - connectedState->setInitialState(sendState); - connectedHistoryState->setDefaultState(sendState); - - // ------------- Transitions --------------------- - connectedState->addTransition(this, SIGNAL(startDisconnecting()), disconnectedState); - connectedState->addTransition(socket, SIGNAL(readyRead()), recieveState); - connectedState->addTransition(this, SIGNAL(sendFailed()), recieveFailState); - - disconnectedState->addTransition(this, SIGNAL(startConnecting()), connectingState); - - connectingState->addTransition(this, SIGNAL(connected()), connectedState); - - authenticatingState->addTransition(this, SIGNAL(startSending()), sendState); - authenticatingState->addTransition(this, SIGNAL(authenticated()), sendState); - - sendState->addTransition(this, SIGNAL(queueEmpty()), idleState); - sendState->addTransition(this, SIGNAL(commandSent()), waitState); - sendState->addTransition(this, SIGNAL(startAuthentication()), authenticatingState); - - waitState->addTransition(commandTimer, SIGNAL(timeout()), sendState); - - idleState->addTransition(this, SIGNAL(startSending()), sendState); - idleState->addTransition(idleTimer, SIGNAL(timeout()), idleTimeoutState); - - idleTimeoutState->addTransition(this, SIGNAL(startSending()), sendState); - - recieveState->addTransition(this, SIGNAL(authenticated()), authenticatingState); - recieveState->addTransition(this, SIGNAL(connectionError()), errorState); - recieveState->addTransition(this, SIGNAL(replyRecieved()), connectedHistoryState); - - - recieveFailState->addTransition(this, SIGNAL(connectionError()), errorState); - - recieveFailState->addTransition(sendState); - // ------------ END Transitions ------------------- - - // ------------- Methods --------------------- - QObject::connect(errorState, SIGNAL(entered()), this, SLOT(enterErrorState())); - QObject::connect(disconnectedState, SIGNAL(entered()), this, SLOT(enterDisconnectedState())); - QObject::connect(connectingState, SIGNAL(entered()), this, SLOT(enterConnectingState())); - QObject::connect(connectedState, SIGNAL(entered()), this, SLOT(enterConnectedState())); - QObject::connect(authenticatingState, SIGNAL(entered()), this, SLOT(enterAuthenticatingState())); - QObject::connect(sendState, SIGNAL(entered()), this, SLOT(enterSendState())); - QObject::connect(waitState, SIGNAL(entered()), this, SLOT(enterWaitState())); - QObject::connect(idleState, SIGNAL(entered()), this, SLOT(enterIdleState())); - QObject::connect(idleState, SIGNAL(exited()), this, SLOT(exitIdleState())); - QObject::connect(idleTimeoutState, SIGNAL(entered()), this, SLOT(enterIdleTiemoutState())); - - QObject::connect(recieveState, SIGNAL(entered()), this, SLOT(enterRecieveState())); - QObject::connect(recieveFailState, SIGNAL(entered()), this, SLOT(enterRecieveFailState())); - // ------------ END Methods ------------------- - - stateMachine->start(); - // Process the event that starts the state machine. - QCoreApplication::processEvents(); -} - -Client::~Client() -{ - foreach (CommandData *cmd, sentCommands) - { - // Send CLIENT_DESTROYED to indicate that no real reply will come. - cmd->command->setRawReply(CLIENT_DESTROYED, ""); - } - sentCommands.clear(); - - clearCommandQueue(); - - if (!m_sessionId.isEmpty()) - { - while (commandTimer->isActive()) - QCoreApplication::processEvents(); - - logout(true); - socket->waitForBytesWritten(5); - } - disconnect(); - - if (authReply) - { - delete authReply; - authReply = 0; - } - if (uptimeReply) - { - delete uptimeReply; - uptimeReply = 0; - } -} - -QString Client::host() const -{ - return m_host; -} - -void Client::setHost(const QString &host, quint16 port) -{ - m_host = host; - if (port) - m_hostPort = port; - m_hostAddress = QHostAddress(); -} - -quint16 Client::hostPort() const -{ - return m_hostPort; -} - -void Client::setHostPort(quint16 port) -{ - m_hostPort = port; -} - -quint16 Client::localPort() const -{ - return m_localPort; -} - -void Client::setLocalPort(quint16 port) -{ - m_localPort = port; -} - -QString Client::user() const -{ - return authCommand.user(); -} - -void Client::setUser(const QString &user) -{ - authCommand.setUser(user); -} - -QString Client::pass() const -{ - return authCommand.pass(); -} - -void Client::setPass(const QString &pass) -{ - authCommand.setPass(pass); -} - -bool Client::compression() const -{ - return authCommand.compression(); -} - -void Client::setCompression(bool compress) -{ - authCommand.setCompression(compress); -} - -int Client::floodInterval() const -{ - return m_floodInterval; -} - -void Client::setFloodInterval(int interval) -{ - m_floodInterval = interval * 1000; -} - -IdlePolicy Client::idlePolicy() const -{ - return m_idlePolicy; -} - -void Client::setIdlePolicy(IdlePolicy policy) -{ - m_idlePolicy = policy; -} - -Error Client::error() const -{ - return m_error; -} - -QString Client::errorString() const -{ - return m_errorString; -} - -// ------------------------------------------------------------------------------ - -void Client::enterErrorState() -{ -qDebug() << "Entering Error State"; - disconnect(); -} - -void Client::enterDisconnectedState() -{ -qDebug() << "Entering Disconnected State"; - if (socket->state() == QAbstractSocket::BoundState) - socket->disconnectFromHost(); -} - -void Client::enterConnectingState() -{ -qDebug() << "Entering Connecting State"; - - if (!m_hostAddress.isNull()) - { - if (socket->bind(QHostAddress::Any, m_localPort)) - { -qDebug() << "Successful connection"; - emit connected(); - return; - } - - m_error = BindError; - m_errorString = socket->errorString(); -qDebug() << QString("Bind on Address: %1 port: %2 failed").arg(m_hostAddress.toString()).arg(m_localPort); - emit connectionError(); - return; - } - QHostInfo::lookupHost(m_host, this, SLOT(lookedUp(QHostInfo))); -} - -void Client::lookedUp(QHostInfo hostInfo) -{ -qDebug() << "Host lookup finished"; - if (hostInfo.error() != QHostInfo::NoError) - { - qDebug() << "Lookup failed:" << hostInfo.errorString(); - m_error = HostLookupError; - m_errorString = hostInfo.errorString(); - emit connectionError(); - return; - } - m_hostAddress = hostInfo.addresses()[0]; - - // TODO could it be nicer? - enterConnectingState(); -} - -void Client::enterConnectedState() -{ -qDebug() << "Entering Connected State"; - emit connected(); -} - -void Client::enterAuthenticatingState() -{ -qDebug() << "Entering Authenticating State"; - - if (m_sessionId.isEmpty()) - { - if (authReply != 0) authReply->deleteLater(); - authReply = createReply(authCommand); - QObject::connect(authReply, SIGNAL(replyReady(bool)), this, SLOT(doAuthenticate(bool))); - enqueueControlCommand(authReply, true); - return; - } - emit authenticated(); -} - -void Client::doAuthenticate(bool success) -{ -qDebug() << "doAuthenticate init"; - if (success) - { -qDebug() << "success!"; - m_sessionId = authReply->sessionId().toUtf8(); - emit authenticated(); - return; - } - - m_error = AuthenticationError; - m_errorString = authReply->errorString(); - - emit connectionError(); -} - -void Client::enterSendState() -{ -qDebug() << "Entering Send State"; - - // Do not send commands if wait time didn't end - // Happens if sendState is entered from recv* states. - if (commandTimer->isActive()) - { -qDebug() << "commandTimer activein sendState"; - emit commandSent(); - return; - } - - // Control commands (auth and such) have priority over any other commands. - if (!controlCommandQueue.isEmpty()) - { -qDebug() << "Sending Control Command"; - sendCommand(controlCommandQueue.dequeue(), true); - emit commandSent(); - return; - } - - if (commandQueue.isEmpty()) - { - emit queueEmpty(); - return; - } - sendCommand(commandQueue.dequeue()); - emit commandSent(); -} - -void Client::enterWaitState() -{ -qDebug() << "Entering Wait State"; - - // Do not restart timer if it is active - if (!commandTimer->isActive()) - commandTimer->start(m_floodInterval); -} - -void Client::enterIdleState() -{ -qDebug() << "Entering Idle State"; -qDebug() << m_idlePolicy; - - // If not loogged in, nothing has to be done in idle state. - if (m_sessionId.isEmpty()) - return; - - switch (m_idlePolicy) - { - case LogoutIdlePolicy: - idleTimer->start(UDP_API_INACTIVITY_LOGOUT * 1000); - break; - case KeepAliveIdlePolicy: - idleTimer->start(UDP_API_INACTIVITY_UPDATE * 1000); - break; - case ImmediateLogoutIdlePolicy: - logout(true); - break; - default: - break; - } -} - -void Client::exitIdleState() -{ -qDebug() << "Exiting Idle State"; - idleTimer->stop(); -} - -void Client::enterIdleTiemoutState() -{ -qDebug() << "Entering IdleTiemout State"; - switch (m_idlePolicy) - { - case DoNothingIdlePolicy: - m_sessionId = ""; - break; - case KeepAliveIdlePolicy: - enqueueControlCommand(uptimeReply); - default: - break; - } -} - -void Client::enterRecieveState() -{ -qDebug() << "Entering Recieve State"; - while (socket->hasPendingDatagrams()) - { - char data[UDP_DATAGRAM_MAXIMUM_SIZE]; - int size; - QHostAddress sender; - quint16 senderPort; - size = socket->readDatagram(data, UDP_DATAGRAM_MAXIMUM_SIZE, &sender, &senderPort); - - QByteArray tmp(data, size); - - if (sender != m_hostAddress) - { - qDebug() << QString("Recieved datagram from unknown host: %1 port: %2\nRaw datagram contents:%3\nDiscarding datagram.") - .arg(sender.toString()) - .arg(senderPort) - .arg(tmp.constData()); - continue; - } - - if (authCommand.compression() && tmp.mid(0, 2) == "00") - { -qDebug() << "COMPRESSED DATAGRAM = " << tmp; - tmp = qUncompress(tmp); - } - - QString reply = QString::fromUtf8(tmp); - - qDebug() << QString("Recieved datagram from [%1]:%2\nRaw datagram contents:%3") - .arg(m_host) - .arg(senderPort) - .arg(reply); - - - // Check if it is a 6xx error. - { - QRegExp rx("(?:50[34]|555|6[0-9]{2}) "); - if (rx.exactMatch(tmp.mid(0, 4))) - { - - int replyCode = tmp.mid(0, 3).toInt(); - switch (replyCode) - { - case INTERNAL_SERVER_ERROR: - m_error = ServerError; - m_errorString = tr("Internal Server Error"); - emit connectionError(); - goto endLoop; - break; - case ANIDB_OUT_OF_SERVICE: - m_error = ServerError; - m_errorString = tr("AniDB out of service"); - emit connectionError(); - goto endLoop; - break; - case SERVER_BUSY: - m_error = ServerError; - m_errorString = tr("Server busy. Try again later. Wait at least 30 minutes."); - emit connectionError(); - goto endLoop; - default: - if (replyCode > 601 && replyCode < 700) - { - qDebug() << QString("SERVER ERROR %1").arg(replyCode); - } - emit connectionError(); - goto endLoop; - break; - } - continue; - } - } - - QByteArray commandId = tmp.mid(0, 5); - - commandsTimedOut = 0; - - // Do not parse reply for unknown commands. - if (!sentCommands.contains(commandId)) - { -qDebug() << QString("Unknown command with id: %1, discarding") - .arg(commandId.constData()); - continue; - } -qDebug() << QString("Sending reply to command with id: %1") - .arg(commandId.constData()); - - // tag + space = 5 + 1 - QByteArray replyCodeText = tmp.mid(6, 3); - - bool ok; - int replyCodeInt = replyCodeText.toInt(&ok); - ReplyCode replyCode = UNKNOWN_REPLY; - if (ok) - { - replyCode = ReplyCode(replyCodeInt); - } - - CommandData *commandData = sentCommands.take(commandId); - AbstractReply *cmd = commandData->command; - bool controlCommand = commandData->controlCommand; - delete commandData; - - // Requeue command and reauthenticate if not logged in. - switch (replyCode) - { - case LOGIN_FIRST: - case INVALID_SESSION: -qDebug() << "LOGIN FIRST required, authing"; - m_sessionId.clear(); - if (controlCommand) - enqueueControlCommand(cmd); - else - enqueueCommand(cmd); - emit startAuthentication(); - goto continueLoop; - break; - case LOGGED_OUT: - m_sessionId.clear(); - break; - case CLIENT_VERSION_OUTDATED: - m_error = ClientVersionOutdatedError; - m_errorString = tr("Client version outdated"); - emit connectionError(); - goto endLoop; - break; - case CLIENT_BANNED: - m_error = ClientBannedError; - m_errorString = tr("UDP Client banned"); - emit connectionError(); - goto endLoop; - break; - case BANNED: - m_error = BannedError; - m_errorString = tr("User banned from UDP API: %1").arg(reply.mid(10)); - emit connectionError(); - goto endLoop; - break; - case INTERNAL_SERVER_ERROR: - m_error = ServerError; - m_errorString = tr("Internal Server Error"); - emit connectionError(); - goto endLoop; - break; - case ANIDB_OUT_OF_SERVICE: - m_error = ServerError; - m_errorString = tr("AniDB out of service"); - emit connectionError(); - goto endLoop; - break; - case SERVER_BUSY: - m_error = ServerError; - m_errorString = tr("Server busy. Try again later. Wait at least 30 minutes."); - emit connectionError(); - goto endLoop; - break; - default: - if (replyCode > 601 && replyCode < 700) - { - qDebug() << QString("SERVER ERROR %1").arg(replyCode); - emit connectionError(); - } - break; - } - // tag + space + replyCode + space = 5 + 1 + 3 + 1 - reply = reply.mid(10); - - cmd->setRawReply(replyCode, reply); - - // Delete if command is owned by the client. - if (!cmd->command().waitForResult()) - delete cmd; -continueLoop: - ; - } - // replyRecieved() should be emitted on success - // all connection errors go directly to endLoops - emit replyRecieved(); -endLoop: - ; -} - -void Client::enterRecieveFailState() -{ -qDebug() << "Entering RecieveFail State"; -} - -// ------------------------------------------------------------------------------------- - -void Client::clearCommandQueue() -{ - // Delete all unsent commands that are managed by the client. - while (!controlCommandQueue.isEmpty()) - { - AbstractReply *reply = commandQueue.dequeue(); - if (!reply->command().waitForResult()) - { - // These are owned by the client - delete reply; - } - else - { - // Send CLIENT_DESTROYED to indicate that no real reply will come. - reply->setRawReply(CLIENT_DESTROYED, ""); - } - } - - while (!commandQueue.isEmpty()) - { - AbstractReply *reply = commandQueue.dequeue(); - if (!reply->command().waitForResult()) - { - // These are owned by the client - delete reply; - } - else - { - // Send CLIENT_DESTROYED to indicate that no real reply will come. - reply->setRawReply(CLIENT_DESTROYED, ""); - } - } -} - -Client *Client::instance() -{ - if (!m_instance) - m_instance = new Client; - - return m_instance; -} - -void Client::destroy() -{ - delete m_instance; - m_instance = 0; -} - -void Client::connect() -{ -qDebug() << "Connecting"; - emit startConnecting(); -} - -void Client::disconnect(bool graceful) -{ -qDebug() << "Disconnecting" << (graceful ? "gracefully" : ""); - if (graceful) - { - disconnecting = true; - return; - } - emit startDisconnecting(); -} - -void Client::send(AbstractReply *command) -{ - connect(); - - QObject::connect(command, SIGNAL(destroyed(QObject*)), this, SLOT(removeDeletedFromQueue(QObject*))); - enqueueCommand(command); -} - -void Client::sendRaw(QByteArray command) -{ -qDebug() << QString("Sending RAW command: %1").arg(command.constData()); - enqueueCommand(createReply(RawCommand(command))); -} - -void Client::cancel(AbstractReply *reply) -{ - commandQueue.removeAll(reply); - if (reply) - sentCommands.remove(reply->id()); -} - -void Client::logout() -{ - logout(false); -} - -void Client::logout(bool force) -{ - if (m_sessionId.isEmpty()) - return; - enqueueControlCommand(createReply(LogoutCommand()), force); -} - -void Client::commandTimeout(const QByteArray &commandId) -{ -qDebug() << commandId << "timed out"; - if (!sentCommands.contains(commandId)) - return; - - CommandData *cmd = sentCommands.take(commandId); - - // Regenerate ID. - cmd->command->setId(nextCommandId()); - - if (cmd->controlCommand) - enqueueControlCommand(cmd->command); - else - enqueueCommand(cmd->command); - - delete cmd; - - ++commandsTimedOut; - - emit sendFailed(); -} - -void Client::enqueueCommand(AbstractReply *command, bool first) -{ - if (first) - { - commandQueue.push_front(command); - } - else - { - commandQueue.enqueue(command); - } - - emit startSending(); -} - -void Client::enqueueControlCommand(AbstractReply *command, bool first) -{ - if (first) - { - controlCommandQueue.push_front(command); - } - else - { - controlCommandQueue.enqueue(command); - } - - emit startSending(); -} - -void Client::sendCommand(AbstractReply *command, bool controlCommand) -{ - if (m_sessionId.isEmpty() && command->command().requiresSession()) - { - if (controlCommand) - enqueueControlCommand(command, true); - else - enqueueCommand(command, true); - emit startAuthentication(); - return; - } - - Command cmdPair = command->command().rawCommand(); - QByteArray datagram = buildCmd(cmdPair.first, cmdPair.second); - - QByteArray commandId = command->id(); - - datagram += datagram.contains(" ") ? "&" : " "; - datagram += "tag=" + commandId; - - if (m_sessionId.length()) - datagram += "&s=" + m_sessionId; - - CommandData *cmd = new CommandData(command, commandId, controlCommand); - QObject::connect(cmd, SIGNAL(timeout(QByteArray)), this, SLOT(commandTimeout(QByteArray))); - - sentCommands[commandId] = cmd; - -qDebug() << QString("SENDING datagram:\n\t%1\nto: %2 ([%3]:%4)") - .arg(datagram.constData()) - .arg(m_host) - .arg(m_hostAddress.toString()) - .arg(m_hostPort); - - socket->writeDatagram(datagram, m_hostAddress, m_hostPort); -} - -void Client::removeDeletedFromQueue(QObject *object) -{ - AbstractReply *cmd = qobject_cast(object); - if (cmd) cancel(cmd); -} - -QByteArray Client::buildCmd(const QString &cmd, const QVariantMap &args) -{ - QString result = cmd; - for (QVariantMap::const_iterator it = args.constBegin(); it != args.constEnd(); ++it) - { - if (!it.value().canConvert(QVariant::String)) - { - qWarning("Passed value cannot be converted to string!"); - continue; - } - - // The string version of bool is "true" or "false", but the API expects 1 or 0 - QString value; - if (it.value().type() == QVariant::Bool) - { - value = it.value().toBool() ? "1" : "0"; - } - else - { - value = it.value().toString(); - } - - if (it == args.constBegin()) - result += QString(" %1=%2").arg(it.key(), value); - else - result += QString("&%1=%2").arg(it.key(), value); - } - return result.toUtf8(); -} - -QByteArray Client::nextCommandId(int len) -{ - static const char chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"; - static const int numChars = sizeof(chars) - 1; - - QByteArray result(len, '-'); - while (len--) - result[len] = chars[qrand() % numChars]; - -qDebug() << QString("Generated id %1").arg(result.constData()); - return result; -} - -Client *Client::m_instance = 0; - -CommandData::CommandData(AbstractReply *command, const QByteArray &commandId, bool controlCommand) : QObject() -{ - this->command = command; - this->controlCommand = controlCommand; - this->commandId = commandId; - - connect(&timer, SIGNAL(timeout()), this, SLOT(timerTimeout())); - timer.start(Client::UDP_API_COMMAND_TIMEOUT * 1000); -} - -void CommandData::timerTimeout() -{ - emit timeout(commandId); -} - -} // namespace AniDBUdpClient diff --git a/lib/anidbudpclient/client.h b/lib/anidbudpclient/client.h deleted file mode 100644 index 1d197ff..0000000 --- a/lib/anidbudpclient/client.h +++ /dev/null @@ -1,266 +0,0 @@ -#ifndef ANIDBUDPCLIENT_H -#define ANIDBUDPCLIENT_H - -#include "anidbudpclient_global.h" -#include -#include -#include -#include -#include -#include - -#include "anidbudpclient_global.h" -#include "authcommand.h" - -class QStateMachine; -class QState; -class QHistoryState; - -class QUdpSocket; -class QTimer; - -namespace AniDBUdpClient { - -class AbstractCommand; -class LogoutReply; -class UptimeReply; - -class CommandData; - -class ANIDBUDPCLIENTSHARED_EXPORT Client : public QObject -{ - friend class CommandData; - friend class AbstractReply; - - Q_OBJECT - Q_ENUMS(AniDBUdpClient::State AniDBUdpClient::Error AniDBUdpClient::IdlePolicy AniDBUdpClient::ReplyCode); - - Q_PROPERTY(QString host READ host WRITE setHost); - Q_PROPERTY(quint16 hostPort READ hostPort WRITE setHostPort); - Q_PROPERTY(quint16 localPort READ localPort WRITE setLocalPort); - - Q_PROPERTY(QString user READ user WRITE setUser); - Q_PROPERTY(QString pass READ pass WRITE setPass); - - /* - Send commands in \interval seconds intervals - */ - Q_PROPERTY(int floodInterval READ floodInterval WRITE setFloodInterval); - Q_PROPERTY(IdlePolicy idlePolicy READ idlePolicy WRITE setIdlePolicy); - Q_PROPERTY(Error error READ error); - Q_PROPERTY(QString errorString READ errorString); - -public: - static const QByteArray clientName; - static const int clientVersion; - static const int protocolVersion; - -protected: - Client(QObject *parent = 0); - virtual ~Client(); - -public: - // ------------------ Properties ------------------ - QString host() const; - void setHost(const QString &host, quint16 port = 0); - quint16 hostPort() const; - void setHostPort(quint16 port); - quint16 localPort() const; - void setLocalPort(quint16 port); - - QString user() const; - void setUser(const QString &user); - QString pass() const; - void setPass(const QString &user); - - bool compression() const; - void setCompression(bool compress); - - int floodInterval() const; - void setFloodInterval(int interval); - - IdlePolicy idlePolicy() const; - void setIdlePolicy(IdlePolicy policy); - - Error error() const; - QString errorString() const; - - // ---------------- END Properties ---------------- - - void clearCommandQueue(); - - static Client *instance(); - static void destroy(); - -public slots: - void connect(); - - /* - Disconnect from host. - If \graceful is true send all enququed messages first. - */ - void disconnect(bool graceful = false); - -public: - template typename T::ReplyType *send(const T &command, QObject *parent = 0) - { - typename T::ReplyType *reply = createReply(command, parent); - send(reply); - return reply; - } - -private: - template typename T::ReplyType *createReply(const T &command, QObject *parent = 0) - { - return new T::ReplyType(command, nextCommandId(), this, parent); - } -public slots: - - void send(AbstractReply *reply); - - void sendRaw(QByteArray command); - void cancel(AbstractReply *command); - -signals: - - void startConnecting(); - void connected(); - void startDisconnecting(); - void disconnected(); - - void startAuthentication(); - void authenticated(); - void authenticationFailure(); - - void startSending(); - void commandSent(); - void queueEmpty(); - - void replyRecieved(); - void sendFailed(); - - void connectionError(); - -private slots: - void enterErrorState(); - void enterDisconnectedState(); - - void enterConnectingState(); - void lookedUp(QHostInfo hostInfo); - - void enterConnectedState(); - - void enterAuthenticatingState(); - void doAuthenticate(bool success); - - void enterSendState(); - void enterWaitState(); - void enterIdleState(); - void exitIdleState(); - void enterIdleTiemoutState(); - - void enterRecieveState(); - void enterRecieveFailState(); - - void logout(); - - void commandTimeout(const QByteArray &commandId); - - void removeDeletedFromQueue(QObject *object); - -private: - void enqueueCommand(AbstractReply *command, bool first = false); - void enqueueControlCommand(AbstractReply *command, bool first = false); - void sendCommand(AbstractReply *command, bool controlCommand = false); - - void logout(bool force); - - QByteArray buildCmd(const QString &cmd, const QVariantMap &args); - QByteArray nextCommandId(int len = 5); - - QTimer *commandTimer; - QTimer *idleTimer; - QTimer *replyTimeoutTimer; - - QQueue commandQueue; - QQueue controlCommandQueue; - QMap sentCommands; - QUdpSocket *socket; - - - - // Connection params - QString m_host; - QHostAddress m_hostAddress; - quint16 m_hostPort; - quint16 m_localPort; - - int m_floodInterval; - - QByteArray m_sessionId; - - // Misc params - IdlePolicy m_idlePolicy; - Error m_error; - QString m_errorString; - - bool disconnecting; - - int commandsTimedOut; - - AuthCommand authCommand; - AuthReply *authReply; - UptimeReply *uptimeReply; - - static Client *m_instance; - - static const int UDP_DATAGRAM_MAXIMUM_SIZE = 1400; - - // These are in seconds - static const int UDP_API_INACTIVITY_UPDATE = 30 * 60; - static const int UDP_API_INACTIVITY_LOGOUT = 35 * 60; - - static const int UDP_API_COMMAND_TIMEOUT = 30; - - QStateMachine *stateMachine; - QState *errorState; - QState *disconnectedState; - QState *connectingState; - QState *connectedState; - QState *authenticatingState; - - QState *idleState; - QState *idleTimeoutState; - QState *sendState; - QState *waitState; - - QState *recieveState; - QState *recieveFailState; - - QHistoryState *connectedHistoryState; -}; - -class CommandData : QObject -{ - friend class Client; - - Q_OBJECT -public: - AbstractReply *command; - bool controlCommand; - QByteArray commandId; - QTimer timer; - - CommandData(AbstractReply *command, const QByteArray &commandId, bool controlCommand = false); -signals: - void timeout(QByteArray commandId); -private slots: - void timerTimeout(); -}; - -} // namespace AniDBUdpClient - -#include -//Q_SCRIPT_DECLARE_QMETAOBJECT(AniDBUdpClient::Client, QObject*); - -#endif // ANIDBUDPCLIENT_H diff --git a/lib/anidbudpclient/file.cpp b/lib/anidbudpclient/file.cpp deleted file mode 100644 index c8acde7..0000000 --- a/lib/anidbudpclient/file.cpp +++ /dev/null @@ -1,402 +0,0 @@ -#include "file.h" - -#include -#include "client.h" -#include "hash.h" - -#include - -namespace AniDBUdpClient { - -File::File(QObject *parent) : QObject(parent) -{ - init(); -} - -File::File(const QFileInfo &file, QObject *parent) : QObject(parent) -{ - m_file = file; - init(); -} - -File::~File() -{ - if (markReply) - { - delete markReply; - markReply = 0; - } - if (fileReply) - { - delete fileReply; - fileReply = 0; - } - if (addReply) - { - delete addReply; - addReply = 0; - } - if (hashResult) - { - delete hashResult; - hashResult = 0; - } -} - -QFileInfo File::file() const -{ - return m_file; -} - -void File::setFile(const QFileInfo &file) -{ - if (m_file == file) - return; - - m_file = file; -} - -qint64 File::size() -{ - return m_file.size(); -} - -QByteArray File::ed2k() -{ - return m_ed2k; -} - -File::ActionState File::hashingState() const -{ - return m_hashingState; -} - -File::ActionState File::renamingState() const -{ - return m_renamingState; -} - -File::ActionState File::addingState() const -{ - return m_addingState; -} - -File::ActionState File::markingState() const -{ - return m_markingState; -} - - -void File::hash() -{ - if (m_hashingState != Success) - actionsQueue.enqueue(Hashing); - - if (notWorking) work(); -} - -bool File::rename() -{ - if (m_renamingState == Success) - return true; - - if (m_hashingState != Success) - actionsQueue.enqueue(Hashing); - - actionsQueue.enqueue(Renaming); - - if (notWorking) work(); - return true; -} - -bool File::addToMyList() -{ - if (!canContinue(m_addingState)) - return false; - if (m_hashingState != Success) - actionsQueue.enqueue(Hashing); - - actionsQueue.enqueue(Adding); - - if (notWorking) work(); - return true; -} - -bool File::markWatched() -{ - if (m_markingState == Success) - return true; - - if (m_hashingState != Success) - actionsQueue.enqueue(Hashing); - - if (m_addingState != Success) - actionsQueue.enqueue(Adding); - - actionsQueue.enqueue(MarkingWatched); - - if (notWorking) work(); - return true; -} - - -void File::finishHashing() -{ -qDebug() << "finishHashing"; - m_ed2k = hashResult->hash(); -qDebug() << m_ed2k; - hashResult->deleteLater(); - hashResult = 0; - - updateStatus(Hashing, Success); -} - -void File::finishRenaming(bool success) -{ -qDebug() << "finishRenaming"; - if (!success) - { - updateStatus(Renaming, Failure); - return; - } - - QString name = fileReply->value(FileAnimeFlag::RomajiName).toString(); - if (name.isEmpty()) - name = fileReply->value(FileAnimeFlag::EnglishName).toString(); - - QString newFileName = tr("%1 - %2 - %3 - [%4](%5).%6") - .arg(name) - .arg(fileReply->value(FileAnimeFlag::EpNo).toString()) - .arg(fileReply->value(FileAnimeFlag::EpName).toString()) - .arg(fileReply->value(FileAnimeFlag::GroupShortName).toString()) - .arg(fileReply->value(FileFlag::Crc32).toString()) - .arg(fileReply->value(FileFlag::FileType).toString()); - - newFileName.replace('"', "'"); - newFileName.replace(QRegExp("[\\/]"), "-"); - newFileName.replace(QRegExp("[\\/:*?\"<>|]"), ""); -qDebug() << newFileName; - - - QFile file(m_file.absoluteFilePath()); - - if (file.fileName() == newFileName) - { - updateStatus(Renaming, Success); - return; - } - - if (file.rename(m_file.absolutePath() + "/" + newFileName)) - { - m_file.setFile(file); -qDebug() << m_file.absoluteFilePath(); - updateStatus(Renaming, Success); - } - else - { -qDebug() << file.errorString(); - updateStatus(Renaming, Failure); - } -} - -void File::finishAdding(bool success) -{ - if (!success) - { - updateStatus(Adding, Failure); - return; - } - updateStatus(Adding, Success); -} - -void File::finishMarking(bool success) -{ - if (!success) - { - updateStatus(MarkingWatched, Failure); - return; - } - updateStatus(MarkingWatched, Success); -} - -void File::work() -{ -qDebug() << "work"; -qDebug() << actionsQueue; - - notWorking = false; - - if (actionsQueue.isEmpty()) - { - emit statusUpdate(All, Finished); - emit finished(); - notWorking = true; - return; - } - - Action a = actionsQueue.dequeue(); - -qDebug() << "Next work:" << a; - - switch (a) - { - case Hashing: - startHashing(); - break; - case Renaming: - startRenaming(); - break; - case Adding: - startAdding(); - break; - case MarkingWatched: - startMarking(); - break; - default: - break; - } -} - -void File::workOnFinished(Action action, ActionState actionState) -{ - Q_UNUSED(action); - - switch (actionState) - { - case Success: - case Failure: - work(); - default: - break; - } -} - -void File::startHashing() -{ -qDebug() << "startHashing"; - - if (!m_ed2k.isEmpty()) - { - work(); - return; - } - - if (hashResult) - hashResult->deleteLater(); - - hashResult = Hash::instance()->hashFile(m_file); - connect(hashResult, SIGNAL(resultReady()), this, SLOT(finishHashing())); - - updateStatus(Hashing, InProgress); -} - -void File::startRenaming() -{ -qDebug() << "startRenaming"; - - if (!canContinue(m_renamingState)) - { - work(); - return; - } - - if (fileReply) - delete fileReply; - - FileCommand fileCommand(m_ed2k, - size(), - FileFlag::Crc32 - | FileFlag::FileType - | FileFlag::Lid, - FileAnimeFlag::EnglishName - | FileAnimeFlag::RomajiName - | FileAnimeFlag::KanjiName - | FileAnimeFlag::EpNo - | FileAnimeFlag::EpName - | FileAnimeFlag::GroupShortName); - fileReply = Client::instance()->send(fileCommand); - connect(fileReply, SIGNAL(replyReady(bool)), this, SLOT(finishRenaming(bool))); - - updateStatus(Renaming, InProgress); -} - -void File::startAdding() -{ - if (!canContinue(m_addingState)) - { - work(); - return; - } - - if (addReply) - delete addReply; - - MyListAddCommand addCommand(m_ed2k, size(), false); - addCommand.setState(StateOnHdd); - - addReply = Client::instance()->send(addCommand); - - connect(addReply, SIGNAL(replyReady(bool)), this, SLOT(finishAdding(bool))); - - - updateStatus(Adding, InProgress); -} - -void File::startMarking() -{ - if (!canContinue(m_markingState)) - { - work(); - return; - } - MyListAddCommand markCommand(0); - if (addReply->lid()) - markCommand = MyListAddCommand(addReply->lid()); - else - markCommand = MyListAddCommand(m_ed2k, size(), true); - markCommand.setViewed(true); - - if (markReply) markReply->deleteLater(); - markReply = Client::instance()->send(markCommand); - connect(markReply, SIGNAL(replyReady(bool)), this, SLOT(finishMarking(bool))); - - updateStatus(MarkingWatched, InProgress); -} - -void File::init() -{ - hashResult = 0; - fileReply = 0; - addReply = 0; - markReply = 0; - m_hashingState = m_renamingState = m_addingState = m_markingState = NotStarted; - notWorking = true; - - connect(this, SIGNAL(statusUpdate(AniDBUdpClient::File::Action,AniDBUdpClient::File::ActionState)), this, SLOT(workOnFinished(AniDBUdpClient::File::Action,AniDBUdpClient::File::ActionState))); -} - -bool File::canContinue(ActionState state) -{ - return state & OkToContinue; -} - -void File::updateStatus(Action action, ActionState actionState) -{ - switch (action) - { - case Hashing: - m_hashingState = actionState; - break; - case Renaming: - m_renamingState = actionState; - break; - case Adding: - m_addingState = actionState; - break; - case MarkingWatched: - m_markingState = actionState; - } - emit statusUpdate(action, actionState); -} - -} // namespace AniDBUdpClient diff --git a/lib/anidbudpclient/file.h b/lib/anidbudpclient/file.h deleted file mode 100644 index 0d83544..0000000 --- a/lib/anidbudpclient/file.h +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef FILE_H -#define FILE_H - -#include "anidbudpclient_global.h" -#include - -#include -#include - -#include "filecommand.h" -#include "mylistaddcommand.h" - -namespace AniDBUdpClient { - -class FileCommand; -class MyListCommand; -class HashResult; - -class ANIDBUDPCLIENTSHARED_EXPORT File : public QObject -{ - Q_OBJECT - - Q_PROPERTY(QFileInfo file READ file WRITE setFile); - - Q_PROPERTY(qint64 size READ size); - Q_PROPERTY(QByteArray ed2k READ ed2k); - - Q_PROPERTY(ActionState hashingState READ hashingState); - Q_PROPERTY(ActionState renamingState READ renamingState); - Q_PROPERTY(ActionState addingState READ addingState); - Q_PROPERTY(ActionState markingState READ markingState); -public: - - enum Action { - Hashing, - Renaming, - Adding, - MarkingWatched, - - All = -1, - }; - - enum ActionState { - NotStarted = 0x00000001, - InProgress = 0x00000002, - Success = 0x00000004, - Failure = 0x00000008, - - Finished = 0x00000010, - - OkToContinue = NotStarted | Failure, - }; - - Q_ENUMS(Action ActionState); - - File(QObject *parent = 0); - File(const QFileInfo &file, QObject *parent = 0); - ~File(); - - QFileInfo file() const; - void setFile(const QFileInfo &file); - - qint64 size(); - QByteArray ed2k(); - - - ActionState hashingState() const; - ActionState renamingState() const; - ActionState addingState() const; - ActionState markingState() const; - -public slots: - void hash(); - bool rename(); - bool addToMyList(); - bool markWatched(); - -signals: - void statusUpdate(AniDBUdpClient::File::Action action, AniDBUdpClient::File::ActionState state); - void finished(); - -private slots: - void finishHashing(); - void finishRenaming(bool success); - void finishAdding(bool success); - void finishMarking(bool success); - - void work(); - void workOnFinished(AniDBUdpClient::File::Action action, AniDBUdpClient::File::ActionState actionState); - -private: - - void startHashing(); - void startRenaming(); - void startAdding(); - void startMarking(); - - void init(); - - bool canContinue(ActionState state); - void updateStatus(Action action, ActionState actionState); - - QQueue actionsQueue; - - QFileInfo m_file; - QByteArray m_ed2k; - - bool notWorking; - - ActionState m_hashingState; - ActionState m_renamingState; - ActionState m_addingState; - ActionState m_markingState; - - HashResult *hashResult; - FileReply *fileReply; - MyListAddReply *addReply; - MyListAddReply *markReply; - -}; - -} // namespace AniDBUdpClient - -Q_DECLARE_METATYPE(AniDBUdpClient::File::Action); -Q_DECLARE_METATYPE(AniDBUdpClient::File::ActionState); - -#endif // FILE_H diff --git a/lib/anidbudpclient/filecommand.cpp b/lib/anidbudpclient/filecommand.cpp deleted file mode 100644 index 5dcf719..0000000 --- a/lib/anidbudpclient/filecommand.cpp +++ /dev/null @@ -1,340 +0,0 @@ -#include "filecommand.h" - -#include - -#include - -namespace AniDBUdpClient { - -FileCommand::FileCommand() : AbstractCommand() -{ - init(); -} - -FileCommand::FileCommand(int fid, FileFlags fmask, FileAnimeFlags amask) : AbstractCommand() -{ - init(); - m_fid = fid; - m_fmask = fmask; - m_amask = amask; -} - -FileCommand::FileCommand(const QByteArray &ed2k, qint64 size, FileFlags fmask, FileAnimeFlags amask) : AbstractCommand() -{ - init(); - m_ed2k = ed2k; - m_size = size; - m_fmask = fmask; - m_amask = amask; -} - -FileCommand::FileCommand(const QString &aname, const QString &gname, int epno, FileFlags fmask, FileAnimeFlags amask) : AbstractCommand() -{ - init(); - m_aname = aname; - m_gname = gname; - m_epno = epno; - m_fmask = fmask; - m_amask = amask; -} - -FileCommand::FileCommand(const QString &aname, int gid, int epno, FileFlags fmask, FileAnimeFlags amask) : AbstractCommand() -{ - init(); - m_aname = aname; - m_gid = gid; - m_epno = epno; - m_fmask = fmask; - m_amask = amask; -} - -FileCommand::FileCommand(int aid, const QString &gname, int epno, FileFlags fmask, FileAnimeFlags amask) : AbstractCommand() -{ - init(); - m_aid = aid; - m_gname = gname; - m_epno = epno; - m_fmask = fmask; - m_amask = amask; -} - -FileCommand::FileCommand(int aid, int gid, int epno, FileFlags fmask, FileAnimeFlags amask) : AbstractCommand() -{ - init(); - m_aid = aid; - m_gid = gid; - m_epno = epno; - m_fmask = fmask; - m_amask = amask; -} - -int FileCommand::fid() const -{ - return m_fid; -} - -void FileCommand::setFid(int fid) -{ - m_fid = fid; -} - -QByteArray FileCommand::ed2k() const -{ - return m_ed2k; -} - -void FileCommand::setEd2k(const QByteArray &ed2k) -{ - m_ed2k = ed2k; -} - -qint64 FileCommand::size() const -{ - return m_size; -} - -void FileCommand::setSize(qint64 size) -{ - m_size = size; -} - -QString FileCommand::aname() const -{ - return m_aname; -} - -void FileCommand::setAname(const QString &aname) -{ - m_aname = aname; -} - -int FileCommand::aid() const -{ - return m_aid; -} - -void FileCommand::setAid(int aid) -{ - m_aid = aid; -} - -QString FileCommand::gname() const -{ - return m_gname; -} - -void FileCommand::setGname(const QString &gname) -{ - m_gname = gname; -} - -int FileCommand::gid() const -{ - return m_gid; -} - -void FileCommand::setGid(int gid) -{ - m_gid = gid; -} - - -int FileCommand::epno() const -{ - return m_epno; -} - -void FileCommand::setEpno(int epno) -{ - m_epno = epno; -} - -FileFlags FileCommand::fmask() const -{ - return m_fmask; -} - -void FileCommand::setFmask(FileFlags fmask) -{ - m_fmask = fmask; -} - -FileAnimeFlags FileCommand::amask() const -{ - return m_amask; -} - -void FileCommand::setAmask(FileAnimeFlags amask) -{ - m_amask = amask; -} - -bool FileCommand::waitForResult() const -{ - return true; -} - -Command FileCommand::rawCommand() const -{ - Command cmd; - - cmd.first = "FILE"; - - if (m_fid) - { - cmd.second["fid"] = m_fid; - } - else if (!m_ed2k.isEmpty() && m_size) - { - cmd.second["ed2k"] = m_ed2k; - cmd.second["size"] = m_size; - } - else if (!m_aname.isEmpty()) - { - cmd.second["aname"] = m_aname; - if (!m_gname.isEmpty() && m_epno) - { - cmd.second["gname"] = m_gname; - cmd.second["epno"] = m_epno; - } - else if (m_gid && m_epno) - { - cmd.second["gid"] = m_gid; - cmd.second["epno"] = m_epno; - } - } - else if (m_aid) - { - cmd.second["aid"] = m_aid; - if (!m_gname.isEmpty() && m_epno) - { - cmd.second["gname"] = m_gname; - cmd.second["epno"] = m_epno; - } - else if (m_gid && m_epno) - { - cmd.second["gid"] = m_gid; - cmd.second["epno"] = m_epno; - } - } - else - { - cmd.second["fid"] = m_fid; - } - - // Clear any bits which aren't known and pad to 8 characters - cmd.second["fmask"] = QString::number(m_fmask & FileFlag::AllData, 16) - .rightJustified(8, QLatin1Char('0')); - cmd.second["amask"] = QString::number(m_amask & FileAnimeFlag::AllData, 16) - .rightJustified(8, QLatin1Char('0')); - - return cmd; -} - -void FileCommand::init() -{ - m_fid = 0; - m_aid = 0; - m_gid = 0; - - m_size = 0; - m_epno = 0; - - m_fmask = FileFlags(0); - m_amask = AnimeFlags(0); -} - -// === - -int FileReply::fid() const -{ - return m_fid; -} - -QVariant FileReply::value(FileFlags f) const -{ - return fileFlagData.value(f); -} - -QVariant FileReply::value(FileAnimeFlags f) const -{ - return fileAnimeFlagData.value(f); -} - -void FileReply::setRawReply(ReplyCode replyCode, const QString &reply) -{ - AbstractReply::setRawReply(replyCode, reply); - - switch (replyCode) - { - case FILE: - readReplyData(reply); - emit replyReady(true); - break; - case MULTIPLE_FILES_FOUND: - // TODO - emit replyReady(true); - break; - case NO_SUCH_FILE: - default: - emit replyReady(false); - break; - } -} - -void FileReply::readReplyData(const QString &reply) -{ - QString d = reply.mid(reply.indexOf('\n')).trimmed(); -qDebug() << d; - QList parts = d.split('|', QString::KeepEmptyParts); -qDebug() << parts; - m_fid = parts[0].toInt(); - - if (command().fmask() == 0 && command().amask() == 0) - { - fileFlagData.insert(FileFlag::Aid, parts[1].toInt()); - fileFlagData.insert(FileFlag::Eid, parts[2].toInt()); - fileFlagData.insert(FileFlag::Gid, parts[3].toInt()); - fileFlagData.insert(FileFlag::State, parts[4].toInt()); - fileFlagData.insert(FileFlag::Size, parts[5].toInt()); - fileFlagData.insert(FileFlag::Ed2k, parts[6]); - fileFlagData.insert(FileFlag::AniDBFileName, parts[7]); - return; - } - - int partNo = 1; - for (int i = 0, flag = 1 << 31; i < 32; ++i, flag = (flag >> 1) & ~(1 << 31)) - { - if (command().fmask() & flag) - { - if (partNo >= parts.size()) - { -qDebug() << "Not enough parts in reply."; - continue; - } - fileFlagData.insert(FileFlags(flag), parts[partNo]); - ++partNo; - } - } - - for (int i = 0, flag = 1 << 31; i < 32; ++i, flag = (flag >> 1) & ~(1 << 31)) - { - if (command().amask() & flag) - { - if (partNo >= parts.size()) - { -qDebug() << "Not enough parts in reply."; - continue; - } - fileAnimeFlagData.insert(FileAnimeFlags(flag), parts[partNo]); - ++partNo; - } - } -} - -void FileReply::init() -{ - m_fid = 0; -} - -} // namespace AniDBUdpClient diff --git a/lib/anidbudpclient/filecommand.h b/lib/anidbudpclient/filecommand.h deleted file mode 100644 index dabc761..0000000 --- a/lib/anidbudpclient/filecommand.h +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef FILECOMMAND_H -#define FILECOMMAND_H - -#include "anidbudpclient_global.h" -#include "abstractcommand.h" - -#include - -namespace AniDBUdpClient { - -class FileReply; - -class ANIDBUDPCLIENTSHARED_EXPORT FileCommand : public AbstractCommand -{ -/* - Q_PROPERTY(int fid READ fid WRITE setFid); - - Q_PROPERTY(QByteArray ed2k READ ed2k WRITE setEd2k); - Q_PROPERTY(qint64 size READ size WRITE setSize); - - Q_PROPERTY(QString aname READ aname WRITE setAname); - Q_PROPERTY(int aid READ aid WRITE setAid); - Q_PROPERTY(QString gname READ gname WRITE setGname); - Q_PROPERTY(int gid READ gid WRITE setGid); - Q_PROPERTY(int epno READ epno WRITE setEpno); - - Q_PROPERTY(FileFlags fmask READ fmask WRITE setFmask); - Q_PROPERTY(FileAnimeFlags amask READ amask WRITE setAmask); -*/ -public: - typedef FileReply ReplyType; - FileCommand(); - FileCommand(int fid, FileFlags fmask = FileFlags(0), FileAnimeFlags = FileAnimeFlags(0)); - FileCommand(const QByteArray &ed2k, qint64 size, FileFlags fmask = FileFlags(0), FileAnimeFlags = FileAnimeFlags(0)); - FileCommand(const QString &aname, const QString &gname, int epno, FileFlags fmask = FileFlags(0), FileAnimeFlags = FileAnimeFlags(0)); - FileCommand(const QString &aname, int gid, int epno, FileFlags fmask = FileFlags(0), FileAnimeFlags = FileAnimeFlags(0)); - FileCommand(int aid, const QString &gname, int epno, FileFlags fmask = FileFlags(0), FileAnimeFlags = FileAnimeFlags(0)); - FileCommand(int aid, int gid, int epno, FileFlags fmask = FileFlags(0), FileAnimeFlags = FileAnimeFlags(0)); - - int fid() const; - void setFid(int fid); - - QByteArray ed2k() const; - void setEd2k(const QByteArray &ed2k); - qint64 size() const; - void setSize(qint64 size); - - QString aname() const; - void setAname(const QString &aname); - int aid() const; - void setAid(int aid); - QString gname() const; - void setGname(const QString &gname); - int gid() const; - void setGid(int gid); - int epno() const; - void setEpno(int epno); - - FileFlags fmask() const; - void setFmask(FileFlags fmask); - FileAnimeFlags amask() const; - void setAmask(FileAnimeFlags amask); - - bool waitForResult() const; - Command rawCommand() const; - -private: - void init(); - - int m_fid; - - QByteArray m_ed2k; - qint64 m_size; - - QString m_aname; - int m_aid; - QString m_gname; - int m_gid; - int m_epno; - - FileFlags m_fmask; - FileAnimeFlags m_amask; -}; - -class ANIDBUDPCLIENTSHARED_EXPORT FileReply : public AbstractReply -{ - Q_OBJECT - REPLY_DEFINITION_HELPER2(File) - - Q_PROPERTY(int fid READ fid); - -public: - int fid() const; - - QVariant value(FileFlags f) const; - QVariant value(FileAnimeFlags f) const; - - void setRawReply(ReplyCode replyCode, const QString &reply); - -private: - void readReplyData(const QString &reply); - void init(); - - int m_fid; - - QMap fileFlagData; - QMap fileAnimeFlagData; -}; - -} // namespace AniDBUdpClient - -#endif // FILECOMMAND_H diff --git a/lib/anidbudpclient/hash.cpp b/lib/anidbudpclient/hash.cpp deleted file mode 100644 index 3b2ada2..0000000 --- a/lib/anidbudpclient/hash.cpp +++ /dev/null @@ -1,185 +0,0 @@ -#include "hash.h" - -#include - -namespace AniDBUdpClient { - -Hash::Hash(QObject *parent) : QObject(parent) -{ - producer = 0; - consumer = 0; - buffer = 0; - hashing = false; - setUp(); - totalFileSize = 0; - hashedFileSize = 0; -} - -Hash::~Hash() -{ - tearDown(); -} - -Hash *Hash::instance() -{ - if (!m_instance) - m_instance = new Hash(); - - return m_instance; -} - -void Hash::destroy() -{ - delete m_instance; - m_instance = 0; -} - -HashResult *Hash::hashFile(const HashRequest &file) -{ -qDebug() << "Hash::hashFile"; - - HashResult *result = new HashResult(file); - - fileQueue.enqueue(result); - totalFileSize += file.fileInfo().size(); - - if (hashing) - return result; - - totalTime.start(); - startHashing(); - return result; -} - -void Hash::endHashing(const QByteArray &hash) -{ -qDebug() << "Hash::endHashing"; - HashResult *r = fileQueue.dequeue(); - - int fileElapsed = fileTime.elapsed(); - -qDebug() << "File:" << r->fileInfo().fileName() << "Hash:" << hash << "Time:" << fileElapsed; - - hashedFileSize += r->fileInfo().size(); - - r->setHash(hash); - emit resultReady(r); - - if (!fileQueue.isEmpty()) - { - startHashing(); - } - else - { - hashing = false; - int totalElapsed = totalTime.elapsed(); - emit finished(); -qDebug() << "Total time:" << totalElapsed; - hashedFileSize = totalFileSize = 0; - } - -} - -void Hash::reportProgress(qint64 read, qint64 total) -{ - int filePercent = (read * 100) / total; - emit fileProgress(filePercent); - - int totalPercent = ((hashedFileSize + read) * 100) / totalFileSize; - emit progress(totalPercent); -} - -void Hash::startHashing() -{ - QString file = fileQueue.first()->fileInfo().absoluteFilePath(); - - fileTime.start(); - - producer->readFile(file); - consumer->hashFile(file); -} - -void Hash::setUp() -{ - if (producer || consumer || buffer) - return; -qDebug() << "MAIN thread id is: " << QThread::currentThreadId(); - buffer = new HashPrivate::Buffer; - producer = new HashPrivate::HashProducer(buffer, this); - consumer = new HashPrivate::HashConsumer(buffer, this); - connect(consumer, SIGNAL(finishedHashing(QByteArray)), this, SLOT(endHashing(QByteArray))); - connect(consumer, SIGNAL(progress(qint64,qint64)), this, SLOT(reportProgress(qint64,qint64))); -} - -void Hash::tearDown() -{ - if (!producer || !consumer || !buffer) - return; - - delete producer; - delete consumer; - delete buffer; - - producer = 0; - consumer = 0; - buffer = 0; -} - -Hash *Hash::m_instance = 0; - -// ----------------------------------------------------------------------------------- - -HashRequest::HashRequest(const QFileInfo &fileInfo) -{ -qDebug() << "HashRequest::HashRequest(const QFileInfo &fileInfo)"; - m_fileInfo = fileInfo; -} - -HashRequest::HashRequest(const HashRequest &other) -{ -qDebug() << "HashRequest::HashRequest(const HashRequest &other)"; - m_fileInfo = other.m_fileInfo; -qDebug() << m_fileInfo.absoluteFilePath(); -} - -HashRequest &HashRequest::operator=(const HashRequest &other) -{ -qDebug() << "HashRequest &HashRequest::operator=(const HashRequest &other)"; - m_fileInfo = other.m_fileInfo; - return *this; -} - -QFileInfo HashRequest::fileInfo() const -{ - return m_fileInfo; -} - -void HashRequest::setFileInfo(const QFileInfo &fileInfo) -{ - m_fileInfo = fileInfo; -} - -// ----------------------------------------------------------------------------------- - -HashResult::HashResult(const HashRequest &request) : QObject() -{ - this->request = request; -} - -QFileInfo HashResult::fileInfo() const -{ - return request.fileInfo(); -} - -QByteArray HashResult::hash() const -{ - return m_hash; -} - -void HashResult::setHash(const QByteArray &hash) -{ - m_hash = hash; - emit resultReady(); -} - -} // namesapce AniDBUdpClient diff --git a/lib/anidbudpclient/hash.h b/lib/anidbudpclient/hash.h deleted file mode 100644 index 232a2aa..0000000 --- a/lib/anidbudpclient/hash.h +++ /dev/null @@ -1,107 +0,0 @@ -#ifndef HASH_H -#define HASH_H - -#include "anidbudpclient_global.h" -#include -#include -#include -#include -#include - -#include "hashproducer.h" -#include "hashconsumer.h" - -namespace AniDBUdpClient { - -class HashRequest; -class HashResult; - -class ANIDBUDPCLIENTSHARED_EXPORT Hash : public QObject -{ - Q_OBJECT - -protected: - Hash(QObject *parent = 0); - ~Hash(); - -public: - HashResult *hashFile(const HashRequest &file); - - static Hash *instance(); - static void destroy(); - -signals: - void resultReady(HashResult *result); - void fileProgress(int percent); - void progress(int percent); - void finished(); - -private slots: - void endHashing(const QByteArray &hash); - - void reportProgress(qint64 read, qint64 total); - -private: - void startHashing(); - void setUp(); - void tearDown(); - - HashPrivate::Buffer *buffer; - HashPrivate::HashProducer *producer; - HashPrivate::HashConsumer *consumer; - - QQueue fileQueue; - - bool hashing; - - qint64 hashedFileSize; - qint64 totalFileSize; - - QTime fileTime; - QTime totalTime; - - static Hash *m_instance; -}; - -class ANIDBUDPCLIENTSHARED_EXPORT HashRequest -{ -public: - HashRequest(const QFileInfo &fileInfo = QFileInfo()); - HashRequest(const HashRequest &other); - - HashRequest &operator=(const HashRequest &other); - - QFileInfo fileInfo() const; - void setFileInfo(const QFileInfo &fileInfo); - -private: - QFileInfo m_fileInfo; -}; - -class ANIDBUDPCLIENTSHARED_EXPORT HashResult : public QObject -{ - friend class Hash; - - Q_OBJECT - Q_PROPERTY(QFileInfo fileInfo READ fileInfo); - Q_PROPERTY(QByteArray hash READ hash); - - HashResult(const HashRequest &request); - -public: - QFileInfo fileInfo() const; - QByteArray hash() const; - -signals: - void resultReady(); - -private: - void setHash(const QByteArray &hash); - - HashRequest request; - QByteArray m_hash; -}; - -} // namesapce AniDBUdpClient - -#endif // HASH_H diff --git a/lib/anidbudpclient/hashconsumer.cpp b/lib/anidbudpclient/hashconsumer.cpp deleted file mode 100644 index 9fcaaf9..0000000 --- a/lib/anidbudpclient/hashconsumer.cpp +++ /dev/null @@ -1,84 +0,0 @@ -#include "hashconsumer.h" - -#include - -#include - -namespace AniDBUdpClient { -namespace HashPrivate { - -HashConsumer::HashConsumer(Buffer *buffer, QObject *parent) : QThread(parent) -{ - this->buffer = buffer; - - restart = false; - abort = false; -} - -HashConsumer::~HashConsumer() -{ - mutex.lock(); - abort = true; - condition.wakeOne(); - mutex.unlock(); - - wait(); -} - -void HashConsumer::hashFile(const QString &file) -{ - QMutexLocker locker(&mutex); - fileSize = QFileInfo(file).size(); - - if (!isRunning()) - start(); - else - condition.wakeOne(); -} - -void HashConsumer::run() -{ -qDebug() << "Starting thread consumer"; -qDebug() << "Thread consumer id is: " << QThread::currentThreadId(); - - forever - { - mutex.lock(); - qint64 totalSize = fileSize; - qint64 read = 0; - mutex.unlock(); - - QCryptographicHash hash(QCryptographicHash::Md4); - - while (!(buffer->end() || abort)) - { - QByteArray data; - - while (!(buffer->get(&data) || abort)); - - hash.addData(QCryptographicHash::hash(data, QCryptographicHash::Md4)); - - read += data.size(); - emit progress(read, totalSize); - } - buffer->reset(); - - if (abort) - return; - - mutex.lock(); - if (!restart) - { - emit finishedHashing(hash.result().toHex()); - condition.wait(&mutex); - } - restart = false; - mutex.unlock(); - - hash.reset(); - } -qDebug() << "Thread consumer is stopping"; -} - -} // namespace HashPrivate -} // namesapce AniDBUdpClient diff --git a/lib/anidbudpclient/hashconsumer.h b/lib/anidbudpclient/hashconsumer.h deleted file mode 100644 index c70df4f..0000000 --- a/lib/anidbudpclient/hashconsumer.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef HASHCONSUMER_H -#define HASHCONSUMER_H - -#include "anidbudpclient_global.h" -#include -#include -#include -#include -#include - -#include "circularbuffer.h" - -namespace AniDBUdpClient { -namespace HashPrivate { - -class HashConsumer : public QThread -{ - Q_OBJECT -public: - HashConsumer(Buffer *buffer, QObject *parent = 0); - ~HashConsumer(); - -public slots: - void hashFile(const QString &file); - -protected: - void run(); - -signals: - void progress(qint64 done, qint64 total); - void finishedHashing(QByteArray hash); - -private: - Buffer *buffer; - qint64 fileSize; - - bool m_stop; - bool restart; - bool abort; - - QMutex mutex; - QWaitCondition condition; -}; - -} // namespace HashPrivate -} // namesapce AniDBUdpClient - -#endif // HASHCONSUMER_H diff --git a/lib/anidbudpclient/hashproducer.cpp b/lib/anidbudpclient/hashproducer.cpp deleted file mode 100644 index 3d78a0b..0000000 --- a/lib/anidbudpclient/hashproducer.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "hashproducer.h" - -#include - -#include - -namespace AniDBUdpClient { -namespace HashPrivate { - -HashProducer::HashProducer(Buffer *buffer, QObject *parent) : QThread(parent) -{ - this->buffer = buffer; - restart = false; - abort = false; -} - -HashProducer::~HashProducer() -{ - mutex.lock(); - abort = true; - condition.wakeOne(); - mutex.unlock(); - - wait(); -} - -void HashProducer::readFile(const QString &file) -{ -qDebug() << "readFile"; -qDebug() << "Thread id is: " << QThread::currentThreadId(); - - QMutexLocker locker(&mutex); - - fileName = file; - - if (!isRunning()) - start(); - else - condition.wakeOne(); - -} - -void HashProducer::run() -{ -qDebug() << "Starting thread producer"; -qDebug() << "Thread producer id is: " << QThread::currentThreadId(); - - forever - { - mutex.lock(); -qDebug() << "Obtaining new file name"; - QFile file(fileName); - mutex.unlock(); - - if (file.exists()) - { - qDebug() << "File exists, opening"; - if (file.open(QIODevice::ReadOnly)) - { - while (!file.atEnd()) - { - if (abort) - return; -// qDebug() << "read->while(" << (!file.atEnd()) << ")"; - QByteArray data = file.read(ED2K_PART_SIZE); - while (!(buffer->put(data, file.atEnd()) || abort)); - } - } - } - - file.close(); - if (abort) - return; - - mutex.lock(); - if (!restart) - condition.wait(&mutex); - restart = false; - mutex.unlock(); - } -qDebug() << "Thread producer is stopping"; -} - -} // namespace HashPrivate -} // namesapce AniDBUdpClient diff --git a/lib/anidbudpclient/hashproducer.h b/lib/anidbudpclient/hashproducer.h deleted file mode 100644 index 3b0ddab..0000000 --- a/lib/anidbudpclient/hashproducer.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef HASHPRODUCER_H -#define HASHPRODUCER_H - -#include "anidbudpclient_global.h" -#include -#include -#include -#include -#include - -#include "circularbuffer.h" - -namespace AniDBUdpClient { -namespace HashPrivate { - -class HashProducer : public QThread -{ - Q_OBJECT - -public: - HashProducer(Buffer *buffer, QObject *parent = 0); - ~HashProducer(); - -public slots: - void readFile(const QString &file); - -protected: - void run(); - -private: - Buffer *buffer; - - QString fileName; - QFile file; - qint64 fileSize; - - bool m_stop; - bool restart; - bool abort; - - QMutex mutex; - QWaitCondition condition; -}; - -} // namespace HashPrivate -} // namesapce AniDBUdpClient - -#endif // HASHPRODUCER_H diff --git a/lib/anidbudpclient/include/AniDBUdpClient/AbstractCommand b/lib/anidbudpclient/include/AniDBUdpClient/AbstractCommand deleted file mode 100644 index 1e4030b..0000000 --- a/lib/anidbudpclient/include/AniDBUdpClient/AbstractCommand +++ /dev/null @@ -1 +0,0 @@ -#include "../../abstractcommand.h" \ No newline at end of file diff --git a/lib/anidbudpclient/include/AniDBUdpClient/Client b/lib/anidbudpclient/include/AniDBUdpClient/Client deleted file mode 100644 index 73445b3..0000000 --- a/lib/anidbudpclient/include/AniDBUdpClient/Client +++ /dev/null @@ -1 +0,0 @@ -#include "../../client.h" \ No newline at end of file diff --git a/lib/anidbudpclient/include/AniDBUdpClient/File b/lib/anidbudpclient/include/AniDBUdpClient/File deleted file mode 100644 index 6431d6c..0000000 --- a/lib/anidbudpclient/include/AniDBUdpClient/File +++ /dev/null @@ -1 +0,0 @@ -#include "../../file.h" \ No newline at end of file diff --git a/lib/anidbudpclient/include/AniDBUdpClient/FileCommand b/lib/anidbudpclient/include/AniDBUdpClient/FileCommand deleted file mode 100644 index cf757bf..0000000 --- a/lib/anidbudpclient/include/AniDBUdpClient/FileCommand +++ /dev/null @@ -1 +0,0 @@ -#include "../../filecommand.h" \ No newline at end of file diff --git a/lib/anidbudpclient/include/AniDBUdpClient/Hash b/lib/anidbudpclient/include/AniDBUdpClient/Hash deleted file mode 100644 index 4ae187b..0000000 --- a/lib/anidbudpclient/include/AniDBUdpClient/Hash +++ /dev/null @@ -1 +0,0 @@ -#include "../../hash.h" diff --git a/lib/anidbudpclient/include/AniDBUdpClient/MyListAddCommand b/lib/anidbudpclient/include/AniDBUdpClient/MyListAddCommand deleted file mode 100644 index 51dd0f2..0000000 --- a/lib/anidbudpclient/include/AniDBUdpClient/MyListAddCommand +++ /dev/null @@ -1 +0,0 @@ -#include "../../mylistaddcommand.h" \ No newline at end of file diff --git a/lib/anidbudpclient/include/AniDBUdpClient/MyListCommand b/lib/anidbudpclient/include/AniDBUdpClient/MyListCommand deleted file mode 100644 index 5bf1b59..0000000 --- a/lib/anidbudpclient/include/AniDBUdpClient/MyListCommand +++ /dev/null @@ -1 +0,0 @@ -#include "../../mylistcommand.h" \ No newline at end of file diff --git a/lib/anidbudpclient/include/AniDBUdpClient/RawCommand b/lib/anidbudpclient/include/AniDBUdpClient/RawCommand deleted file mode 100644 index 03bcb16..0000000 --- a/lib/anidbudpclient/include/AniDBUdpClient/RawCommand +++ /dev/null @@ -1 +0,0 @@ -#include "../../rawcommand.h" \ No newline at end of file diff --git a/lib/anidbudpclient/include/AniDBUdpClient/UptimeCommand b/lib/anidbudpclient/include/AniDBUdpClient/UptimeCommand deleted file mode 100644 index 24e18a1..0000000 --- a/lib/anidbudpclient/include/AniDBUdpClient/UptimeCommand +++ /dev/null @@ -1 +0,0 @@ -#include "../../uptimecommand.h" \ No newline at end of file diff --git a/lib/anidbudpclient/logoutcommand.cpp b/lib/anidbudpclient/logoutcommand.cpp deleted file mode 100644 index 63372f7..0000000 --- a/lib/anidbudpclient/logoutcommand.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "logoutcommand.h" - -namespace AniDBUdpClient { - -LogoutCommand::LogoutCommand() : AbstractCommand() -{ -} - -Command LogoutCommand::rawCommand() const -{ - Command command; - command.first = "LOGOUT"; - - return command; -} - -} // namespace AniDBUdpClient diff --git a/lib/anidbudpclient/logoutcommand.h b/lib/anidbudpclient/logoutcommand.h deleted file mode 100644 index f3afab5..0000000 --- a/lib/anidbudpclient/logoutcommand.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef LOGOUTCOMMAND_H -#define LOGOUTCOMMAND_H - -#include "abstractcommand.h" - -namespace AniDBUdpClient { - -class LogoutReply; - -class ANIDBUDPCLIENTSHARED_EXPORT LogoutCommand : public AbstractCommand -{ -public: - typedef LogoutReply ReplyType; - - LogoutCommand(); - Command rawCommand() const; -}; - -class ANIDBUDPCLIENTSHARED_EXPORT LogoutReply : public AbstractReply -{ - Q_OBJECT - REPLY_DEFINITION_HELPER(Logout) -public: -}; - -} // namespace AniDBUdpClient - -#endif // LOGOUTCOMMAND_H diff --git a/lib/anidbudpclient/mylistaddcommand.cpp b/lib/anidbudpclient/mylistaddcommand.cpp deleted file mode 100644 index a22f0a6..0000000 --- a/lib/anidbudpclient/mylistaddcommand.cpp +++ /dev/null @@ -1,272 +0,0 @@ -#include "mylistaddcommand.h" - -#include -#include -#include -#include -#include - -#include "client.h" - -namespace AniDBUdpClient { - - -MyListAddCommand::MyListAddCommand(int fid, bool edit) : AbstractCommand() -{ - init(); - m_fid = fid; - m_edit = edit; -} - -MyListAddCommand::MyListAddCommand(const QByteArray &ed2k, qint64 size, bool edit) : AbstractCommand() -{ - init(); - m_ed2k = ed2k; - m_size = size; - m_edit = edit; -} - -MyListAddCommand::MyListAddCommand(int lid) : AbstractCommand() -{ - init(); - m_lid = lid; - m_edit = true; -} - -int MyListAddCommand::fid() const -{ - return m_fid; -} - -void MyListAddCommand::setFid(int fid) -{ - m_fid = fid; -} - -int MyListAddCommand::lid() const -{ - return m_lid; -} - -void MyListAddCommand::setLid(int lid) -{ - m_lid = lid; -} - -QByteArray MyListAddCommand::ed2k() const -{ - return m_ed2k; -} - -void MyListAddCommand::setEd2k(const QByteArray &ed2k) -{ - m_ed2k = ed2k; -} - -qint64 MyListAddCommand::size() const -{ - return m_size; -} - -void MyListAddCommand::setSize(qint64 size) -{ - m_size = size; -} - -bool MyListAddCommand::edit() const -{ - return m_edit; -} - -void MyListAddCommand::setEdit(bool edit) -{ - m_edit = edit; -} - -State MyListAddCommand::state() const -{ - return m_state; -} - -void MyListAddCommand::setState(State state) -{ - m_state = state; -} - -MyListAddCommand::ViewedState MyListAddCommand::viewed() const -{ - return m_viewed; -} - -void MyListAddCommand::setViewed(MyListAddCommand::ViewedState viewed) -{ - m_viewed = viewed; -} - -void MyListAddCommand::setViewed(bool viewed) -{ - m_viewed = viewed ? Viewed : NotViewed; -} - -QDateTime MyListAddCommand::viewDate() const -{ - return m_viewDate; -} - -void MyListAddCommand::setViewDate(QDateTime viewDate) -{ - m_viewDate = viewDate; -} - -QString MyListAddCommand::source() const -{ - return m_source; -} - -void MyListAddCommand::setSource(QString source) -{ - m_source = source; -} - -QString MyListAddCommand::storage() const -{ - return m_storage; -} - -void MyListAddCommand::setStorage(QString storage) -{ - m_storage = storage; -} - -QString MyListAddCommand::other() const -{ - return m_other; -} - -void MyListAddCommand::setOther(QString other) -{ - m_other = other; -} - -bool MyListAddCommand::waitForResult() const -{ - return true; -} - -Command MyListAddCommand::rawCommand() const -{ - Command cmd; - - cmd.first = "MYLISTADD"; - - if (m_fid) - { - cmd.second["fid"] = m_fid; - } - else if (!m_ed2k.isEmpty() && m_size) - { - cmd.second["ed2k"] = m_ed2k; - cmd.second["size"] = m_size; - } - else if (m_lid) - { - cmd.second["lid"] = m_lid; - } - - if (m_edit) - { - cmd.second["edit"] = true; - } - - if (m_state) - { - cmd.second["state"] = m_state; - } - - switch (m_viewed) - { - case Viewed: - cmd.second["viewed"] = true; - break; - case NotViewed: - cmd.second["viewed"] = false; - break; - default: - break; - } - - if (!m_viewDate.isNull()) - { - cmd.second["viewdate"] = m_viewDate.toTime_t(); - } - - if (!m_source.isEmpty()) - { - cmd.second["source"] = m_source; - } - - if (!m_storage.isEmpty()) - { - cmd.second["storage"] = m_storage; - } - - if (!m_other.isEmpty()) - { - cmd.second["other"] = m_other; - } - - return cmd; -} - -void MyListAddCommand::init() -{ - m_fid = 0; - m_lid = 0; - - m_state = StateUnknown; - m_viewed = Unset; -} - -// === - -int MyListAddReply::lid() const -{ - return m_lid; -} - -void MyListAddReply::setRawReply(ReplyCode replyCode, const QString &reply) -{ - AbstractReply::setRawReply(replyCode, reply); - - switch (replyCode) - { - case MYLIST_ENTRY_ADDED: - { - QString lid = reply.mid(reply.indexOf('\n')).trimmed(); - if (!command().edit()) - { - m_lid = lid.toInt(); - } - emit replyReady(true); - } - break; - case MYLIST_ENTRY_EDITED: - case FILE_ALREADY_IN_MYLIST: - emit replyReady(true); - break; - case NO_SUCH_MYLIST_ENTRY: - case NO_SUCH_FILE: - case NO_SUCH_ANIME: - case NO_SUCH_GROUP: - default: - emit replyReady(false); - break; - } -} - -void MyListAddReply::init() -{ - m_lid = 0; -} - -} // namespace AniDBUdpClient diff --git a/lib/anidbudpclient/mylistaddcommand.h b/lib/anidbudpclient/mylistaddcommand.h deleted file mode 100644 index 0187487..0000000 --- a/lib/anidbudpclient/mylistaddcommand.h +++ /dev/null @@ -1,123 +0,0 @@ -#ifndef MYLISTADDCOMMAND_H -#define MYLISTADDCOMMAND_H - -#include "abstractcommand.h" - -#include -#include -#include - -namespace AniDBUdpClient { - -class MyListAddReply; - -class ANIDBUDPCLIENTSHARED_EXPORT MyListAddCommand : public AbstractCommand -{ -/* - Q_ENUMS(ViewedState); - - Q_PROPERTY(int fid READ fid WRITE setFid); - Q_PROPERTY(int lid READ lid WRITE setLid); - - Q_PROPERTY(QByteArray ed2k READ ed2k WRITE setEd2k); - Q_PROPERTY(qint64 size READ size WRITE setSize); - - Q_PROPERTY(bool edit READ edit WRITE setEdit); - - Q_PROPERTY(State state READ state WRITE setState); - Q_PROPERTY(ViewedState viewed READ viewed WRITE setViewed); - Q_PROPERTY(QDateTime viewDate READ viewDate WRITE setViewDate); - Q_PROPERTY(QString source READ source WRITE setSource); - Q_PROPERTY(QString storage READ storage WRITE setStorage); - Q_PROPERTY(QString other READ other WRITE setOther); -*/ -public: - typedef MyListAddReply ReplyType; - enum ViewedState { - Unset = -1, - NotViewed = 0, - Viewed = 1, - }; - - MyListAddCommand(int fid, bool edit); - MyListAddCommand(const QByteArray &ed2k, qint64 size, bool edit); - explicit MyListAddCommand(int lid); - - int fid() const; - void setFid(int fid); - - int lid() const; - void setLid(int lid); - - QByteArray ed2k() const; - void setEd2k(const QByteArray &ed2k); - - qint64 size() const; - void setSize(qint64 size); - - bool edit() const; - void setEdit(bool edit); - - State state() const; - void setState(State state); - - ViewedState viewed() const; - void setViewed(ViewedState viewed); - void setViewed(bool viewed); - - QDateTime viewDate() const; - void setViewDate(QDateTime viewDate); - - QString source() const; - void setSource(QString source); - - QString storage() const; - void setStorage(QString storage); - - QString other() const; - void setOther(QString other); - - bool waitForResult() const; - - Command rawCommand() const; - -private: - void init(); - - int m_fid; - int m_lid; - - QByteArray m_ed2k; - qint64 m_size; - - bool m_edit; - - State m_state; - ViewedState m_viewed; - QDateTime m_viewDate; - QString m_source; - QString m_storage; - QString m_other; -}; - -class ANIDBUDPCLIENTSHARED_EXPORT MyListAddReply : public AbstractReply -{ - Q_OBJECT - REPLY_DEFINITION_HELPER2(MyListAdd) - - Q_PROPERTY(int lid READ lid); - -public: - int lid() const; - - void setRawReply(ReplyCode replyCode, const QString &reply); - -private: - void init(); - - int m_lid; -}; - -} // namespace AniDBUdpClient - -#endif // MYLISTADDCOMMAND_H diff --git a/lib/anidbudpclient/mylistcommand.cpp b/lib/anidbudpclient/mylistcommand.cpp deleted file mode 100644 index a37bef1..0000000 --- a/lib/anidbudpclient/mylistcommand.cpp +++ /dev/null @@ -1,352 +0,0 @@ -#include "mylistcommand.h" - -#include - -namespace AniDBUdpClient { - -MyListCommand::MyListCommand() : AbstractCommand() -{ - init(); -} - -MyListCommand::MyListCommand(int lid) : AbstractCommand() -{ - init(); - m_lid = lid; -} - -MyListCommand::MyListCommand(int fid, bool isFid) : AbstractCommand() -{ - Q_UNUSED(isFid); - init(); - m_fid = fid; -} - -MyListCommand::MyListCommand(const QByteArray &ed2k, qint64 size) : AbstractCommand() -{ - init(); - m_ed2k = ed2k; - m_size = size; -} - -MyListCommand::MyListCommand(const QString &aname, const QString &gname, int epno) : AbstractCommand() -{ - init(); - m_aname = aname; - m_gname = gname; - m_epno = epno; -} - -MyListCommand::MyListCommand(const QString &aname, int gid, int epno) : AbstractCommand() -{ - init(); - m_aname = aname; - m_gid = gid; - m_epno = epno; -} - -MyListCommand::MyListCommand(int aid, const QString &gname, int epno) : AbstractCommand() -{ - init(); - m_aid = aid; - m_gname = gname; - m_epno = epno; -} - -MyListCommand::MyListCommand(int aid, int gid, int epno) : AbstractCommand() -{ - init(); - m_aid = aid; - m_gid = gid; - m_epno = epno; -} - -int MyListCommand::lid() const -{ - return m_lid; -} - -void MyListCommand::setLid(int lid) -{ - m_lid = lid; -} - -int MyListCommand::fid() const -{ - return m_fid; -} - -void MyListCommand::setFid(int fid) -{ - m_fid = fid; -} - -QByteArray MyListCommand::ed2k() const -{ - return m_ed2k; -} - -void MyListCommand::setEd2k(const QByteArray &ed2k) -{ - m_ed2k = ed2k; -} - -qint64 MyListCommand::size() const -{ - return m_size; -} - -void MyListCommand::setSize(qint64 size) -{ - m_size = size; -} - -QString MyListCommand::aname() const -{ - return m_aname; -} - -void MyListCommand::setAname(const QString &aname) -{ - m_aname = aname; -} - -int MyListCommand::aid() const -{ - return m_aid; -} - -void MyListCommand::setAid(int aid) -{ - m_aid = aid; -} - -QString MyListCommand::gname() const -{ - return m_gname; -} - -void MyListCommand::setGname(const QString &gname) -{ - m_gname = gname; -} - -int MyListCommand::gid() const -{ - return m_gid; -} - -void MyListCommand::setGid(int gid) -{ - m_gid = gid; -} - - -int MyListCommand::epno() const -{ - return m_epno; -} - -void MyListCommand::setEpno(int epno) -{ - m_epno = epno; -} - -bool MyListCommand::isValid() const -{ - return m_lid || m_fid || m_aid - || !m_aname.isEmpty() - || (!m_ed2k.isEmpty() && m_size); -} - -bool MyListCommand::waitForResult() const -{ - return true; -} - -Command MyListCommand::rawCommand() const -{ - Command cmd; - - cmd.first = "MYLIST"; - - if (m_lid) - { - cmd.second["lid"] = m_lid; - } - else if (m_fid) - { - cmd.second["fid"] = m_fid; - } - else if (!m_ed2k.isEmpty() && m_size) - { - cmd.second["ed2k"] = m_ed2k; - cmd.second["size"] = m_size; - } - else if (!m_aname.isEmpty()) - { - cmd.second["aname"] = m_aname; - if (!m_gname.isEmpty() && m_epno) - { - cmd.second["gname"] = m_gname; - cmd.second["epno"] = m_epno; - } - else if (m_gid && m_epno) - { - cmd.second["gid"] = m_gid; - cmd.second["epno"] = m_epno; - } - } - else if (m_aid) - { - cmd.second["aid"] = m_aid; - if (!m_gname.isEmpty() && m_epno) - { - cmd.second["gname"] = m_gname; - cmd.second["epno"] = m_epno; - } - else if (m_gid && m_epno) - { - cmd.second["gid"] = m_gid; - cmd.second["epno"] = m_epno; - } - } - else - { - // TODO WTF NOW?!? - } - return cmd; -} - -void MyListCommand::init() -{ - m_lid = 0; - m_fid = 0; - m_aid = 0; - m_gid = 0; - - m_size = 0; - m_epno = 0; -} - - -// === - -int MyListReply::lid() const -{ - return m_lid; -} - -int MyListReply::fid() const -{ - return m_fid; -} - -int MyListReply::aid() const -{ - return m_aid; -} - - -int MyListReply::gid() const -{ - return m_gid; -} - - -int MyListReply::eid() const -{ - return m_eid; -} - -QDateTime MyListReply::date() const -{ - return m_date; -} - -State MyListReply::state() const -{ - return m_state; -} - -QDateTime MyListReply::viewDate() const -{ - return m_viewDate; -} - -QString MyListReply::storage() const -{ - return m_storage; -} - -QString MyListReply::source() const -{ - return m_source; -} - -QString MyListReply::other() const -{ - return m_other; -} - -FileState MyListReply::fileState() const -{ - return m_fileState; -} - -QStringList MyListReply::multipleEntries() const -{ - return m_multipleEntries; -} - -void MyListReply::setRawReply(ReplyCode replyCode, const QString &reply) -{ - AbstractReply::setRawReply(replyCode, reply); - - switch (replyCode) - { - case MYLIST: - { - QStringList parts = reply.mid(reply.indexOf("\n")).split('|', QString::KeepEmptyParts); - bool ok; - m_lid = parts[0].toInt(&ok, 10); - m_fid = parts[1].toInt(&ok, 10); - m_eid = parts[2].toInt(&ok, 10); - m_aid = parts[3].toInt(&ok, 10); - m_gid = parts[4].toInt(&ok, 10); - m_date = QDateTime::fromTime_t(parts[5].toUInt(&ok, 10)); - m_state = State(parts[6].toInt(&ok, 10)); - m_viewDate = QDateTime::fromTime_t(parts[7].toUInt(&ok, 10)); - m_storage = parts[8]; - m_source = parts[9]; - m_other = parts[10]; - m_fileState = FileState(parts[11].toInt(&ok, 10)); - emit replyReady(true); - } - break; - case MULTIPLE_MYLIST_ENTRIES: - { - m_multipleEntries = reply.mid(reply.indexOf("\n")).split('|', QString::KeepEmptyParts); - emit replyReady(true); - } - break; - case NO_SUCH_ENTRY: - default: - emit replyReady(false); - break; - } -} - -void MyListReply::init() -{ - m_lid = 0; - m_fid = 0; - m_aid = 0; - m_gid = 0; - m_eid = 0; - - m_state = State(0); - m_fileState = FileState(0); -} - -} // namespace AniDBUdpClient diff --git a/lib/anidbudpclient/mylistcommand.h b/lib/anidbudpclient/mylistcommand.h deleted file mode 100644 index 336b1bf..0000000 --- a/lib/anidbudpclient/mylistcommand.h +++ /dev/null @@ -1,140 +0,0 @@ -#ifndef MYLISTCOMMAND_H -#define MYLISTCOMMAND_H - -#include "anidbudpclient_global.h" -#include "abstractcommand.h" - -#include -#include - -namespace AniDBUdpClient { - -class MyListReply; - -class ANIDBUDPCLIENTSHARED_EXPORT MyListCommand : public AbstractCommand -{ -public: - typedef MyListReply ReplyType; - MyListCommand(); - MyListCommand(int lid); - MyListCommand(int fid, bool isFid); - MyListCommand(const QByteArray &ed2k, qint64 size); - MyListCommand(const QString &aname, const QString &gname, int epno); - MyListCommand(const QString &aname, int gid, int epno); - MyListCommand(int aid, const QString &gname, int epno); - MyListCommand(int aid, int gid, int epno); - - int lid() const; - void setLid(int lid); - int fid() const; - void setFid(int fid); - - QByteArray ed2k() const; - void setEd2k(const QByteArray &ed2k); - qint64 size() const; - void setSize(qint64 size); - - QString aname() const; - void setAname(const QString &aname); - int aid() const; - void setAid(int aid); - QString gname() const; - void setGname(const QString &gname); - int gid() const; - void setGid(int gid); - int epno() const; - void setEpno(int epno); - - bool isValid() const; - - bool waitForResult() const; - Command rawCommand() const; - void setRawReply(ReplyCode replyCode, const QString &reply, Client *client); - -private: - void init(); - - int m_lid; - int m_fid; - - QByteArray m_ed2k; - qint64 m_size; - - QString m_aname; - int m_aid; - QString m_gname; - int m_gid; - int m_epno; - -}; - -class ANIDBUDPCLIENTSHARED_EXPORT MyListReply : public AbstractReply -{ - Q_OBJECT - REPLY_DEFINITION_HELPER2(MyList) - - Q_PROPERTY(int lid READ lid); - Q_PROPERTY(int fid READ fid); - - Q_PROPERTY(int aid READ aid); - Q_PROPERTY(int gid READ gid); - - Q_PROPERTY(int eid READ eid); - Q_PROPERTY(QDateTime date READ date); - Q_PROPERTY(State state READ state); - Q_PROPERTY(QDateTime viewDate READ viewDate); - Q_PROPERTY(QString storage READ storage); - Q_PROPERTY(QString source READ source); - Q_PROPERTY(QString other READ other); - Q_PROPERTY(FileState fileState READ fileState); - - Q_PROPERTY(QStringList multipleEntries READ multipleEntries); - -public: - - int lid() const; - int fid() const; - - int aid() const; - int gid() const; - - - int eid() const; - QDateTime date() const; - State state() const; - QDateTime viewDate() const; - QString storage() const; - QString source() const; - QString other() const; - FileState fileState() const; - - QStringList multipleEntries() const; - - void setRawReply(ReplyCode replyCode, const QString &reply); - -private: - void init(); - - int m_lid; - int m_fid; - - int m_aid; - int m_gid; - int m_epno; - - int m_eid; - QDateTime m_date; - State m_state; - QDateTime m_viewDate; - QString m_storage; - QString m_source; - QString m_other; - FileState m_fileState; - - QStringList m_multipleEntries; - -}; - -} // namespace AniDBUdpClient - -#endif // MYLISTCOMMAND_H diff --git a/lib/anidbudpclient/rawcommand.cpp b/lib/anidbudpclient/rawcommand.cpp deleted file mode 100644 index 50f7660..0000000 --- a/lib/anidbudpclient/rawcommand.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "rawcommand.h" - -namespace AniDBUdpClient { - -RawCommand::RawCommand(const QString &command) : AbstractCommand() -{ - m_command = command; -} - -Command RawCommand::rawCommand() const -{ - return Command(m_command, QVariantMap()); -} - -} // namespace AniDBUdpClient diff --git a/lib/anidbudpclient/rawcommand.h b/lib/anidbudpclient/rawcommand.h deleted file mode 100644 index 0795cc5..0000000 --- a/lib/anidbudpclient/rawcommand.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef RAWCOMMAND_H -#define RAWCOMMAND_H - -#include "abstractcommand.h" - -namespace AniDBUdpClient { - -class RawReply; - -class ANIDBUDPCLIENTSHARED_EXPORT RawCommand : public AbstractCommand -{ -public: - typedef RawReply ReplyType; - RawCommand(const QString &command); - - Command rawCommand() const; - -private: - QString m_command; -}; - -class ANIDBUDPCLIENTSHARED_EXPORT RawReply : public AbstractReply -{ - Q_OBJECT - REPLY_DEFINITION_HELPER(Raw) -public: -}; - -} // namespace AniDBUdpClient - -#endif // RAWCOMMAND_H diff --git a/lib/anidbudpclient/uptimecommand.cpp b/lib/anidbudpclient/uptimecommand.cpp deleted file mode 100644 index f45ebaa..0000000 --- a/lib/anidbudpclient/uptimecommand.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include "uptimecommand.h" - -namespace AniDBUdpClient { - -UptimeCommand::UptimeCommand() : AbstractCommand() -{ -} - -bool UptimeCommand::waitForResult() const -{ - return true; -} - -Command UptimeCommand::rawCommand() const -{ - Command command; - command.first = "UPTIME"; - return command; -} - -// == - -int UptimeReply::uptime() -{ - return m_uptime; -} - -void UptimeReply::setRawReply(ReplyCode replyCode, const QString &reply, Client *client) -{ - Q_UNUSED(client); - - switch (replyCode) - { - case UPTIME: - { - QString uptimeText = reply.mid(reply.indexOf('\n')); - bool ok = false; - m_uptime = uptimeText.toInt(&ok, 10); - if (!ok) - m_uptime = 0; - - emit replyReady(ok); - } - break; - default: - emit replyReady(false); - break; - } -} - -void UptimeReply::init() -{ - m_uptime = 0; -} - -} // namespace AniDBUdpClient diff --git a/lib/anidbudpclient/uptimecommand.h b/lib/anidbudpclient/uptimecommand.h deleted file mode 100644 index 4a01766..0000000 --- a/lib/anidbudpclient/uptimecommand.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef UPTIMECOMMAND_H -#define UPTIMECOMMAND_H - -#include "abstractcommand.h" - -namespace AniDBUdpClient { - -class UptimeReply; - -class ANIDBUDPCLIENTSHARED_EXPORT UptimeCommand : public AbstractCommand -{ -public: - typedef UptimeReply ReplyType; - UptimeCommand(); - - bool waitForResult() const; - Command rawCommand() const; -}; - -class ANIDBUDPCLIENTSHARED_EXPORT UptimeReply : public AbstractReply -{ - Q_OBJECT - REPLY_DEFINITION_HELPER2(Uptime) - - Q_PROPERTY(int uptime READ uptime); -public: - - int uptime(); - - void setRawReply(ReplyCode replyCode, const QString &reply, Client *client); - -private: - void init(); - int m_uptime; -}; - - -} // namespace AniDBUdpClient - -#endif // UPTIMECOMMAND_H