feat: Live Emote Updates for 7TV (#4090)
Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include "common/Outcome.hpp"
|
||||
#include "common/UniqueAccess.hpp"
|
||||
#include "messages/MessageThread.hpp"
|
||||
#include "providers/seventv/eventapi/SeventvEventAPIDispatch.hpp"
|
||||
#include "providers/twitch/ChannelPointReward.hpp"
|
||||
#include "providers/twitch/TwitchEmotes.hpp"
|
||||
#include "providers/twitch/api/Helix.hpp"
|
||||
@@ -119,6 +120,23 @@ public:
|
||||
virtual void refreshFFZChannelEmotes(bool manualRefresh);
|
||||
virtual void refreshSevenTVChannelEmotes(bool manualRefresh);
|
||||
|
||||
const QString &seventvUserID() const;
|
||||
const QString &seventvEmoteSetID() const;
|
||||
|
||||
/** Adds a 7TV channel emote to this channel. */
|
||||
void addSeventvEmote(const SeventvEventAPIEmoteAddDispatch &dispatch);
|
||||
/** Updates a 7TV channel emote's name in this channel */
|
||||
void updateSeventvEmote(const SeventvEventAPIEmoteUpdateDispatch &dispatch);
|
||||
/** Removes a 7TV channel emote from this channel */
|
||||
void removeSeventvEmote(const SeventvEventAPIEmoteRemoveDispatch &dispatch);
|
||||
/** Updates the current 7TV user. Currently, only the emote-set is updated. */
|
||||
void updateSeventvUser(
|
||||
const SeventvEventAPIUserConnectionUpdateDispatch &dispatch);
|
||||
|
||||
// Update the channel's 7TV information (the channel's 7TV user ID and emote set ID)
|
||||
void updateSeventvData(const QString &newUserID,
|
||||
const QString &newEmoteSetID);
|
||||
|
||||
// Badges
|
||||
boost::optional<EmotePtr> ffzCustomModBadge() const;
|
||||
boost::optional<EmotePtr> ffzCustomVipBadge() const;
|
||||
@@ -187,6 +205,41 @@ private:
|
||||
|
||||
QString prepareMessage(const QString &message) const;
|
||||
|
||||
/**
|
||||
* Either adds a message mentioning the updated emotes
|
||||
* or replaces an existing message. For criteria on existing messages,
|
||||
* see `tryReplaceLastLiveUpdateAddOrRemove`.
|
||||
*
|
||||
* @param isEmoteAdd true if the emote was added, false if it was removed.
|
||||
* @param platform The platform the emote was updated on ("7TV", "BTTV", "FFZ")
|
||||
* @param actor The actor performing the update (possibly empty)
|
||||
* @param emoteName The emote's name
|
||||
*/
|
||||
void addOrReplaceLiveUpdatesAddRemove(bool isEmoteAdd,
|
||||
const QString &platform,
|
||||
const QString &actor,
|
||||
const QString &emoteName);
|
||||
|
||||
/**
|
||||
* Tries to replace the last emote update message.
|
||||
*
|
||||
* A last message is valid if:
|
||||
* * The actors match
|
||||
* * The operations match
|
||||
* * The platform matches
|
||||
* * The last message isn't older than 5s
|
||||
*
|
||||
* @param op The emote operation (LiveUpdatesAdd or LiveUpdatesRemove)
|
||||
* @param platform The emote platform ("7TV", "BTTV", "FFZ")
|
||||
* @param actor The actor performing the action (possibly empty)
|
||||
* @param emoteName The updated emote's name
|
||||
* @return true, if the last message was replaced
|
||||
*/
|
||||
bool tryReplaceLastLiveUpdateAddOrRemove(MessageFlag op,
|
||||
const QString &platform,
|
||||
const QString &actor,
|
||||
const QString &emoteName);
|
||||
|
||||
// Data
|
||||
const QString subscriptionUrl_;
|
||||
const QString channelUrl_;
|
||||
@@ -225,6 +278,31 @@ private:
|
||||
QElapsedTimer clipCreationTimer_;
|
||||
bool isClipCreationInProgress{false};
|
||||
|
||||
/**
|
||||
* This channels 7TV user-id,
|
||||
* empty if this channel isn't connected with 7TV.
|
||||
*/
|
||||
QString seventvUserID_;
|
||||
/**
|
||||
* This channels current 7TV emote-set-id,
|
||||
* empty if this channel isn't connected with 7TV
|
||||
*/
|
||||
QString seventvEmoteSetID_;
|
||||
/**
|
||||
* The index of the twitch connection in
|
||||
* 7TV's user representation.
|
||||
*/
|
||||
size_t seventvUserTwitchConnectionIndex_;
|
||||
|
||||
/** The platform of the last live emote update ("7TV", "BTTV", "FFZ"). */
|
||||
QString lastLiveUpdateEmotePlatform_;
|
||||
/** The actor name of the last live emote update. */
|
||||
QString lastLiveUpdateEmoteActor_;
|
||||
/** A weak reference to the last live emote update message. */
|
||||
std::weak_ptr<const Message> lastLiveUpdateMessage_;
|
||||
/** A list of the emotes listed in the lat live emote update message. */
|
||||
std::vector<QString> lastLiveUpdateEmoteNames_;
|
||||
|
||||
pajlada::Signals::SignalHolder signalHolder_;
|
||||
std::vector<boost::signals2::scoped_connection> bSignals_;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user