2017-09-16 00:05:06 +02:00
|
|
|
#pragma once
|
|
|
|
|
2018-02-05 15:11:50 +01:00
|
|
|
#include <IrcConnection>
|
|
|
|
|
2017-09-16 00:05:06 +02:00
|
|
|
#include "channel.hpp"
|
2018-02-05 15:11:50 +01:00
|
|
|
#include "common.hpp"
|
2017-12-31 00:50:07 +01:00
|
|
|
#include "singletons/emotemanager.hpp"
|
|
|
|
#include "singletons/ircmanager.hpp"
|
2017-12-31 22:58:35 +01:00
|
|
|
#include "util/concurrentmap.hpp"
|
2017-09-16 00:05:06 +02:00
|
|
|
|
|
|
|
namespace chatterino {
|
2018-02-05 15:11:50 +01:00
|
|
|
namespace providers {
|
2017-09-16 00:05:06 +02:00
|
|
|
namespace twitch {
|
2018-03-24 12:02:07 +01:00
|
|
|
|
2018-02-05 15:11:50 +01:00
|
|
|
class TwitchServer;
|
2018-03-24 12:02:07 +01:00
|
|
|
|
2018-02-05 15:11:50 +01:00
|
|
|
class TwitchChannel final : public Channel
|
2017-09-16 00:05:06 +02:00
|
|
|
{
|
2017-11-04 14:57:29 +01:00
|
|
|
QTimer *liveStatusTimer;
|
2018-03-24 12:02:07 +01:00
|
|
|
QTimer *chattersListTimer;
|
2017-11-04 14:57:29 +01:00
|
|
|
|
2017-09-16 00:05:06 +02:00
|
|
|
public:
|
2018-03-30 12:37:00 +02:00
|
|
|
~TwitchChannel() final;
|
2017-09-16 00:05:06 +02:00
|
|
|
|
|
|
|
void reloadChannelEmotes();
|
|
|
|
|
|
|
|
bool isEmpty() const override;
|
|
|
|
bool canSendMessage() const override;
|
|
|
|
void sendMessage(const QString &message) override;
|
|
|
|
|
2018-01-18 18:17:48 +01:00
|
|
|
bool isMod() const override;
|
2018-01-17 18:36:12 +01:00
|
|
|
void setMod(bool value);
|
2018-01-17 17:17:26 +01:00
|
|
|
bool isBroadcaster();
|
|
|
|
bool hasModRights();
|
|
|
|
|
2018-03-30 12:16:12 +02:00
|
|
|
void addRecentChatter(const std::shared_ptr<messages::Message> &message) final;
|
|
|
|
|
2017-12-31 22:58:35 +01:00
|
|
|
const std::shared_ptr<chatterino::util::EmoteMap> bttvChannelEmotes;
|
|
|
|
const std::shared_ptr<chatterino::util::EmoteMap> ffzChannelEmotes;
|
2017-12-23 23:24:35 +01:00
|
|
|
|
2017-11-04 14:57:29 +01:00
|
|
|
const QString subscriptionURL;
|
|
|
|
const QString channelURL;
|
|
|
|
const QString popoutPlayerURL;
|
2017-09-16 00:05:06 +02:00
|
|
|
|
2017-11-04 14:57:29 +01:00
|
|
|
void setRoomID(const QString &_roomID);
|
2017-09-16 00:05:06 +02:00
|
|
|
boost::signals2::signal<void()> roomIDchanged;
|
2017-11-04 14:57:29 +01:00
|
|
|
boost::signals2::signal<void()> onlineStatusChanged;
|
2017-09-16 00:05:06 +02:00
|
|
|
|
2017-12-28 00:03:52 +01:00
|
|
|
pajlada::Signals::NoArgBoltSignal fetchMessages;
|
2018-01-17 18:36:12 +01:00
|
|
|
boost::signals2::signal<void()> userStateChanged;
|
2017-12-28 00:03:52 +01:00
|
|
|
|
2017-11-04 14:57:29 +01:00
|
|
|
QString roomID;
|
2017-09-16 00:05:06 +02:00
|
|
|
bool isLive;
|
|
|
|
QString streamViewerCount;
|
|
|
|
QString streamStatus;
|
|
|
|
QString streamGame;
|
|
|
|
QString streamUptime;
|
|
|
|
|
2018-03-30 12:16:12 +02:00
|
|
|
struct NameOptions {
|
|
|
|
QString displayName;
|
|
|
|
QString localizedName;
|
|
|
|
};
|
|
|
|
|
2017-09-16 00:05:06 +02:00
|
|
|
private:
|
2018-02-05 15:11:50 +01:00
|
|
|
explicit TwitchChannel(const QString &channelName, Communi::IrcConnection *readConnection);
|
|
|
|
|
2017-11-04 14:57:29 +01:00
|
|
|
void setLive(bool newLiveStatus);
|
|
|
|
void refreshLiveStatus();
|
|
|
|
|
2017-12-28 00:03:52 +01:00
|
|
|
void fetchRecentMessages();
|
2018-01-17 17:17:26 +01:00
|
|
|
|
2018-01-17 18:36:12 +01:00
|
|
|
boost::signals2::connection connectedConnection;
|
|
|
|
|
2018-01-17 17:17:26 +01:00
|
|
|
bool mod;
|
2018-01-22 15:24:39 +01:00
|
|
|
QByteArray messageSuffix;
|
|
|
|
QString lastSentMessage;
|
2017-11-04 14:57:29 +01:00
|
|
|
|
2018-02-05 15:11:50 +01:00
|
|
|
Communi::IrcConnection *readConnecetion;
|
|
|
|
|
|
|
|
friend class TwitchServer;
|
2018-03-30 12:16:12 +02:00
|
|
|
|
|
|
|
// Key = login name
|
|
|
|
std::map<QString, NameOptions> recentChatters;
|
|
|
|
std::mutex recentChattersMutex;
|
2018-02-05 15:11:50 +01:00
|
|
|
};
|
2018-03-24 12:02:07 +01:00
|
|
|
|
2017-11-04 14:57:29 +01:00
|
|
|
} // namespace twitch
|
2018-02-05 15:11:50 +01:00
|
|
|
} // namespace providers
|
2017-11-04 14:57:29 +01:00
|
|
|
} // namespace chatterino
|