first finish of dedimania plugin
This commit is contained in:
		
				
					committed by
					
						 Steffen Schröder
						Steffen Schröder
					
				
			
			
				
	
			
			
			
						parent
						
							7f9ba73a2a
						
					
				
				
					commit
					5728381093
				
			| @@ -2,6 +2,11 @@ | |||||||
| namespace Dedimania; | namespace Dedimania; | ||||||
|  |  | ||||||
| require_once "DedimaniaData.php"; | require_once "DedimaniaData.php"; | ||||||
|  | use FML\Controls\Control; | ||||||
|  | use FML\Controls\Frame; | ||||||
|  | use FML\Controls\Label; | ||||||
|  | use FML\Controls\Quad; | ||||||
|  | use FML\ManiaLink; | ||||||
| use ManiaControl\Callbacks\CallbackListener; | use ManiaControl\Callbacks\CallbackListener; | ||||||
| use ManiaControl\Callbacks\CallbackManager; | use ManiaControl\Callbacks\CallbackManager; | ||||||
| use ManiaControl\Callbacks\TimerListener; | use ManiaControl\Callbacks\TimerListener; | ||||||
| @@ -29,6 +34,14 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 	const DEDIMANIA_UPDATESERVERPLAYERS = 'dedimania.UpdateServerPlayers'; | 	const DEDIMANIA_UPDATESERVERPLAYERS = 'dedimania.UpdateServerPlayers'; | ||||||
| 	const DEDIMANIA_SETCHALLENGETIMES   = 'dedimania.SetChallengeTimes'; | 	const DEDIMANIA_SETCHALLENGETIMES   = 'dedimania.SetChallengeTimes'; | ||||||
| 	const DEDIMANIA_WARNINGSANDTTR2     = 'dedimania.WarningsAndTTR2'; | 	const DEDIMANIA_WARNINGSANDTTR2     = 'dedimania.WarningsAndTTR2'; | ||||||
|  | 	const SETTING_WIDGET_TITLE          = 'Widget Title'; | ||||||
|  | 	const SETTING_WIDGET_POSX           = 'Widget Position: X'; | ||||||
|  | 	const SETTING_WIDGET_POSY           = 'Widget Position: Y'; | ||||||
|  | 	const SETTING_WIDGET_WIDTH          = 'Widget Width'; | ||||||
|  | 	const SETTING_WIDGET_LINESCOUNT     = 'Widget Displayed Lines Count'; | ||||||
|  | 	const SETTING_WIDGET_LINEHEIGHT     = 'Widget Line Height'; | ||||||
|  | 	const SETTING_SERVER_LOGINS         = 'Serverlogins, splitted by ;'; | ||||||
|  | 	const SETTING_DEDIMANIA_CODES       = 'Dedimania Codes, splitted by ;'; | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| 	 * Private Properties | 	 * Private Properties | ||||||
| @@ -37,10 +50,9 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 	private $maniaControl = null; | 	private $maniaControl = null; | ||||||
| 	/** @var DedimaniaData $dedimaniaData */ | 	/** @var DedimaniaData $dedimaniaData */ | ||||||
| 	private $dedimaniaData = null; | 	private $dedimaniaData = null; | ||||||
| 	private $manialink = null; |  | ||||||
| 	//private $lastSendManialink = array(); |  | ||||||
| 	private $updateManialink = false; | 	private $updateManialink = false; | ||||||
| 	private $checkpoints = array(); | 	private $checkpoints = array(); | ||||||
|  | 	private $init = false; | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| 	 * Prepares the Plugin | 	 * Prepares the Plugin | ||||||
| @@ -49,7 +61,8 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 	 * @return mixed | 	 * @return mixed | ||||||
| 	 */ | 	 */ | ||||||
| 	public static function prepare(ManiaControl $maniaControl) { | 	public static function prepare(ManiaControl $maniaControl) { | ||||||
| 		// TODO: Implement prepare() method. | 		$maniaControl->settingManager->initSetting(get_class(), self::SETTING_SERVER_LOGINS, ''); | ||||||
|  | 		$maniaControl->settingManager->initSetting(get_class(), self::SETTING_DEDIMANIA_CODES, ''); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| @@ -61,25 +74,54 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 	public function load(ManiaControl $maniaControl) { | 	public function load(ManiaControl $maniaControl) { | ||||||
| 		$this->maniaControl = $maniaControl; | 		$this->maniaControl = $maniaControl; | ||||||
|  |  | ||||||
| 		return; | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_TITLE, 'Dedimania'); | ||||||
|  | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_POSX, -139); | ||||||
|  | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_POSY, 7); | ||||||
|  | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_WIDTH, 40); | ||||||
|  | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_LINEHEIGHT, 4); | ||||||
|  | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_LINESCOUNT, 15); | ||||||
|  |  | ||||||
|  | 		//TODO what was CB_IC_ClientUpdated? | ||||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(MapManager::CB_BEGINMAP, $this, 'handleBeginMap'); | 		$this->maniaControl->callbackManager->registerCallbackListener(MapManager::CB_BEGINMAP, $this, 'handleBeginMap'); | ||||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(MapManager::CB_ENDMAP, $this, 'handleEndMap'); | 		$this->maniaControl->callbackManager->registerCallbackListener(MapManager::CB_ENDMAP, $this, 'handleMapEnd'); | ||||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerConnect'); | 		$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerConnect'); | ||||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerDisconnect'); | 		$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerDisconnect'); | ||||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERINFOCHANGED, $this, 'handlePlayerInfoChanged'); |  | ||||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_TM_PLAYERCHECKPOINT, $this, 'handlePlayerCheckpoint'); | 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_TM_PLAYERCHECKPOINT, $this, 'handlePlayerCheckpoint'); | ||||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_TM_PLAYERFINISH, $this, 'handlePlayerFinish'); | 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_TM_PLAYERFINISH, $this, 'handlePlayerFinished'); | ||||||
| 		$this->maniaControl->timerManager->registerTimerListening($this, 'updateEverySecond', 1000); | 		$this->maniaControl->timerManager->registerTimerListening($this, 'updateEverySecond', 1000); | ||||||
| 		$this->maniaControl->timerManager->registerTimerListening($this, 'handleEveryMinute', 1000 * 60); | 		$this->maniaControl->timerManager->registerTimerListening($this, 'handleEveryMinute', 1000 * 60); | ||||||
| 		$this->maniaControl->timerManager->registerTimerListening($this, 'updatePlayerList', 1000 * 60 * 3); | 		$this->maniaControl->timerManager->registerTimerListening($this, 'updatePlayerList', 1000 * 60 * 3); | ||||||
| 		//TODO parse settings |  | ||||||
|  |  | ||||||
| 		// Open session | 		// Open session | ||||||
| 		$serverInfo    = $this->maniaControl->server->getInfo(); | 		$serverInfo    = $this->maniaControl->server->getInfo(); | ||||||
| 		$serverVersion = $this->maniaControl->client->getVersion(); | 		$serverVersion = $this->maniaControl->client->getVersion(); | ||||||
| 		$packMask      = substr($this->maniaControl->server->titleId, 2); | 		$packMask      = substr($this->maniaControl->server->titleId, 2); | ||||||
| 		$this->dedimaniaData = new DedimaniaData(".paragoncanyon", "a3ee654ac8", $serverInfo->path, $packMask, $serverVersion); |  | ||||||
|  | 		$logins = $this->maniaControl->settingManager->getSetting($this, self::SETTING_SERVER_LOGINS); | ||||||
|  | 		$codes  = $this->maniaControl->settingManager->getSetting($this, self::SETTING_DEDIMANIA_CODES); | ||||||
|  |  | ||||||
|  | 		if ($logins == '' || $codes == '') { | ||||||
|  | 			throw new \Exception("No Dedimania Data Specified, check the settings!"); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		$logins = explode(";", $logins); | ||||||
|  | 		$codes  = explode(";", $codes); | ||||||
|  |  | ||||||
|  | 		$dedimaniaCode = ""; | ||||||
|  | 		foreach($logins as $key => $login) { | ||||||
|  | 			if ($login == $serverInfo->login) { | ||||||
|  | 				if (!isset($codes[$key])) { | ||||||
|  | 					throw new \Exception("No Dedimania Code Specified, check the settings!"); | ||||||
|  | 				} | ||||||
|  | 				$dedimaniaCode = $codes[$key]; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if ($dedimaniaCode == '') { | ||||||
|  | 			throw new \Exception("No Valid Serverlogin Specified, check the settings!"); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		$this->dedimaniaData = new DedimaniaData($serverInfo->login, $dedimaniaCode, $serverInfo->path, $packMask, $serverVersion); | ||||||
|  |  | ||||||
| 		$this->openDedimaniaSession(); | 		$this->openDedimaniaSession(); | ||||||
| 	} | 	} | ||||||
| @@ -101,13 +143,14 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 			if (is_array($data)) { | 			if (is_array($data)) { | ||||||
| 				foreach($data as $index => $methodResponse) { | 				foreach($data as $index => $methodResponse) { | ||||||
| 					if (xmlrpc_is_fault($methodResponse)) { | 					if (xmlrpc_is_fault($methodResponse)) { | ||||||
| 						$this->handleXmlRpcFault($methodResponse); | 						$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_OPENSESSION); | ||||||
| 					} else if ($index <= 0) { | 					} else if ($index <= 0) { | ||||||
| 						$responseData                   = $methodResponse[0]; | 						$responseData                   = $methodResponse[0]; | ||||||
| 						$this->dedimaniaData->sessionId = $responseData['SessionId']; | 						$this->dedimaniaData->sessionId = $responseData['SessionId']; | ||||||
| 						if ($this->dedimaniaData->sessionId != '') { | 						if ($this->dedimaniaData->sessionId != '') { | ||||||
| 							$this->maniaControl->log("Dedimania connection successfully established."); | 							$this->maniaControl->log("Dedimania connection successfully established."); | ||||||
| 							$this->fetchDedimaniaRecords(); | 							$this->fetchDedimaniaRecords(); | ||||||
|  | 							$this->init = true; | ||||||
| 						} else { | 						} else { | ||||||
| 							$this->maniaControl->log("Error while opening Dedimania Connection"); | 							$this->maniaControl->log("Error while opening Dedimania Connection"); | ||||||
| 						} | 						} | ||||||
| @@ -121,8 +164,15 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 	 * Handle 1Second callback | 	 * Handle 1Second callback | ||||||
| 	 */ | 	 */ | ||||||
| 	public function updateEverySecond($time) { | 	public function updateEverySecond($time) { | ||||||
|  | 		if (!$this->updateManialink) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
| 		$this->updateManialink = false; | 		$this->updateManialink = false; | ||||||
| 		//TODO send manialink | 		if (!$this->dedimaniaData->records) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		$manialink = $this->buildManialink(); | ||||||
|  | 		$this->maniaControl->manialinkManager->sendManialink($manialink); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| @@ -131,10 +181,11 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 	 * @param null $callback | 	 * @param null $callback | ||||||
| 	 */ | 	 */ | ||||||
| 	public function handleEveryMinute($callback = null) { | 	public function handleEveryMinute($callback = null) { | ||||||
|  | 		if (!$this->init) | ||||||
|  | 			return; | ||||||
| 		$this->checkDedimaniaSession(); | 		$this->checkDedimaniaSession(); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| 	 * Handle PlayerConnect callback | 	 * Handle PlayerConnect callback | ||||||
| 	 * | 	 * | ||||||
| @@ -145,7 +196,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 		$data    = array($this->dedimaniaData->sessionId, $player->login, $player->nickname, $player->path, $player->isSpectator); | 		$data    = array($this->dedimaniaData->sessionId, $player->login, $player->nickname, $player->path, $player->isSpectator); | ||||||
| 		$content = $this->encode_request(self::DEDIMANIA_PLAYERCONNECT, $data); | 		$content = $this->encode_request(self::DEDIMANIA_PLAYERCONNECT, $data); | ||||||
|  |  | ||||||
| 		$this->maniaControl->fileReader->postData(self::DEDIMANIA_URL, function ($data, $error) { | 		$this->maniaControl->fileReader->postData(self::DEDIMANIA_URL, function ($data, $error) use (&$player) { | ||||||
| 			if ($error != '') { | 			if ($error != '') { | ||||||
| 				$this->maniaControl->log("Dedimania Error: " . $error); | 				$this->maniaControl->log("Dedimania Error: " . $error); | ||||||
| 			} | 			} | ||||||
| @@ -154,7 +205,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 			if (is_array($data)) { | 			if (is_array($data)) { | ||||||
| 				foreach($data as $methodResponse) { | 				foreach($data as $methodResponse) { | ||||||
| 					if (xmlrpc_is_fault($methodResponse)) { | 					if (xmlrpc_is_fault($methodResponse)) { | ||||||
| 						$this->handleXmlRpcFault($methodResponse); | 						$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_PLAYERCONNECT); | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} else { | 			} else { | ||||||
| @@ -163,10 +214,12 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 					var_dump($data); | 					var_dump($data); | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | 			$manialink = $this->buildManialink(); | ||||||
|  | 			$this->maniaControl->manialinkManager->sendManialink($manialink, $player->login); | ||||||
|  |  | ||||||
| 			return true; | 			return true; | ||||||
| 		}, $content, true); | 		}, $content, true); | ||||||
|  |  | ||||||
| 		//TODO send manialink to login |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| @@ -188,7 +241,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 			if (is_array($data)) { | 			if (is_array($data)) { | ||||||
| 				foreach($data as $methodResponse) { | 				foreach($data as $methodResponse) { | ||||||
| 					if (xmlrpc_is_fault($methodResponse)) { | 					if (xmlrpc_is_fault($methodResponse)) { | ||||||
| 						$this->handleXmlRpcFault($methodResponse); | 						$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_PLAYERDISCONNECT); | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} else { | 			} else { | ||||||
| @@ -208,15 +261,18 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 	 */ | 	 */ | ||||||
| 	public function handleBeginMap($callback) { | 	public function handleBeginMap($callback) { | ||||||
| 		$this->fetchDedimaniaRecords(true); | 		$this->fetchDedimaniaRecords(true); | ||||||
| 		$this->updateManialink = true; |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| 	 * Handle EndMap callback | 	 * Handle EndMap callback | ||||||
| 	 * | 	 * | ||||||
| 	 * @param $callback | 	 * @param $callback | ||||||
| 	 */ | 	 */ | ||||||
| 	public function handleMapEnd($callback) { | 	public function handleMapEnd($callback) { | ||||||
|  | 		if (!$this->dedimaniaData->records) | ||||||
|  | 			return; | ||||||
|  |  | ||||||
| 		// Send dedimania records | 		// Send dedimania records | ||||||
| 		$gameMode = $this->getGameModeString(); | 		$gameMode = $this->getGameModeString(); | ||||||
| 		$times    = array(); | 		$times    = array(); | ||||||
| @@ -259,7 +315,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 			if (is_array($data)) { | 			if (is_array($data)) { | ||||||
| 				foreach($data as $index => $methodResponse) { | 				foreach($data as $index => $methodResponse) { | ||||||
| 					if (xmlrpc_is_fault($methodResponse)) { | 					if (xmlrpc_is_fault($methodResponse)) { | ||||||
| 						$this->handleXmlRpcFault($methodResponse); | 						$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_SETCHALLENGETIMES); | ||||||
| 					} else { | 					} else { | ||||||
| 						if ($index <= 0) { | 						if ($index <= 0) { | ||||||
| 							// Called method response | 							// Called method response | ||||||
| @@ -290,7 +346,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 		$serverInfo = $this->getServerInfo(); | 		$serverInfo = $this->getServerInfo(); | ||||||
| 		$playerList = $this->getPlayerList(); | 		$playerList = $this->getPlayerList(); | ||||||
| 		$votesInfo  = $this->getVotesInfo(); | 		$votesInfo  = $this->getVotesInfo(); | ||||||
| 		if (!$serverInfo || !$votesInfo || !$playerList) { | 		if (!$serverInfo || !$votesInfo || !$playerList || !isset($this->dedimaniaData) || $this->dedimaniaData->sessionId == '') { | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -307,7 +363,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 			if (is_array($data)) { | 			if (is_array($data)) { | ||||||
| 				foreach($data as $methodResponse) { | 				foreach($data as $methodResponse) { | ||||||
| 					if (xmlrpc_is_fault($methodResponse)) { | 					if (xmlrpc_is_fault($methodResponse)) { | ||||||
| 						$this->handleXmlRpcFault($methodResponse); | 						$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_UPDATESERVERPLAYERS); | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} else { | 			} else { | ||||||
| @@ -322,12 +378,14 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| 	 * Handle PlayerCheckpoint callback | 	 * Handle PlayerCheckpoint callback | ||||||
|  | 	 * | ||||||
|  | 	 * @param $callback | ||||||
| 	 */ | 	 */ | ||||||
| 	public function handlePlayerCheckpoint($callback) { | 	public function handlePlayerCheckpoint($callback) { | ||||||
| 		$data  = $callback[1]; | 		$data  = $callback[1]; | ||||||
| 		$login = $data[1]; | 		$login = $data[1]; | ||||||
| 		$time  = $data[2]; | 		$time  = $data[2]; | ||||||
| 		$lap     = $data[3]; | 		//$lap     = $data[3]; | ||||||
| 		$cpIndex = $data[4]; | 		$cpIndex = $data[4]; | ||||||
| 		if (!isset($this->checkpoints[$login]) || $cpIndex <= 0) { | 		if (!isset($this->checkpoints[$login]) || $cpIndex <= 0) { | ||||||
| 			$this->checkpoints[$login] = array(); | 			$this->checkpoints[$login] = array(); | ||||||
| @@ -335,6 +393,11 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 		$this->checkpoints[$login][$cpIndex] = $time; | 		$this->checkpoints[$login][$cpIndex] = $time; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Plyer finished callback | ||||||
|  | 	 * | ||||||
|  | 	 * @param $callback | ||||||
|  | 	 */ | ||||||
| 	public function handlePlayerFinished($callback) { | 	public function handlePlayerFinished($callback) { | ||||||
| 		$data = $callback[1]; | 		$data = $callback[1]; | ||||||
| 		if ($data[0] <= 0 || $data[2] <= 0) { | 		if ($data[0] <= 0 || $data[2] <= 0) { | ||||||
| @@ -363,7 +426,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 				$inserted  = $this->insertDedimaniaRecord($newRecord, $oldRecord); | 				$inserted  = $this->insertDedimaniaRecord($newRecord, $oldRecord); | ||||||
| 				if ($inserted) { | 				if ($inserted) { | ||||||
| 					// Get newly saved record | 					// Get newly saved record | ||||||
| 					foreach($this->dedimaniaData['records']['Records'] as $key => &$record) { | 					foreach($this->dedimaniaData['records']['Records'] as &$record) { | ||||||
| 						if ($record['Login'] !== $newRecord['Login']) { | 						if ($record['Login'] !== $newRecord['Login']) { | ||||||
| 							continue; | 							continue; | ||||||
| 						} | 						} | ||||||
| @@ -423,7 +486,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 			if (is_array($data)) { | 			if (is_array($data)) { | ||||||
| 				foreach($data as $index => $methodResponse) { | 				foreach($data as $index => $methodResponse) { | ||||||
| 					if (xmlrpc_is_fault($methodResponse)) { | 					if (xmlrpc_is_fault($methodResponse)) { | ||||||
| 						$this->handleXmlRpcFault($methodResponse); | 						$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_GETRECORDS); | ||||||
| 						return false; | 						return false; | ||||||
| 					} else if ($index <= 0) { | 					} else if ($index <= 0) { | ||||||
| 						$responseData                 = $methodResponse[0]; | 						$responseData                 = $methodResponse[0]; | ||||||
| @@ -458,7 +521,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 			if (is_array($data)) { | 			if (is_array($data)) { | ||||||
| 				foreach($data as $methodResponse) { | 				foreach($data as $methodResponse) { | ||||||
| 					if (xmlrpc_is_fault($methodResponse)) { | 					if (xmlrpc_is_fault($methodResponse)) { | ||||||
| 						$this->handleXmlRpcFault($methodResponse); | 						$this->handleXmlRpcFault($methodResponse, self::DEDIMANIA_CHECKSESSION); | ||||||
| 					} else { | 					} else { | ||||||
| 						$responseData = $methodResponse[0]; | 						$responseData = $methodResponse[0]; | ||||||
| 						if (is_bool($responseData)) { | 						if (is_bool($responseData)) { | ||||||
| @@ -485,12 +548,12 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		$insert = false; | 		$insert = false; | ||||||
| 		$newRecords = array(); |  | ||||||
|  |  | ||||||
| 		// Get max possible rank | 		// Get max possible rank | ||||||
| 		$maxRank = $this->getMaxRank($newRecord['Login']); | 		$maxRank = $this->getMaxRank($newRecord['Login']); | ||||||
| 		if (!$maxRank) | 		if (!$maxRank) { | ||||||
| 			$maxRank = 30; | 			$maxRank = 30; | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		// Loop through existing records | 		// Loop through existing records | ||||||
| 		foreach($this->dedimaniaData->records['Records'] as $key => &$record) { | 		foreach($this->dedimaniaData->records['Records'] as $key => &$record) { | ||||||
| @@ -540,7 +603,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 			$this->updateDedimaniaRecordRanks(); | 			$this->updateDedimaniaRecordRanks(); | ||||||
|  |  | ||||||
| 			// Save replays | 			// Save replays | ||||||
| 			foreach($this->dedimaniaData->records['Records'] as $key => &$record) { | 			foreach($this->dedimaniaData->records['Records'] as &$record) { | ||||||
| 				if ($record['Login'] !== $newRecord['Login']) | 				if ($record['Login'] !== $newRecord['Login']) | ||||||
| 					continue; | 					continue; | ||||||
| 				$this->setRecordReplays($record); | 				$this->setRecordReplays($record); | ||||||
| @@ -721,7 +784,7 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 		if (!isset($this->dedimaniaData->records)) | 		if (!isset($this->dedimaniaData->records)) | ||||||
| 			return null; | 			return null; | ||||||
| 		$records = $this->dedimaniaData->records['Records']; | 		$records = $this->dedimaniaData->records['Records']; | ||||||
| 		foreach($records as $index => $record) { | 		foreach($records as $record) { | ||||||
| 			if ($record['Login'] === $login) | 			if ($record['Login'] === $login) | ||||||
| 				return $record; | 				return $record; | ||||||
| 		} | 		} | ||||||
| @@ -790,9 +853,96 @@ class Dedimania implements CallbackListener, TimerListener, Plugin { | |||||||
| 	 * Handles xml rpc fault | 	 * Handles xml rpc fault | ||||||
| 	 * | 	 * | ||||||
| 	 * @param $fault | 	 * @param $fault | ||||||
|  | 	 * @param $method | ||||||
| 	 */ | 	 */ | ||||||
| 	private function handleXmlRpcFault($fault) { | 	private function handleXmlRpcFault($fault, $method) { | ||||||
| 		trigger_error('XmlRpc Fault: ' . $fault['faultString'] . ' (' . $fault['faultCode'] . ')'); | 		trigger_error('XmlRpc Fault on ' . $method . ': ' . $fault['faultString'] . ' (' . $fault['faultCode'] . ')'); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	private function buildManialink() { | ||||||
|  | 		if (!$this->dedimaniaData->records) { | ||||||
|  | 			return ''; | ||||||
|  | 		} | ||||||
|  | 		$records = $this->dedimaniaData->records['Records']; | ||||||
|  |  | ||||||
|  | 		$title        = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_TITLE); | ||||||
|  | 		$pos_x        = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_POSX); | ||||||
|  | 		$pos_y        = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_POSY); | ||||||
|  | 		$width        = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_WIDTH); | ||||||
|  | 		$lines        = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_LINESCOUNT); | ||||||
|  | 		$lineHeight   = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_LINEHEIGHT); | ||||||
|  | 		$labelStyle   = $this->maniaControl->manialinkManager->styleManager->getDefaultLabelStyle(); | ||||||
|  | 		$quadStyle    = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadStyle(); | ||||||
|  | 		$quadSubstyle = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadSubstyle(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 		$manialink = new ManiaLink(self::MLID_DEDIMANIA); | ||||||
|  | 		$frame     = new Frame(); | ||||||
|  | 		$manialink->add($frame); | ||||||
|  | 		$frame->setPosition($pos_x, $pos_y); | ||||||
|  |  | ||||||
|  | 		$backgroundQuad = new Quad(); | ||||||
|  | 		$frame->add($backgroundQuad); | ||||||
|  | 		$backgroundQuad->setVAlign(Control::TOP); | ||||||
|  | 		$height = 7. + $lines * $lineHeight; | ||||||
|  | 		$backgroundQuad->setSize($width * 1.05, $height); | ||||||
|  | 		$backgroundQuad->setStyles($quadStyle, $quadSubstyle); | ||||||
|  |  | ||||||
|  | 		$titleLabel = new Label(); | ||||||
|  | 		$frame->add($titleLabel); | ||||||
|  | 		$titleLabel->setPosition(0, $lineHeight * -0.9); | ||||||
|  | 		$titleLabel->setWidth($width); | ||||||
|  | 		$titleLabel->setStyle($labelStyle); | ||||||
|  | 		$titleLabel->setTextSize(2); | ||||||
|  | 		$titleLabel->setText($title); | ||||||
|  | 		$titleLabel->setTranslate(true); | ||||||
|  |  | ||||||
|  | 		foreach($records as $index => $record) { | ||||||
|  | 			if ($index >= $lines) | ||||||
|  | 				break; | ||||||
|  |  | ||||||
|  | 			$y = -8. - $index * $lineHeight; | ||||||
|  |  | ||||||
|  | 			$recordFrame = new Frame(); | ||||||
|  | 			$frame->add($recordFrame); | ||||||
|  | 			$recordFrame->setPosition(0, $y); | ||||||
|  |  | ||||||
|  | 			$backgroundQuad = new Quad(); | ||||||
|  | 			$recordFrame->add($backgroundQuad); | ||||||
|  | 			$backgroundQuad->setSize($width * 1.04, $lineHeight * 1.4); | ||||||
|  | 			$backgroundQuad->setStyles($quadStyle, $quadSubstyle); | ||||||
|  |  | ||||||
|  | 			//Rank | ||||||
|  | 			$rankLabel = new Label(); | ||||||
|  | 			$recordFrame->add($rankLabel); | ||||||
|  | 			$rankLabel->setHAlign(Control::LEFT); | ||||||
|  | 			$rankLabel->setX($width * -0.47); | ||||||
|  | 			$rankLabel->setSize($width * 0.06, $lineHeight); | ||||||
|  | 			$rankLabel->setTextSize(1); | ||||||
|  | 			$rankLabel->setTextPrefix('$o'); | ||||||
|  | 			$rankLabel->setText($record['Rank']); | ||||||
|  |  | ||||||
|  | 			//Name | ||||||
|  | 			$nameLabel = new Label(); | ||||||
|  | 			$recordFrame->add($nameLabel); | ||||||
|  | 			$nameLabel->setHAlign(Control::LEFT); | ||||||
|  | 			$nameLabel->setX($width * -0.4); | ||||||
|  | 			$nameLabel->setSize($width * 0.6, $lineHeight); | ||||||
|  | 			$nameLabel->setTextSize(1); | ||||||
|  | 			$nameLabel->setText(Formatter::stripDirtyCodes($record['NickName'])); | ||||||
|  |  | ||||||
|  | 			//Time | ||||||
|  | 			$timeLabel = new Label(); | ||||||
|  | 			$recordFrame->add($timeLabel); | ||||||
|  | 			$timeLabel->setHAlign(Control::RIGHT); | ||||||
|  | 			$timeLabel->setX($width * 0.47); | ||||||
|  | 			$timeLabel->setSize($width * 0.25, $lineHeight); | ||||||
|  | 			$timeLabel->setTextSize(1); | ||||||
|  | 			$timeLabel->setText(Formatter::formatTime($record['Best'])); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		return $manialink->render()->saveXML(); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
|   | |||||||
| @@ -69,9 +69,9 @@ class LocalRecordsPlugin implements CallbackListener, TimerListener, Plugin { | |||||||
| 		// Init settings | 		// Init settings | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_TITLE, 'Local Records'); | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_TITLE, 'Local Records'); | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_POSX, -139.); | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_POSX, -139.); | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_POSY, 65.); | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_POSY, 75); | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_WIDTH, 40.); | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_WIDTH, 40.); | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_LINESCOUNT, 25); | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_LINESCOUNT, 15); | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_LINEHEIGHT, 4.); | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_WIDGET_LINEHEIGHT, 4.); | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_NOTIFY_ONLY_DRIVER, false); | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_NOTIFY_ONLY_DRIVER, false); | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_NOTIFY_BEST_RECORDS, -1); | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_NOTIFY_BEST_RECORDS, -1); | ||||||
| @@ -170,7 +170,9 @@ class LocalRecordsPlugin implements CallbackListener, TimerListener, Plugin { | |||||||
| 	 * @param $time | 	 * @param $time | ||||||
| 	 */ | 	 */ | ||||||
| 	public function handle1Second($time) { | 	public function handle1Second($time) { | ||||||
| 		if (!$this->updateManialink) return; | 		if (!$this->updateManialink) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
| 		$this->updateManialink = false; | 		$this->updateManialink = false; | ||||||
| 		$manialink = $this->buildManialink(); | 		$manialink = $this->buildManialink(); | ||||||
| 		$this->maniaControl->manialinkManager->sendManialink($manialink); | 		$this->maniaControl->manialinkManager->sendManialink($manialink); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user