--- /dev/null
+#include "animecommand.h"\r
+\r
+#include <QStringList>\r
+\r
+namespace AniDBUdpClient {\r
+\r
+AnimeCommand::AnimeCommand()\r
+{\r
+ init();\r
+}\r
+\r
+AnimeCommand::AnimeCommand(int aid, AnimeFlags amask)\r
+{\r
+ init();\r
+ m_aid = aid;\r
+ m_amask = amask;\r
+}\r
+\r
+AnimeCommand::AnimeCommand(const QString &aname, AnimeFlags amask)\r
+{\r
+ init();\r
+ m_aname = aname;\r
+ m_amask = amask;\r
+}\r
+\r
+int AnimeCommand::aid() const\r
+{\r
+ return m_aid;\r
+}\r
+\r
+void AnimeCommand::setAid(int aid)\r
+{\r
+ m_aid = aid;\r
+}\r
+\r
+AnimeFlags AnimeCommand::amask() const\r
+{\r
+ return m_amask;\r
+}\r
+\r
+void AnimeCommand::amask(AnimeFlags amask)\r
+{\r
+ m_amask = amask;\r
+}\r
+\r
+QString AnimeCommand::aname() const\r
+{\r
+ return m_aname;\r
+}\r
+\r
+void AnimeCommand::setAname(const QString &aname)\r
+{\r
+ m_aname = aname;\r
+}\r
+\r
+bool AnimeCommand::isValid() const\r
+{\r
+ return m_aid || !m_aname.isEmpty();\r
+ // amask doesn't need to be checked as all invalid bits are removed\r
+}\r
+\r
+bool AnimeCommand::waitForResult() const\r
+{\r
+ return true;\r
+}\r
+\r
+Command AnimeCommand::rawCommand() const\r
+{\r
+ Command cmd;\r
+ cmd.first = "ANIME";\r
+\r
+ if (m_aid)\r
+ cmd.second["aid"] = m_aid;\r
+ else if (!m_aname.isEmpty())\r
+ cmd.second["aname"] = m_aname;\r
+\r
+ if (m_amask)\r
+ cmd.second["amask"] = QString::number(m_amask & AnimeFlag::AllData, 16)\r
+ .rightJustified(14, QLatin1Char('0'));;\r
+\r
+ return cmd;\r
+}\r
+\r
+void AnimeCommand::init()\r
+{\r
+ m_aid = 0;\r
+ m_amask = 0;\r
+}\r
+\r
+QVariant AnimeReply::value(AnimeFlags f) const\r
+{\r
+ return animeFlagData.value(f);\r
+}\r
+\r
+void AnimeReply::setRawReply(ReplyCode replyCode, const QString &reply)\r
+{\r
+ AbstractReply::setRawReply(replyCode, reply);\r
+\r
+ switch (replyCode)\r
+ {\r
+ case ANIME:\r
+ readReplyData(reply);\r
+ signalReplyReady(true);\r
+ break;\r
+ case NO_SUCH_ANIME:\r
+ default:\r
+ signalReplyReady(false);\r
+ break;\r
+ }\r
+}\r
+\r
+void AnimeReply::readReplyData(const QString &reply)\r
+{\r
+ QString d = reply.mid(reply.indexOf('\n')).trimmed();\r
+ QStringList parts = d.split('|', QString::KeepEmptyParts);\r
+\r
+}\r
+\r
+void AnimeReply::init()\r
+{\r
+}\r
+\r
+} // namespace AniDBUdpClient\r
--- /dev/null
+#ifndef ANIMECOMMAND_H\r
+#define ANIMECOMMAND_H\r
+\r
+#include "abstractcommand.h"\r
+\r
+namespace AniDBUdpClient {\r
+\r
+class AnimeReply;\r
+\r
+class ANIDBUDPCLIENTSHARED_EXPORT AnimeCommand : public AbstractCommand\r
+{\r
+ //Q_PROPERTY(int eid READ eid WRITE setEid)\r
+ //Q_PROPERTY(int aid READ aid WRITE setAid)\r
+ //Q_PROPERTY(int epno READ epno WRITE setEpno)\r
+ //Q_PROPERTY(int aname READ aname WRITE setAname)\r
+\r
+public:\r
+ typedef AnimeReply ReplyType;\r
+ AnimeCommand();\r
+ explicit AnimeCommand(int aid, AnimeFlags amask = 0);\r
+ explicit AnimeCommand(const QString &aname, AnimeFlags amask = 0);\r
+\r
+ int aid() const;\r
+ void setAid(int aid);\r
+\r
+ AnimeFlags amask() const;\r
+ void amask(AnimeFlags amask);\r
+\r
+ QString aname() const;\r
+ void setAname(const QString &aname);\r
+\r
+ bool isValid() const;\r
+\r
+ bool waitForResult() const;\r
+ Command rawCommand() const;\r
+\r
+private:\r
+ void init();\r
+\r
+ int m_aid;\r
+ AnimeFlags m_amask;\r
+ QString m_aname;\r
+};\r
+\r
+class ANIDBUDPCLIENTSHARED_EXPORT AnimeReply : public AbstractReply\r
+{\r
+ Q_OBJECT\r
+ REPLY_DEFINITION_HELPER2(Anime)\r
+\r
+public:\r
+ QVariant value(AnimeFlags f) const;\r
+\r
+ void setRawReply(ReplyCode replyCode, const QString &reply);\r
+\r
+private:\r
+ void readReplyData(const QString &reply);\r
+ void init();\r
+\r
+ QMap<AnimeFlags, QVariant> animeFlagData;\r
+};\r
+\r
+} // namespace AniDBUdpClient\r
+\r
+#endif // ANIMECOMMAND_H\r