diff --git a/application/core/Plugins/PluginMenu.php b/application/core/Plugins/PluginMenu.php index b5b2daae..1aa59f17 100644 --- a/application/core/Plugins/PluginMenu.php +++ b/application/core/Plugins/PluginMenu.php @@ -241,8 +241,10 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns //Display normal Plugin List // Plugin pages - $pageFrames = array(); - $y = 0.; + $pageFrames = array(); + $y = 0.; + $pluginUpdates = $this->maniaControl->updateManager->getPluginsUpdates(); + foreach($pluginClasses as $index => $pluginClass) { /** @var Plugin $pluginClass */ if (!isset($pageFrame)) { @@ -319,7 +321,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns $statusChangeButton->setAction(self::ACTION_PREFIX_ENABLEPLUGIN . $pluginClass); } - if ($this->maniaControl->updateManager->checkPluginUpdate($pluginClass) != false) { + if ($pluginUpdates != false && array_key_exists($pluginClass::getId(), $pluginUpdates)) { $quadUpdate = new Quad_Icons128x128_1(); $pluginFrame->add($quadUpdate); $quadUpdate->setSubStyle($quadUpdate::SUBSTYLE_ProfileVehicle); @@ -335,16 +337,16 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns } } - $numberOfOutdated = $this->maniaControl->updateManager->getNumberOfOutdatedPlugins(); - if($numberOfOutdated > 0) { + if($pluginUpdates != false) { $updatePluginsButton = new Label_Button(); $frame->add($updatePluginsButton); $updatePluginsButton->setHAlign(Control::RIGHT); - $updatePluginsButton->setX($width * 0.1); - $updatePluginsButton->setY(-35.5); + $updatePluginsButton->setX($width * 0.5); + $updatePluginsButton->setY(-29); $updatePluginsButton->setZ(2); - $updatePluginsButton->setStyle($updatePluginsButton::STYLE_CardButtonSmall); - $updatePluginsButton->setText('Update '.$numberOfOutdated.' plugin(s)'); + $updatePluginsButton->setWidth(10); + $updatePluginsButton->setStyle($updatePluginsButton::STYLE_CardButtonSmallS); + $updatePluginsButton->setText(count($pluginUpdates).' update(s)'); $updatePluginsButton->setAction(self::ACTION_UPDATEPLUGINS); } diff --git a/application/core/Update/UpdateManager.php b/application/core/Update/UpdateManager.php index 9b33f51c..1a85b92d 100644 --- a/application/core/Update/UpdateManager.php +++ b/application/core/Update/UpdateManager.php @@ -415,22 +415,6 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener } } - /** - * Returns the number of outdated plugins active. - * @return int - */ - public function getNumberOfOutdatedPlugins() { - $number = 0; - foreach ($this->maniaControl->pluginManager->getPluginClasses() as $pluginClass) { - $pluginData = $this->checkPluginUpdate($pluginClass); - if ($pluginData != false) { - $number++; - } - } - - return $number; - } - /** * Check given Plugin Class for Update * @@ -457,6 +441,42 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener return $pluginData; } + /** + * Check for updates + * + * @return mixed + */ + public function getPluginsUpdates() { + $pluginUpdates = array(); + $pluginsWS = array(); + + $url = ManiaControl::URL_WEBSERVICE . 'plugins'; + $dataJson = FileUtil::loadFile($url); + $pluginVersions = json_decode($dataJson); + if (!$pluginVersions || !isset($pluginVersions[0])) { + return false; + } + + foreach($pluginVersions as $plugin) { + $pluginsWS[$plugin->id] = $plugin; + } + + /** @var Plugin $pluginClass */ + foreach($this->maniaControl->pluginManager->getPluginClasses() as $pluginClass) { + $pluginId = $pluginClass::getId(); + if(array_key_exists($pluginId, $pluginsWS)) { + if($pluginsWS[$pluginId]->currentVersion->version > $pluginClass::getVersion()) { + $pluginUpdates[$pluginId] = $pluginsWS[$pluginId]; + } + } + } + + if(empty($pluginUpdates)) { + return false; + } + return $pluginUpdates; + } + /** * Update pluginfile *