diff options
Diffstat (limited to 'src/Client/Requests/UserLists')
-rw-r--r-- | src/Client/Requests/UserLists/UserListUploadRequest.cpp | 71 | ||||
-rw-r--r-- | src/Client/Requests/UserLists/UserListUploadRequest.h | 51 |
2 files changed, 122 insertions, 0 deletions
diff --git a/src/Client/Requests/UserLists/UserListUploadRequest.cpp b/src/Client/Requests/UserLists/UserListUploadRequest.cpp new file mode 100644 index 0000000..28251d8 --- /dev/null +++ b/src/Client/Requests/UserLists/UserListUploadRequest.cpp @@ -0,0 +1,71 @@ +/* + * UserListUploadRequest.cpp + * + * Copyright (C) 2009 Matthias Schiffer <matthias@gamezock.de> + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "UserListUploadRequest.h" +#include <Common/UserLists/Util.h> + +namespace Mad { +namespace Client { +namespace UserLists { + +void UserListUploadRequest::sendRequest() { + Common::XmlData packet; + packet.setType("UploadUserList"); + packet.set("name", name); + + sendPacket(packet); +} + +void UserListUploadRequest::handlePacket(boost::shared_ptr<const Common::XmlData> packet) { + if(packet->getType() == "Error") { + signalFinished(Core::Exception(packet->get<const Core::String&>("Where"), + static_cast<Core::Exception::ErrorCode>(packet->get<long>("ErrorCode")), + packet->get<long>("SubCode"), packet->get<long>("SubSubCode"))); + return; + } + else if(packet->getType() == "OK") { + if(canceled) { + signalFinished(packet, Core::Exception(Core::Exception::DUPLICATE_ENTRY)); + } + else { + signalFinished(packet); + } + } + else if(packet->getType() != "Continue") { + signalFinished(Core::Exception(Core::Exception::UNEXPECTED_PACKET)); + return; // TODO Logging + } + + if(!overwrite && packet->get<bool>("exists")) { + Common::XmlData ret; + ret.setType("Cancel"); + sendPacket(ret); + canceled = true; + return; + } + + Common::XmlData ret; + ret.setType("UploadUserList"); + Common::UserLists::Util::serializeUserList(userList.get(), &ret); + sendPacket(ret); +} + +} +} +} diff --git a/src/Client/Requests/UserLists/UserListUploadRequest.h b/src/Client/Requests/UserLists/UserListUploadRequest.h new file mode 100644 index 0000000..c270b40 --- /dev/null +++ b/src/Client/Requests/UserLists/UserListUploadRequest.h @@ -0,0 +1,51 @@ +/* + * UserListUploadRequest.h + * + * Copyright (C) 2009 Matthias Schiffer <matthias@gamezock.de> + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef MAD_COMMON_USERLISTUPLOADREQUEST_H_ +#define MAD_COMMON_USERLISTUPLOADREQUEST_H_ + +#include <Common/Request.h> +#include <Common/UserLists/UserList.h> + +namespace Mad { +namespace Client { + +namespace UserLists { + +class UserListUploadRequest : public Common::Request { + private: + Core::String name; + boost::shared_ptr<const Common::UserLists::UserList> userList; + bool overwrite; + bool canceled; + + protected: + virtual void sendRequest(); + virtual void handlePacket(boost::shared_ptr<const Common::XmlData> packet); + + public: + UserListUploadRequest(Common::Application *application, const Core::String &name0, boost::shared_ptr<const Common::UserLists::UserList> userList0, bool overwrite0 = false) + : Request(application), name(name0), userList(userList0), overwrite(overwrite0), canceled(false) {} +}; + +} +} +} + +#endif /* MAD_COMMON_USERLISTUPLOADREQUEST_H_ */ |