Merge branch 'release/3.1' into release/3.2

This commit is contained in:
Dylan K. Taylor 2018-07-30 14:54:10 +01:00
commit 4cc2f037a9

View File

@ -98,21 +98,33 @@ class TimingsCommand extends VanillaCommand{
if($paste){ if($paste){
fseek($fileTimings, 0); fseek($fileTimings, 0);
$data = [ $data = [
"syntax" => "text", "browser" => $agent = $sender->getServer()->getName() . " " . $sender->getServer()->getPocketMineVersion(),
"poster" => $sender->getServer()->getName(), "data" => $content = stream_get_contents($fileTimings)
"content" => stream_get_contents($fileTimings)
]; ];
fclose($fileTimings); fclose($fileTimings);
$sender->getServer()->getAsyncPool()->submitTask(new class([ $host = $sender->getServer()->getProperty("timings.host", "timings.pmmp.io");
["page" => "http://paste.ubuntu.com", "extraOpts" => [
CURLOPT_HTTPHEADER => ["User-Agent: " . $sender->getServer()->getName() . " " . $sender->getServer()->getPocketMineVersion()], $sender->getServer()->getAsyncPool()->submitTask(new class($sender, $host, $agent, $data) extends BulkCurlTask{
CURLOPT_POST => 1, /** @var string */
CURLOPT_POSTFIELDS => $data, private $host;
CURLOPT_AUTOREFERER => false,
CURLOPT_FOLLOWLOCATION => false public function __construct(CommandSender $sender, string $host, string $agent, array $data){
]] parent::__construct([
], $sender) extends BulkCurlTask{ ["page" => "https://$host?upload=true", "extraOpts" => [
CURLOPT_HTTPHEADER => [
"User-Agent: $agent",
"Content-Type: application/x-www-form-urlencoded"
],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_AUTOREFERER => false,
CURLOPT_FOLLOWLOCATION => false
]]
], $sender);
$this->host = $host;
}
public function onCompletion(Server $server){ public function onCompletion(Server $server){
$sender = $this->fetchLocal(); $sender = $this->fetchLocal();
if($sender instanceof Player and !$sender->isOnline()){ // TODO replace with a more generic API method for checking availability of CommandSender if($sender instanceof Player and !$sender->isOnline()){ // TODO replace with a more generic API method for checking availability of CommandSender
@ -123,23 +135,14 @@ class TimingsCommand extends VanillaCommand{
$server->getLogger()->logException($result); $server->getLogger()->logException($result);
return; return;
} }
list(, $headers) = $result; if(isset($result[0]) && is_array($response = json_decode($result[0], true)) && isset($response["id"])){
foreach($headers as $headerGroup){
if(isset($headerGroup["location"]) and preg_match('#^http://paste\\.ubuntu\\.com/([A-Za-z0-9+\/=]+)/#', trim($headerGroup["location"]), $match)){
$pasteId = $match[1];
break;
}
}
if(isset($pasteId)){
$sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsUpload", ["http://paste.ubuntu.com/" . $pasteId . "/"]));
$sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsRead", $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsRead",
["http://" . $sender->getServer()->getProperty("timings.host", "timings.pmmp.io") . "/?url=" . urlencode($pasteId)])); ["https://" . $this->host . "/?id=" . $response["id"]]));
}else{ }else{
$sender->sendMessage(new TranslationContainer("pocketmine.command.timings.pasteError")); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.pasteError"));
} }
} }
}); });
}else{ }else{
fclose($fileTimings); fclose($fileTimings);
$sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsWrite", [$timings])); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsWrite", [$timings]));