Chatterino
Application.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <QApplication>
4 #include <memory>
5 
7 #include "common/Singleton.hpp"
9 
10 namespace chatterino {
11 
12 class TwitchIrcServer;
13 class PubSub;
14 
15 class CommandController;
16 class AccountController;
17 class NotificationController;
18 class HighlightController;
19 class HotkeyController;
20 class IUserDataController;
21 class UserDataController;
22 
23 class Theme;
24 class WindowManager;
25 class Logging;
26 class Paths;
27 class AccountManager;
28 class Emotes;
29 class IEmotes;
30 class Settings;
31 class Fonts;
32 class Toasts;
33 class ChatterinoBadges;
34 class FfzBadges;
35 class SeventvBadges;
36 
38 {
39 public:
40  IApplication();
41  virtual ~IApplication() = default;
42 
44 
45  virtual Theme *getThemes() = 0;
46  virtual Fonts *getFonts() = 0;
47  virtual IEmotes *getEmotes() = 0;
48  virtual AccountController *getAccounts() = 0;
49  virtual HotkeyController *getHotkeys() = 0;
50  virtual WindowManager *getWindows() = 0;
51  virtual Toasts *getToasts() = 0;
52  virtual CommandController *getCommands() = 0;
53  virtual HighlightController *getHighlights() = 0;
55  virtual TwitchIrcServer *getTwitch() = 0;
57  virtual FfzBadges *getFfzBadges() = 0;
58  virtual IUserDataController *getUserData() = 0;
59 };
60 
61 class Application : public IApplication
62 {
63  std::vector<std::unique_ptr<Singleton>> singletons_;
64  int argc_;
65  char **argv_;
66 
67 public:
69 
70  Application(Settings &settings, Paths &paths);
71 
72  void initialize(Settings &settings, Paths &paths);
73  void load();
74  void save();
75 
76  int run(QApplication &qtApp);
77 
78  friend void test();
79 
80  Theme *const themes{};
81  Fonts *const fonts{};
82  Emotes *const emotes{};
83  AccountController *const accounts{};
84  HotkeyController *const hotkeys{};
85  WindowManager *const windows{};
86  Toasts *const toasts{};
87 
88  CommandController *const commands{};
89  NotificationController *const notifications{};
90  HighlightController *const highlights{};
91  TwitchIrcServer *const twitch{};
92  ChatterinoBadges *const chatterinoBadges{};
93  FfzBadges *const ffzBadges{};
94  SeventvBadges *const seventvBadges{};
95  UserDataController *const userData{};
96 
97  /*[[deprecated]]*/ Logging *const logging{};
98 
99  Theme *getThemes() override
100  {
101  return this->themes;
102  }
103  Fonts *getFonts() override
104  {
105  return this->fonts;
106  }
107  IEmotes *getEmotes() override;
109  {
110  return this->accounts;
111  }
113  {
114  return this->hotkeys;
115  }
117  {
118  return this->windows;
119  }
120  Toasts *getToasts() override
121  {
122  return this->toasts;
123  }
125  {
126  return this->commands;
127  }
129  {
130  return this->notifications;
131  }
133  {
134  return this->highlights;
135  }
137  {
138  return this->twitch;
139  }
141  {
142  return this->chatterinoBadges;
143  }
145  {
146  return this->ffzBadges;
147  }
148  IUserDataController *getUserData() override;
149 
150 private:
151  void addSingleton(Singleton *singleton);
152  void initPubSub();
153  void initSeventvEventAPI();
154  void initNm(Paths &paths);
155 
156  template <typename T,
157  typename = std::enable_if_t<std::is_base_of<Singleton, T>::value>>
158  T &emplace()
159  {
160  auto t = new T;
161  this->singletons_.push_back(std::unique_ptr<T>(t));
162  return *t;
163  }
164 
165  NativeMessagingServer nmServer{};
166 };
167 
169 
170 // Get an interface version of the Application class - should be preferred when possible for new code
172 
173 } // namespace chatterino
Application * getApp()
Definition: Application.cpp:623
Definition: Emotes.hpp:17
HotkeyController * getHotkeys() override
Definition: Application.hpp:112
virtual Fonts * getFonts()=0
Definition: Logging.hpp:14
WindowManager * getWindows() override
Definition: Application.hpp:116
Definition: Singleton.hpp:10
Definition: Fonts.hpp:42
Definition: Application.hpp:61
virtual NotificationController * getNotifications()=0
ChatterinoBadges * getChatterinoBadges() override
Definition: Application.hpp:140
Definition: Application.cpp:48
Definition: HighlightController.hpp:150
Definition: FfzBadges.hpp:23
virtual TwitchIrcServer * getTwitch()=0
TwitchIrcServer * getTwitch() override
Definition: Application.hpp:136
Definition: Emotes.hpp:25
Definition: CommandController.hpp:26
Theme * getThemes() override
Definition: Application.hpp:99
Definition: Toasts.hpp:19
virtual FfzBadges * getFfzBadges()=0
virtual ChatterinoBadges * getChatterinoBadges()=0
AccountController * getAccounts() override
Definition: Application.hpp:108
Definition: WindowManager.hpp:27
Toasts * getToasts() override
Definition: Application.hpp:120
virtual ~IApplication()=default
Definition: UserDataController.hpp:20
Definition: UserDataController.hpp:31
static Application * instance
Definition: Application.hpp:68
virtual Toasts * getToasts()=0
HighlightController * getHighlights() override
Definition: Application.hpp:132
IApplication()
Definition: Application.cpp:55
CommandController * getCommands() override
Definition: Application.hpp:124
FfzBadges * getFfzBadges() override
Definition: Application.hpp:144
Fonts * getFonts() override
Definition: Application.hpp:103
virtual AccountController * getAccounts()=0
Definition: ChatterinoBadges.hpp:17
Settings which are availlable for reading and writing on the gui thread.
Definition: Settings.hpp:78
virtual HotkeyController * getHotkeys()=0
IApplication * getIApp()
Definition: Application.cpp:632
Definition: NativeMessaging.hpp:25
Definition: HotkeyController.hpp:22
Definition: Paths.hpp:8
virtual IUserDataController * getUserData()=0
NotificationController * getNotifications() override
Definition: Application.hpp:128
Definition: NotificationController.hpp:20
Definition: Application.hpp:37
virtual CommandController * getCommands()=0
virtual Theme * getThemes()=0
virtual WindowManager * getWindows()=0
Definition: AccountController.hpp:18
Definition: TwitchIrcServer.hpp:24
static IApplication * instance
Definition: Application.hpp:43
virtual HighlightController * getHighlights()=0
virtual IEmotes * getEmotes()=0
void load(const std::shared_ptr< NetworkData > &data)
Definition: NetworkPrivate.cpp:391
Definition: Theme.hpp:15
Definition: SeventvBadges.hpp:18