From 5e0724a10bb5d0799408caaad5528558f18ed4c7 Mon Sep 17 00:00:00 2001
From: leha-bot <leha-bot@users.noreply.github.com>
Date: Wed, 24 Jul 2019 04:05:43 +0300
Subject: [PATCH] Extract GameData

Related to #174.
---
 Telegram/CMakeLists.txt                 |  1 +
 Telegram/SourceFiles/data/data_game.cpp | 40 +++++++++++++++++++++++
 Telegram/SourceFiles/data/data_game.h   | 43 +++++++++++++++++++++++++
 Telegram/SourceFiles/structs.cpp        | 10 ------
 Telegram/SourceFiles/structs.h          | 18 -----------
 5 files changed, 84 insertions(+), 28 deletions(-)
 create mode 100644 Telegram/SourceFiles/data/data_game.cpp
 create mode 100644 Telegram/SourceFiles/data/data_game.h

diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt
index 5620861d4..36351cc47 100644
--- a/Telegram/CMakeLists.txt
+++ b/Telegram/CMakeLists.txt
@@ -259,6 +259,7 @@ add_executable(Kepka WIN32 MACOSX_BUNDLE
 
     SourceFiles/data/data_abstract_structure.cpp
     SourceFiles/data/data_drafts.cpp
+    SourceFiles/data/data_game.cpp
     SourceFiles/data/data_photo.cpp
 
     SourceFiles/dialogs/dialogs_indexed_list.cpp
diff --git a/Telegram/SourceFiles/data/data_game.cpp b/Telegram/SourceFiles/data/data_game.cpp
new file mode 100644
index 000000000..58424157c
--- /dev/null
+++ b/Telegram/SourceFiles/data/data_game.cpp
@@ -0,0 +1,40 @@
+//
+// This file is part of Kepka,
+// an unofficial desktop version of Telegram messaging app,
+// see https://github.com/procxx/kepka
+//
+// Kepka is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// It is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// In addition, as a special exception, the copyright holders give permission
+// to link the code of portions of this program with the OpenSSL library.
+//
+// Full license: https://github.com/procxx/kepka/blob/master/LICENSE
+// Copyright (c) 2017- Kepka Contributors, https://github.com/procxx
+//
+
+#include "data_game.h"
+#include "data/data_photo.h"
+#include "data/data_document.h"
+
+GameData::GameData(const GameId &id, const quint64 &accessHash, const QString &shortName, const QString &title,
+                   const QString &description, PhotoData *photo, DocumentData *document)
+    : id(id)
+    , accessHash(accessHash)
+    , shortName(shortName)
+    , title(title)
+    , description(description)
+    , photo(photo)
+    , document(document) {}
+
+void GameData::forget() {
+	if (document) document->forget();
+	if (photo) photo->forget();
+}
diff --git a/Telegram/SourceFiles/data/data_game.h b/Telegram/SourceFiles/data/data_game.h
new file mode 100644
index 000000000..2a8fe94db
--- /dev/null
+++ b/Telegram/SourceFiles/data/data_game.h
@@ -0,0 +1,43 @@
+//
+// This file is part of Kepka,
+// an unofficial desktop version of Telegram messaging app,
+// see https://github.com/procxx/kepka
+//
+// Kepka is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// It is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// In addition, as a special exception, the copyright holders give permission
+// to link the code of portions of this program with the OpenSSL library.
+//
+// Full license: https://github.com/procxx/kepka/blob/master/LICENSE
+// Copyright (c) 2019- Kepka Contributors, https://github.com/procxx
+//
+/// @file data/data_game.h Data_type for Telegram Games.
+
+#pragma once
+
+#include "data/data_types.h"
+
+struct GameData {
+	GameData(const GameId &id)
+	    : id(id) {}
+	GameData(const GameId &id, const quint64 &accessHash, const QString &shortName, const QString &title,
+	         const QString &description, PhotoData *photo, DocumentData *document);
+
+	void forget();
+
+	GameId id = 0;
+	quint64 accessHash = 0;
+	QString shortName;
+	QString title;
+	QString description;
+	PhotoData *photo = nullptr;
+	DocumentData *document = nullptr;
+};
diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp
index 82d784a04..5998ad965 100644
--- a/Telegram/SourceFiles/structs.cpp
+++ b/Telegram/SourceFiles/structs.cpp
@@ -2113,16 +2113,6 @@ WebPageData::WebPageData(const WebPageId &id, WebPageType type, const QString &u
     , document(document)
     , pendingTill(pendingTill) {}
 
-GameData::GameData(const GameId &id, const quint64 &accessHash, const QString &shortName, const QString &title,
-                   const QString &description, PhotoData *photo, DocumentData *document)
-    : id(id)
-    , accessHash(accessHash)
-    , shortName(shortName)
-    , title(title)
-    , description(description)
-    , photo(photo)
-    , document(document) {}
-
 MsgId clientMsgId() {
 	static MsgId currentClientMsgId = StartClientMsgId;
 	Assert(currentClientMsgId < EndClientMsgId);
diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h
index 444d0c678..0c6bbcb59 100644
--- a/Telegram/SourceFiles/structs.h
+++ b/Telegram/SourceFiles/structs.h
@@ -158,7 +158,6 @@ using VideoId = quint64;
 using AudioId = quint64;
 using DocumentId = quint64;
 using WebPageId = quint64;
-using GameId = quint64;
 static const WebPageId CancelledWebPageId = 0xFFFFFFFFFFFFFFFFULL;
 
 inline bool operator==(const FullMsgId &a, const FullMsgId &b) {
@@ -1500,23 +1499,6 @@ struct WebPageData {
 	qint32 pendingTill;
 };
 
-struct GameData {
-	GameData(const GameId &id, const quint64 &accessHash = 0, const QString &shortName = QString(),
-	         const QString &title = QString(), const QString &description = QString(), PhotoData *photo = nullptr,
-	         DocumentData *doc = nullptr);
-
-	void forget() {
-		if (document) document->forget();
-		if (photo) photo->forget();
-	}
-
-	GameId id;
-	quint64 accessHash;
-	QString shortName, title, description;
-	PhotoData *photo;
-	DocumentData *document;
-};
-
 QString saveFileName(const QString &title, const QString &filter, const QString &prefix, QString name, bool savingAs,
                      const QDir &dir = QDir());
 MsgId clientMsgId();