#pragma once #include "channel-selection.hpp" #include "token.hpp" #include #include #include namespace advss { struct TwitchPointsReward { void Load(obs_data_t *obj); void Save(obs_data_t *obj) const; std::string id = "-"; std::string title = "-"; }; class TwitchPointsRewardSelection : public FilterComboBox { Q_OBJECT public: TwitchPointsRewardSelection(QWidget *parent, bool allowAny); void SetPointsReward(const TwitchPointsReward &pointsReward); void SetChannel(const TwitchChannel &channel); void SetToken(const std::weak_ptr &token); protected: void DisplayErrorMessage(const char *errorMessage); void HideErrorMessage(); std::optional _channel = {}; std::weak_ptr _token; private: void AddPredefinedItems(); bool _allowAny; const std::vector _supportedTokenOptions = { {"channel:read:redemptions"}, {"channel:manage:redemptions"}}; private slots: void PopulateSelection(); void SelectionChanged(int); signals: void PointsRewardChanged(const TwitchPointsReward &); }; class TwitchPointsRewardWidget : public QWidget { Q_OBJECT public: TwitchPointsRewardWidget(QWidget *parent, bool allowAny); void SetPointsReward(const TwitchPointsReward &pointsReward); void SetChannel(const TwitchChannel &channel); void SetToken(const std::weak_ptr &token); signals: void PointsRewardChanged(const TwitchPointsReward &); protected: TwitchPointsRewardSelection *_selection; QPushButton *_refreshButton; }; std::optional> GetPointsRewardsForChannel(const std::shared_ptr &token, const TwitchChannel &channel); } // namespace advss