mirror of
				https://github.com/dolphin-emu/dolphin.git
				synced 2025-10-27 10:29:07 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2018 Dolphin Emulator Project
 | |
| // SPDX-License-Identifier: GPL-2.0-or-later
 | |
| 
 | |
| #ifdef USE_DISCORD_PRESENCE
 | |
| 
 | |
| #include "DolphinQt/DiscordJoinRequestDialog.h"
 | |
| 
 | |
| #include <QGridLayout>
 | |
| #include <QLabel>
 | |
| #include <QPixmap>
 | |
| #include <QPushButton>
 | |
| 
 | |
| #include <discord_rpc.h>
 | |
| #include <fmt/format.h>
 | |
| 
 | |
| #include "Common/HttpRequest.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 =
 | |
|         fmt::format("https://cdn.discordapp.com/avatars/{}/{}.png", id, avatar);
 | |
| 
 | |
|     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::clicked, [this] { Reply(DISCORD_REPLY_YES); });
 | |
|   connect(m_decline_button, &QPushButton::clicked, [this] { Reply(DISCORD_REPLY_NO); });
 | |
|   connect(m_ignore_button, &QPushButton::clicked, [this] { Reply(DISCORD_REPLY_IGNORE); });
 | |
|   connect(this, &QDialog::rejected, [this] { Reply(DISCORD_REPLY_IGNORE); });
 | |
| }
 | |
| 
 | |
| void DiscordJoinRequestDialog::Reply(int reply)
 | |
| {
 | |
|   Discord_Respond(m_user_id.c_str(), reply);
 | |
|   close();
 | |
| }
 | |
| 
 | |
| #endif
 |