/** * If the $appID is in the queue, then give the download status of it * If the updated value is less than 20 seconds ago, then restart the download */ if (isset($appInstallQueue[$appID]) && $appInstallQueue[$appID]["updated"] > strtotime("-20 seconds")) { echo json_encode(array("statusID" => $appInstallQueue[$appID]["statusID"], "status" => $appInstallQueue[$appID]["status"])); } else { $appInfo = \Lobby\Server::store(array("get" => "app", "id" => $appID)); /** * App doesn't exist on Lobby Store */ if ($appInfo === "false") { echo json_encode(array("status" => "error", "error" => "App Doesn't Exist")); } else { $appName = $appInfo["name"]; $Process = new Process(Process::getPHPExecutable(), array("arguments" => array(L_DIR . "/admin/ajax/install-app-bg.php", \Lobby::getLID(), base64_encode(serialize($_SERVER)), $appID))); /** * Get the command used to execute install-app-bg.php */ $command = $Process->start(function () use($appID) { /** * This callback will close the connection between browser and server, * http://stackoverflow.com/q/36968552/1372424 */ echo json_encode(array("statusID" => "download_intro", "status" => "Downloading <b>{$appID}</b>...")); }); \Lobby::log("To install app '{$appID}', this command was executed : {$command}"); } } } }
/** * Argument #1 should equal the Lobby Unique ID * Argument #2 is $_SERVER variable * Argument #3 is App ID to install */ if (isset($argv[2])) { $_SERVER = unserialize(base64_decode($argv[2])); require __DIR__ . "/../../load.php"; } else { exit; } use Lobby\Apps; use Lobby\FS; use Lobby\Update; if ($argv[1] === \Lobby::getLID() && isset($argv[3])) { $appID = $argv[3]; function sendStatusToLobby($statusID, $status) { global $appID; Lobby\DB::saveJSONOption("lobby_app_downloads", array($appID => array("statusID" => $statusID, "status" => $status, "updated" => time()))); } /** * Record the last percentage of data downloaded * This to know whether download has progressed from previous state */ $lastPercentage = 0; \Lobby\Update::$progress = function ($resource, $download_size, $downloaded, $upload_size, $uploaded = "") use($appID, $lastPercentage) { /** * On new versions of cURL, $resource parameter is not passed * So, swap vars if it doesn't exist
/** * Append Lobby Info to POST data */ public static function makeData($data) { return array_replace_recursive(array("lobby" => array("lid" => \Lobby::getLID(), "version" => \Lobby::$version)), $data); }