diff --git a/MatchManagerSuite/MatchManagerAutomaticLauncher.php b/MatchManagerSuite/MatchManagerAutomaticLauncher.php new file mode 100644 index 0000000..3606b99 --- /dev/null +++ b/MatchManagerSuite/MatchManagerAutomaticLauncher.php @@ -0,0 +1,175 @@ +maniaControl->getChat()->sendErrorToAdmins('MatchManager Core is required to use one of MatchManager plugin. Install it and restart Maniacontrol'); + Logger::logError('MatchManager Core is required to use one of MatchManager plugin. Install it and restart Maniacontrol'); + return false; +} + +/** + * MatchManager Automatic Launche + * + * @author Beu + * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 + */ +class MatchManagerAutomaticLauncher implements CallbackListener, TimerListener, Plugin { + /* + * Constants + */ + const PLUGIN_ID = 172; + const PLUGIN_VERSION = 1.0; + const PLUGIN_NAME = 'MatchManager Automatic Launcher'; + const PLUGIN_AUTHOR = 'Beu'; + + // MatchManagerWidget Properties + const MATCHMANAGERCORE_PLUGIN = 'MatchManagerSuite\MatchManagerCore'; + + const SETTING_TIMESTAMPS_START_MATCHES = 'Timestamps of the start of the matches:'; + + /* + * Private properties + */ + /** @var ManiaControl $maniaControl */ + private $maniaControl = null; + private $MatchManagerCore = null; + + + /** + * @param \ManiaControl\ManiaControl $maniaControl + * @see \ManiaControl\Plugins\Plugin::prepare() + */ + public static function prepare(ManiaControl $maniaControl) { + } + + /** + * @see \ManiaControl\Plugins\Plugin::getId() + */ + public static function getId() { + return self::PLUGIN_ID; + } + + /** + * @see \ManiaControl\Plugins\Plugin::getName() + */ + public static function getName() { + return self::PLUGIN_NAME; + } + + /** + * @see \ManiaControl\Plugins\Plugin::getVersion() + */ + public static function getVersion() { + return self::PLUGIN_VERSION; + } + + /** + * @see \ManiaControl\Plugins\Plugin::getAuthor() + */ + public static function getAuthor() { + return self::PLUGIN_AUTHOR; + } + + /** + * @see \ManiaControl\Plugins\Plugin::getDescription() + */ + public static function getDescription() { + return 'Automatic launch matches with timestamps'; + } + + /** + * @param \ManiaControl\ManiaControl $maniaControl + * @return bool + * @see \ManiaControl\Plugins\Plugin::load() + */ + public function load(ManiaControl $maniaControl) { + // Init plugin + $this->maniaControl = $maniaControl; + if ($this->maniaControl->getPluginManager()->getSavedPluginStatus(self::MATCHMANAGERCORE_PLUGIN)) { + // plugin are loaded in alphabetic order, just wait 1 sec before trying to load MatchManager Core + $this->maniaControl->getTimerManager()->registerOneTimeListening($this, function () { + $this->MatchManagerCore = $this->maniaControl->getPluginManager()->getPlugin(self::MATCHMANAGERCORE_PLUGIN); + if ($this->MatchManagerCore == null) { + $this->maniaControl->getChat()->sendErrorToAdmins('MatchManager Core is needed to use ' . self::PLUGIN_NAME . ' plugin.'); + $this->maniaControl->getPluginManager()->deactivatePlugin((get_class())); + } else { + $this->createTimers(); + } + }, 1000); + } else { + throw new \Exception('MatchManager Core is needed to use ' . self::PLUGIN_NAME); + } + + $this->maniaControl->getCallbackManager()->registerCallbackListener(PluginManager::CB_PLUGIN_UNLOADED, $this, 'handlePluginUnloaded'); + $this->maniaControl->getCallbackManager()->registerCallbackListener(SettingManager::CB_SETTING_CHANGED, $this, 'updateSettings'); + + $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_TIMESTAMPS_START_MATCHES, "", "Comma separated of the start of the matches"); + + return true; + } + + /** + * @see \ManiaControl\Plugins\Plugin::unload() + */ + public function unload() { + } + + /** + * Update Widgets on Setting Changes + * + * @param Setting $setting + */ + public function updateSettings(Setting $setting) { + if ($setting->belongsToClass($this)) { + $this->createTimers(); + } + } + + + /** + * handlePluginUnloaded + * + * @param string $pluginClass + * @param Plugin $plugin + * @return void + */ + public function handlePluginUnloaded(string $pluginClass, Plugin $plugin) { + $this->maniaControl->getChat()->sendErrorToAdmins(self::PLUGIN_NAME . " disabled because MatchManager Core is now disabled"); + if ($pluginClass == self::MATCHMANAGERCORE_PLUGIN) { + $this->maniaControl->getPluginManager()->deactivatePlugin((get_class())); + } + } + + /** + * createTimers + * + * @return void + */ + private function createTimers() { + $this->maniaControl->getTimerManager()->unregisterTimerListenings($this); + + $timestamps = explode(",", $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_TIMESTAMPS_START_MATCHES)); + $now = time(); + $newtimers = 0; + foreach ($timestamps as $timestamp) { + if ($now < $timestamp) { + $delta = ($timestamp - $now) * 1000; + $this->maniaControl->getTimerManager()->registerOneTimeListening($this, function () { + $this->MatchManagerCore->MatchStart(); + }, $delta); + $newtimers++; + } + } + $this->maniaControl->getChat()->sendSuccessToAdmins($newtimers . " matches are planned"); + } +} \ No newline at end of file