diff options
Diffstat (limited to 'src/Client/Requests/UserLists/UserListUploadRequest.cpp')
-rw-r--r-- | src/Client/Requests/UserLists/UserListUploadRequest.cpp | 71 |
1 files changed, 71 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); +} + +} +} +} |