summaryrefslogtreecommitdiff
path: root/src/commands.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-01-26 21:45:57 +0300
committerAndrei Karas <akaras@inbox.ru>2014-01-26 22:01:51 +0300
commit5889bd94d241b8454268804861a67c79315a7731 (patch)
treeb37aaec28083110308fbbc5fa3a2c4bb07ce2ed7 /src/commands.cpp
parentbae784c3718b2d28bef80ef57f23c47cc4342c64 (diff)
downloadmanaplus-5889bd94d241b8454268804861a67c79315a7731.tar.gz
manaplus-5889bd94d241b8454268804861a67c79315a7731.tar.bz2
manaplus-5889bd94d241b8454268804861a67c79315a7731.tar.xz
manaplus-5889bd94d241b8454268804861a67c79315a7731.zip
add chat command for uploading main config.xml
New chat command: /uploadconfig
Diffstat (limited to 'src/commands.cpp')
-rw-r--r--src/commands.cpp78
1 files changed, 76 insertions, 2 deletions
diff --git a/src/commands.cpp b/src/commands.cpp
index 72fedeff1..ee41b04d0 100644
--- a/src/commands.cpp
+++ b/src/commands.cpp
@@ -58,6 +58,7 @@
#include "net/adminhandler.h"
#include "net/beinghandler.h"
#include "net/chathandler.h"
+#include "net/download.h"
#include "net/gamehandler.h"
#include "net/guildhandler.h"
#include "net/net.h"
@@ -96,7 +97,8 @@ extern char **environ;
namespace Commands
{
-static void outString(ChatTab *const tab, const std::string &str,
+static void outString(ChatTab *const tab,
+ const std::string &str,
const std::string &def)
{
if (!tab)
@@ -236,7 +238,7 @@ static void outStringNormal(ChatTab *const tab,
case ChatTab::TAB_WHISPER:
{
const WhisperTab *const whisper
- = static_cast<WhisperTab *const>(tab);
+ = static_cast<const WhisperTab *const>(tab);
tab->chatLog(player_node->getName(), str);
Net::getChatHandler()->privateMessage(whisper->getNick(), str);
break;
@@ -1268,6 +1270,78 @@ impHandler1(talkPet)
Net::getChatHandler()->talk(args, GENERAL_CHANNEL);
}
+
+struct UploadChatInfo
+{
+ UploadChatInfo() :
+ tab(nullptr),
+ upload(nullptr),
+ text(),
+ addStr()
+ { }
+
+ ChatTab *tab;
+ Net::Download *upload;
+ std::string text;
+ std::string addStr;
+};
+
+static int uploadUpdate(void *ptr,
+ DownloadStatus status,
+ size_t total A_UNUSED,
+ size_t remaining A_UNUSED)
+{
+ if (status == DOWNLOAD_STATUS_IDLE || status == DOWNLOAD_STATUS_STARTING)
+ return 0;
+
+ UploadChatInfo *const info = reinterpret_cast<UploadChatInfo*>(ptr);
+ if (status == DOWNLOAD_STATUS_COMPLETE)
+ {
+ ChatTab *const tab = info->tab;
+ if (chatWindow && (!tab || chatWindow->isTabPresent(tab)))
+ {
+ std::string str = Net::Download::getUploadResponse();
+ const int sz = str.size();
+ if (sz > 0)
+ {
+ if (str[sz - 1] == '\n')
+ str = str.substr(0, sz - 1);
+ str.append(info->addStr);
+ str = strprintf("%s [@@%s |%s@@]",
+ info->text.c_str(), str.c_str(), str.c_str());
+ outStringNormal(tab, str, str);
+ }
+ }
+ }
+ delete info->upload;
+ info->upload = nullptr;
+ delete info;
+ return 0;
+}
+
+static void uploadFile(const std::string &str,
+ const std::string &fileName,
+ const std::string &addStr)
+{
+ UploadChatInfo *const info = new UploadChatInfo();
+ Net::Download *const upload = new Net::Download(info,
+ "http://sprunge.us",
+ &uploadUpdate,
+ false, true);
+ info->upload = upload;
+ info->text = str;
+ info->addStr = addStr;
+ upload->setFile(fileName);
+ upload->start();
+}
+
+impHandler0(uploadConfig)
+{
+ uploadFile(_("Uploaded config into:"),
+ config.getFileName(),
+ "?xml");
+}
+
impHandler0(testsdlfont)
{
#if defined USE_OPENGL && defined DEBUG_SDLFONT