Files
@ d11fdaf3e279
Branch filter:
Location: libtransport.git/spectrum/src/frontends/slack/SlackAPI.h
d11fdaf3e279
4.1 KiB
text/plain
systemd: wait for network-online.target and add WantedBy=multi-user.target
Thanks to that, "systemctl enable spectrum2" does what expected, that is
makes Spectrum2 start on boot. Also, network.target doesn't tell anything
meaningful - it's just that the network stack is available.
Adding network-online.target makes sure that the network interfaces are up
before starting Spectrum2.
Thanks to that, "systemctl enable spectrum2" does what expected, that is
makes Spectrum2 start on boot. Also, network.target doesn't tell anything
meaningful - it's just that the network stack is available.
Adding network-online.target makes sure that the network interfaces are up
before starting Spectrum2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | /**
* Spectrum 2 Slack Frontend
*
* Copyright (C) 2015, Jan Kaluza <hanzz.k@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
#pragma once
#include "transport/HTTPRequestQueue.h"
#include "transport/HTTPRequest.h"
#include <json/json.h>
#include <string>
#include <algorithm>
#include <map>
namespace Transport {
class Component;
class StorageBackend;
class HTTPRequest;
class SlackIdManager;
class SlackChannelInfo {
public:
SlackChannelInfo() {}
virtual ~SlackChannelInfo() {}
std::string id;
std::string name;
std::vector<std::string> members;
};
class SlackImInfo {
public:
SlackImInfo() {}
virtual ~SlackImInfo() {}
std::string id;
std::string user;
};
class SlackUserInfo {
public:
SlackUserInfo() : isPrimaryOwner(false) {}
virtual ~SlackUserInfo() {}
std::string id;
std::string name;
bool isPrimaryOwner;
};
class SlackAPI : public HTTPRequestQueue {
public:
SlackAPI(Component *component, SlackIdManager *idManager, const std::string &token, const std::string &domain);
virtual ~SlackAPI();
void usersList(HTTPRequest::Callback callback);
std::string getOwnerId(HTTPRequest *req, bool ok, Json::Value &resp, const std::string &data);
void channelsCreate(const std::string &name, HTTPRequest::Callback callback);
void channelsInvite(const std::string &channel, const std::string &user, HTTPRequest::Callback callback);
void channelsList(HTTPRequest::Callback callback);
void imOpen(const std::string &uid, HTTPRequest::Callback callback);
std::string getChannelId(HTTPRequest *req, bool ok, Json::Value &resp, const std::string &data);
void deleteMessage(const std::string &channel, const std::string &ts);
void sendMessage(const std::string &from, const std::string &to, const std::string &text);
void setPurpose(const std::string &channel, const std::string &purpose);
static void getSlackChannelInfo(HTTPRequest *req, bool ok, Json::Value &resp, const std::string &data, std::map<std::string, SlackChannelInfo> &channels);
static void getSlackImInfo(HTTPRequest *req, bool ok, Json::Value &resp, const std::string &data, std::map<std::string, SlackImInfo> &ims);
static void getSlackUserInfo(HTTPRequest *req, bool ok, Json::Value &resp, const std::string &data, std::map<std::string, SlackUserInfo> &users);
static std::string SlackObjectToPlainText(const std::string &object, bool isChannel = false, bool returnName = false);
// Creates channel if it does not exist and invites the user to the channel.
typedef boost::function< void (const std::string &channelId) > CreateChannelCallback;
void createChannel(const std::string &channel, const std::string &user, CreateChannelCallback callback);
private:
void handleSendMessage(HTTPRequest *req, bool ok, Json::Value &resp, const std::string &data);
void handleSlackChannelCreate(HTTPRequest *req, bool ok, Json::Value &resp, const std::string &data, const std::string &channel, const std::string &user, CreateChannelCallback callback);
void handleSlackChannelList(HTTPRequest *req, bool ok, Json::Value &resp, const std::string &data, const std::string &channel, const std::string &user, CreateChannelCallback callback);
void handleSlackChannelInvite(HTTPRequest *req, bool ok, Json::Value &resp, const std::string &data, const std::string &channel, const std::string &user, CreateChannelCallback callback);
private:
Component *m_component;
SlackIdManager *m_idManager;
std::string m_token;
std::string m_domain;
};
}
|