forked from dolphin-emu/dolphin
		
	
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright 2018 Dolphin Emulator Project
 | 
						|
// Licensed under GPLv2+
 | 
						|
// Refer to the license.txt file included.
 | 
						|
 | 
						|
#ifdef USE_DISCORD_PRESENCE
 | 
						|
 | 
						|
#include "DolphinQt/DiscordJoinRequestDialog.h"
 | 
						|
 | 
						|
#include <QGridLayout>
 | 
						|
#include <QLabel>
 | 
						|
#include <QPixmap>
 | 
						|
#include <QPushButton>
 | 
						|
 | 
						|
#include <discord-rpc/include/discord_rpc.h>
 | 
						|
 | 
						|
#include "Common/HttpRequest.h"
 | 
						|
#include "Common/StringUtil.h"
 | 
						|
 | 
						|
DiscordJoinRequestDialog::DiscordJoinRequestDialog(QWidget* parent, const std::string& id,
 | 
						|
                                                   const std::string& discord_tag,
 | 
						|
                                                   const std::string& avatar)
 | 
						|
    : QDialog(parent), m_user_id(id), m_close_timestamp(std::time(nullptr) + s_max_lifetime_seconds)
 | 
						|
{
 | 
						|
  setWindowTitle(tr("Request to Join Your Party"));
 | 
						|
  setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
 | 
						|
 | 
						|
  QPixmap avatar_pixmap;
 | 
						|
 | 
						|
  if (!avatar.empty())
 | 
						|
  {
 | 
						|
    const std::string avatar_endpoint = StringFromFormat(
 | 
						|
        "https://cdn.discordapp.com/avatars/%s/%s.png", id.c_str(), avatar.c_str());
 | 
						|
 | 
						|
    Common::HttpRequest request;
 | 
						|
    Common::HttpRequest::Response response = request.Get(avatar_endpoint);
 | 
						|
 | 
						|
    if (response.has_value())
 | 
						|
      avatar_pixmap.loadFromData(response->data(), static_cast<uint>(response->size()), "png");
 | 
						|
  }
 | 
						|
 | 
						|
  CreateLayout(discord_tag, avatar_pixmap);
 | 
						|
  ConnectWidgets();
 | 
						|
}
 | 
						|
 | 
						|
std::time_t DiscordJoinRequestDialog::GetCloseTimestamp() const
 | 
						|
{
 | 
						|
  return m_close_timestamp;
 | 
						|
}
 | 
						|
 | 
						|
void DiscordJoinRequestDialog::CreateLayout(const std::string& discord_tag, const QPixmap& avatar)
 | 
						|
{
 | 
						|
  m_main_layout = new QGridLayout;
 | 
						|
 | 
						|
  m_invite_button = new QPushButton(tr("\u2714 Invite"));
 | 
						|
  m_decline_button = new QPushButton(tr("\u2716 Decline"));
 | 
						|
  m_ignore_button = new QPushButton(tr("Ignore"));
 | 
						|
 | 
						|
  QLabel* text =
 | 
						|
      new QLabel(tr("%1\nwants to join your party.").arg(QString::fromStdString(discord_tag)));
 | 
						|
  text->setAlignment(Qt::AlignCenter);
 | 
						|
 | 
						|
  if (!avatar.isNull())
 | 
						|
  {
 | 
						|
    QLabel* picture = new QLabel();
 | 
						|
    picture->setPixmap(avatar);
 | 
						|
    m_main_layout->addWidget(picture, 1, 0, 1, 3, Qt::AlignHCenter);
 | 
						|
  }
 | 
						|
 | 
						|
  m_main_layout->addWidget(text, 2, 0, 3, 3, Qt::AlignHCenter);
 | 
						|
  m_main_layout->addWidget(m_invite_button, 8, 0);
 | 
						|
  m_main_layout->addWidget(m_decline_button, 8, 1);
 | 
						|
  m_main_layout->addWidget(m_ignore_button, 8, 2);
 | 
						|
 | 
						|
  setLayout(m_main_layout);
 | 
						|
}
 | 
						|
 | 
						|
void DiscordJoinRequestDialog::ConnectWidgets()
 | 
						|
{
 | 
						|
  connect(m_invite_button, &QPushButton::pressed, [this] { Reply(DISCORD_REPLY_YES); });
 | 
						|
  connect(m_decline_button, &QPushButton::pressed, [this] { Reply(DISCORD_REPLY_NO); });
 | 
						|
  connect(m_ignore_button, &QPushButton::pressed, [this] { Reply(DISCORD_REPLY_IGNORE); });
 | 
						|
  connect(this, &QDialog::rejected, this, [this] { Reply(DISCORD_REPLY_IGNORE); });
 | 
						|
}
 | 
						|
 | 
						|
void DiscordJoinRequestDialog::Reply(int reply)
 | 
						|
{
 | 
						|
  Discord_Respond(m_user_id.c_str(), reply);
 | 
						|
  close();
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |