Atlas Game Manager
A game manager for f95 and dlsite written in c++
Loading...
Searching...
No Matches
Game.hpp
Go to the documentation of this file.
1//
2// Created by kj16609 on 4/22/23.
3//
4
5#pragma once
6#ifndef ATLASGAMEMANAGER_GAME_HPP
7#define ATLASGAMEMANAGER_GAME_HPP
8
9#include <QPixmap>
10
11#include <filesystem> // Keep this down here for the same reason.
12
13#include "core/Types.hpp"
15
16template < typename T >
17class QFuture;
18
20{
21 class AtlasRemoteData;
22 class F95RemoteData;
23} // namespace atlas::remote
24
25[[maybe_unused]] constexpr bool USE_THUMBNAIL { true };
26[[maybe_unused]] constexpr bool USE_FULLSIZE { false };
27
28namespace atlas::records
29{
30 class Version;
31 struct GameData;
32
33 class Game final : public QObject
34 {
35 Q_OBJECT
36
37 std::shared_ptr< GameData > ptr { nullptr };
38
40
41 public:
42
43 Game() = default;
44 ~Game();
45 explicit Game( const RecordID id );
46
47 Game& operator=( const Game& other )
48 {
49 ptr = other.ptr;
50 m_id = other.m_id;
51 return *this;
52 }
53
54 Game( const Game& other ) : QObject( other.parent() ), ptr( other.ptr ), m_id( other.m_id )
55 {
56 if ( other.m_id == INVALID_RECORD_ID )
57 throw AtlasException( "Attempted to copy an object with an invalid record id" );
58 this->moveToThread( other.thread() );
59 }
60
62 inline bool valid() const { return ptr != nullptr; }
63
65 [[nodiscard]] inline RecordID id() const { return m_id; }
66
68 void setTitle( QString title );
70 void setCreator( QString creator );
72 void setEngine( QString engine );
74 void setDescription( QString description );
75
76 bool versionExists( const QString& str );
77
79 QPixmap requestThumbnail( const BannerType type );
80
82
87 void addVersion(
88 QString version_name,
89 std::filesystem::path dir,
90 std::filesystem::path executable,
91 const std::uint64_t folder_size,
92 const bool in_place );
93
95
99 void removeVersion( const Version& info );
100
102 void addPlaytime( const std::uint64_t seconds );
103
105 template < class Rep, class Period >
106 inline void addPlaytime( const std::chrono::duration< Rep, Period > time_diff )
107 {
108 addPlaytime( std::chrono::duration_cast< std::chrono::seconds >( time_diff ).count() );
109 }
110
112 void setLastPlayed( const std::uint64_t );
113
114 //====================Banners/Previews======================================
115
117 [[nodiscard]] QFuture< QPixmap > requestPreview( const std::uint64_t index, const bool use_thumbnail = false )
118 const;
119
120 void reorderPreviews( std::vector< std::filesystem::path > paths );
122 void addPreview( std::filesystem::path path, std::uint64_t index = 0 );
123 void removePreview( const std::uint64_t index );
124 void removePreview( const std::filesystem::path path );
125 [[nodiscard]] QFuture< QPixmap > preview( const std::uint64_t index, const bool use_thumbnail = false );
126 [[nodiscard]] QFuture< QPixmap > scaledPreview(
127 const QSize size,
128 const SCALE_TYPE scale_type,
129 const std::uint64_t index,
130 const bool use_thumbnail = false );
131
132 void addUserTag( QString str );
133 void removeUserTag( QString str );
134
135 void setBanner( std::filesystem::path path, const BannerType type );
136 const std::filesystem::path bannerPath( const BannerType type ) const;
137 [[nodiscard]] QFuture< QPixmap > requestBanner( const BannerType type, const bool use_thumbnail = false ) const;
138 [[nodiscard]] QFuture< QPixmap > requestBanner(
139 const int width,
140 const int height,
141 const SCALE_TYPE scale_type,
142 const BannerType type,
143 const bool use_thumbnail = false );
144 [[nodiscard]] QFuture< QPixmap > requestBanner(
145 const QSize size, const SCALE_TYPE scale_type, const BannerType type, const bool use_thumbnail = false );
146 bool hasBanner( const BannerType type ) const;
147
148 //=============== Remote connection ====================================
149
151 void connectAtlasData( const AtlasID id );
152
153 void connectF95Data( const F95ID id );
154
156 [[nodiscard]] const GameData* operator->() const { return ptr.get(); }
157
158 [[nodiscard]] bool hasVersion( const QString str ) const;
159 [[nodiscard]] Version& operator[]( const QString str ) const;
160
161 public:
162
163 signals:
165 }; // class Game
166
168
172 [[nodiscard]] Game importRecord( QString title, QString creator, QString engine );
173 [[nodiscard]] bool recordExists( QString title, QString creator, QString engine );
174 [[nodiscard]] RecordID fetchRecord( QString title, QString creator, QString engine );
175
177 {
178 RecordException( const char* const msg ) : AtlasException( msg ) {}
179 };
180
182 {
184
185 RecordAlreadyExists( Game& record_in );
186 };
187
189 {
191
192 InvalidRecordID( const RecordID in_id );
193 };
194} // namespace atlas::records
195
196//Doing this inside of the namespace breaks Qt stuff and prevents compilation
197Q_DECLARE_METATYPE( atlas::records::Game )
198
199#endif //ATLASGAMEMANAGER_GAME_HPP
constexpr bool USE_FULLSIZE
Definition Game.hpp:26
constexpr bool USE_THUMBNAIL
Definition Game.hpp:25
constexpr RecordID INVALID_RECORD_ID
Definition Types.hpp:15
std::uint32_t RecordID
Definition Types.hpp:11
std::uint64_t F95ID
Definition Types.hpp:13
std::uint64_t AtlasID
Definition Types.hpp:12
Definition Game.hpp:17
Definition Game.hpp:34
QPixmap requestThumbnail(const BannerType type)
Get thumbnail from image. BLOCKING.
Definition banners.cpp:166
RecordID m_id
Definition Game.hpp:39
void setEngine(QString engine)
Sets the engine for the game.
Definition Game.cpp:77
const std::filesystem::path bannerPath(const BannerType type) const
Definition banners.cpp:60
const GameData * operator->() const
Used to accessing internal GameData as a const data member.
Definition Game.hpp:156
void connectF95Data(const F95ID id)
Definition Game.cpp:135
void addPreview(std::filesystem::path path, std::uint64_t index=0)
If index is zero then it will place it at the highest possible postion (starting at 1)
Definition previews.cpp:35
QFuture< QPixmap > scaledPreview(const QSize size, const SCALE_TYPE scale_type, const std::uint64_t index, const bool use_thumbnail=false)
Definition previews.cpp:92
void removeUserTag(QString str)
Definition tags.cpp:32
std::shared_ptr< GameData > ptr
Definition Game.hpp:37
bool valid() const
Returns true if ptr points to valid game data.
Definition Game.hpp:62
RecordID id() const
Returns the record id for this game.
Definition Game.hpp:65
Game(const Game &other)
Definition Game.hpp:54
Version & operator[](const QString str) const
Definition versions.cpp:95
Game & operator=(const Game &other)
Definition Game.hpp:47
void setDescription(QString description)
Sets a description to be used.
Definition Game.cpp:85
QFuture< QPixmap > preview(const std::uint64_t index, const bool use_thumbnail=false)
Definition previews.cpp:73
void addVersion(QString version_name, std::filesystem::path dir, std::filesystem::path executable, const std::uint64_t folder_size, const bool in_place)
Adds a new version. Will throw if version of same name exists.
Definition versions.cpp:10
void setBanner(std::filesystem::path path, const BannerType type)
Definition banners.cpp:21
void reorderPreviews(std::vector< std::filesystem::path > paths)
Definition previews.cpp:20
void connectAtlasData(const AtlasID id)
Connects this record to a atlas_data mapping.
Definition Game.cpp:108
void addPlaytime(const std::chrono::duration< Rep, Period > time_diff)
Template form of addPlaytime for taking in any chrono duration.
Definition Game.hpp:106
bool versionExists(const QString &str)
Definition versions.cpp:43
void addUserTag(QString str)
Definition tags.cpp:13
QFuture< QPixmap > requestPreview(const std::uint64_t index, const bool use_thumbnail=false) const
Returns a future for the preview to be loaded.
Definition banners.cpp:186
bool hasBanner(const BannerType type) const
Definition banners.cpp:16
bool hasVersion(const QString str) const
Definition versions.cpp:83
void removeVersion(const Version &info)
Removes a version from Atlas.
Definition versions.cpp:54
void setLastPlayed(const std::uint64_t)
Sets the last played timestamp.
Definition Game.cpp:100
void removePreview(const std::uint64_t index)
Definition previews.cpp:111
void addPlaytime(const std::uint64_t seconds)
Adds playtime to the playtime counter.
Definition Game.cpp:91
QFuture< QPixmap > requestBanner(const BannerType type, const bool use_thumbnail=false) const
Definition banners.cpp:66
void setTitle(QString title)
Sets the title for the game.
Definition Game.cpp:61
~Game()
Definition Game.cpp:56
void setCreator(QString creator)
Sets the creator for the game.
Definition Game.cpp:69
Representation of a game version.
Definition Version.hpp:40
Definition AtlasData.hpp:58
Definition F95Data.hpp:44
SCALE_TYPE
Definition config.hpp:219
BannerType
Definition config.hpp:245
Definition banners.cpp:15
bool recordExists(QString title, QString creator, QString engine)
Definition Game.cpp:166
RecordID fetchRecord(QString title, QString creator, QString engine)
Definition Game.cpp:172
Game importRecord(QString title, QString creator, QString engine)
imports a new record and returns it. Will return an existing record if the record already exists
Definition Game.cpp:156
Definition Game.hpp:20
Definition exceptions.hpp:17
AtlasException(const char *const msg, const std::source_location loc=std::source_location::current())
Definition exceptions.hpp:26
Definition GameData.hpp:17
InvalidRecordID(const RecordID in_id)
Definition Game.cpp:182
RecordID id
Definition Game.hpp:190
Game record
Definition Game.hpp:183
RecordAlreadyExists(Game &record_in)
Definition Game.cpp:177
RecordException(const char *const msg)
Definition Game.hpp:178