// Copyright (c) 2023 Proton AG // // This file is part of Proton Mail Bridge. // // Proton Mail Bridge 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. // // Proton Mail Bridge 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. // // You should have received a copy of the GNU General Public License // along with Proton Mail Bridge. If not, see . #ifndef BRIDGE_GUI_APP_CONTROLLER_H #define BRIDGE_GUI_APP_CONTROLLER_H // @formatter:off class QMLBackend; namespace bridgepp { class Log; class Overseer; class GRPCClient; class ProcessMonitor; class Exception; } // @formatter:off //**************************************************************************************************************************************************** /// \brief App controller class. //**************************************************************************************************************************************************** class AppController : public QObject { Q_OBJECT friend AppController &app(); public: // member functions. AppController(AppController const &) = delete; ///< Disabled copy-constructor. AppController(AppController &&) = delete; ///< Disabled assignment copy-constructor. ~AppController() override = default; ///< Destructor. AppController &operator=(AppController const &) = delete; ///< Disabled assignment operator. AppController &operator=(AppController &&) = delete; ///< Disabled move assignment operator. QMLBackend &backend() { return *backend_; } ///< Return a reference to the backend. bridgepp::GRPCClient &grpc() { return *grpc_; } ///< Return a reference to the GRPC client. bridgepp::Log &log() { return *log_; } ///< Return a reference to the log. std::unique_ptr &bridgeOverseer() { return bridgeOverseer_; }; ///< Returns a reference the bridge overseer bridgepp::ProcessMonitor *bridgeMonitor() const; ///< Return the bridge worker. void setLauncherArgs(const QString& launcher, const QStringList& args); public slots: void onFatalError(bridgepp::Exception const& e); ///< Handle fatal errors. private: // member functions AppController(); ///< Default constructor. void restart(bool isCrashing = false); ///< Restart the app. private: // data members std::unique_ptr backend_; ///< The backend. std::unique_ptr grpc_; ///< The RPC client. std::unique_ptr log_; ///< The log. std::unique_ptr bridgeOverseer_; ///< The overseer for the bridge monitor worker. QString launcher_; QStringList launcherArgs_; }; AppController &app(); ///< Return a reference to the app controller. #endif // BRIDGE_GUI_APP_CONTROLLER_H