<?php 
/** 
 * 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 
     */ 
    if(!is_resource($resource)){ 
      $uploaded = $upload_size; 
      $upload_size = $downloaded; 
      $downloaded = $download_size; 
      $download_size = $resource; 
    } 
 
    if($download_size > 1000 && $downloaded > 0){ 
      $percent = round($downloaded / $download_size  * 100, 0); 
    }else{ 
      $percent = 1; 
    } 
 
    if($lastPercentage !== $percent || isset($GLOBALS['non_percent'])){ 
      $lastPercentage = $percent; 
 
      if($download_size > 0){ 
        $readable_size = FS::normalizeSize($download_size); 
        sendStatusToLobby("download_status", "Downloaded $percent% of $readable_size"); 
      }else{ 
        /** 
         * We couldn't find the percentage 
         */ 
        $GLOBALS['non_percent'] = 1; 
 
        $downloaded = FS::normalizeSize($downloaded); 
        sendStatusToLobby("download_status", "Downloaded $downloaded"); 
      } 
 
      /** 
       * Show Install message when download is completed 
       */ 
      if($percent == 100 && !isset($GLOBALS['install-msg-printed'])){ 
        $GLOBALS['install-msg-printed'] = 1; 
        $downloaded = FS::normalizeSize($downloaded); 
        sendStatusToLobby("download_status", "Downloaded 100% of $downloaded"); 
        sleep(2); 
        sendStatusToLobby("install_status", "Installing <b>$appID</b>..."); 
        sleep(2); 
      } 
    } 
  }; 
 
  try{ 
    /** 
     * Update::app() will only return TRUE if download is completed 
     */ 
    if(Update::app($appID)){ 
      $App = new Apps($appID); 
      $App->enableApp(); 
 
      sendStatusToLobby("install_finished", "Installed <b>$appID</b>.<cl/><a href='". $App->info["url"] ."' class='btn green'>Open App</a>"); 
    } 
  }catch(\Exception $e){ 
    sendStatusToLobby("error", $e->getMessage()); 
  } 
} 
 
 |