]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/configuration/rpcconfig/messages_methods.cpp
Move projects back into subfolder.
[stg.git] / projects / stargazer / plugins / configuration / rpcconfig / messages_methods.cpp
diff --git a/projects/stargazer/plugins/configuration/rpcconfig/messages_methods.cpp b/projects/stargazer/plugins/configuration/rpcconfig/messages_methods.cpp
new file mode 100644 (file)
index 0000000..854b276
--- /dev/null
@@ -0,0 +1,100 @@
+#include "messages_methods.h"
+#include "rpcconfig.h"
+
+#include "stg/users.h"
+#include "stg/user.h"
+#include "stg/message.h"
+#include "stg/common.h"
+
+#include <ostream> // xmlrpc-c devs have missed something :)
+
+extern volatile time_t stgTime;
+
+//------------------------------------------------------------------------------
+
+void METHOD_MESSAGE_SEND::execute(xmlrpc_c::paramList const & paramList,
+                                  xmlrpc_c::value *   const   retvalPtr)
+{
+std::string cookie = paramList.getString(0);
+std::vector<xmlrpc_c::value> logins(paramList.getArray(1));
+std::map<std::string, xmlrpc_c::value> msgInfo(paramList.getStruct(2));
+paramList.verifyEnd(3);
+
+ADMIN_INFO adminInfo;
+
+if (config->GetAdminInfo(cookie, &adminInfo))
+    {
+    *retvalPtr = xmlrpc_c::value_boolean(false);
+    return;
+    }
+
+STG::Message message;
+
+std::map<std::string, xmlrpc_c::value>::iterator it;
+
+if ((it = msgInfo.find("version")) == msgInfo.end())
+    {
+    message.header.ver = 1; // Default value
+    }
+else
+    {
+    message.header.ver = xmlrpc_c::value_int(it->second);
+    }
+
+if ((it = msgInfo.find("type")) == msgInfo.end())
+    {
+    message.header.type = 1; // default value
+    }
+else
+    {
+    message.header.type = xmlrpc_c::value_int(it->second);
+    }
+
+if ((it = msgInfo.find("repeat")) == msgInfo.end())
+    {
+    *retvalPtr = xmlrpc_c::value_boolean(false);
+    return;
+    }
+message.header.repeat = xmlrpc_c::value_int(it->second);
+
+if ((it = msgInfo.find("repeat_period")) == msgInfo.end())
+    {
+    *retvalPtr = xmlrpc_c::value_boolean(false);
+    return;
+    }
+message.header.repeatPeriod = xmlrpc_c::value_int(it->second);
+
+if ((it = msgInfo.find("show_time")) == msgInfo.end())
+    {
+    *retvalPtr = xmlrpc_c::value_boolean(false);
+    return;
+    }
+message.header.showTime = xmlrpc_c::value_int(it->second);
+
+if ((it = msgInfo.find("text")) == msgInfo.end())
+    {
+    *retvalPtr = xmlrpc_c::value_boolean(false);
+    return;
+    }
+message.text = IconvString(xmlrpc_c::value_string(it->second), "UTF-8", "CP1251");
+
+message.header.creationTime = static_cast<int>(stgTime);
+message.header.lastSendTime = 0;
+
+std::vector<xmlrpc_c::value>::iterator lit;
+for (lit = logins.begin(); lit != logins.end(); ++lit)
+    {
+    using UserPtr = STG::User*;
+    UserPtr ui;
+    if (users->FindByName(xmlrpc_c::value_string(*lit), &ui))
+        {
+        printfd(__FILE__, "METHOD_MESSAGE_SEND::execute(): 'User '%s' not found'\n", std::string(xmlrpc_c::value_string(*lit)).c_str());
+        }
+    else
+        {
+        ui->AddMessage(&message);
+        }
+    }
+
+*retvalPtr = xmlrpc_c::value_boolean(true);
+}