147 lines
6.1 KiB
PHP
Executable File
147 lines
6.1 KiB
PHP
Executable File
<?php
|
|
|
|
use Noodlehaus\Config;
|
|
use Noodlehaus\Parser\Xml;
|
|
use System\Diagnostics;
|
|
|
|
class RecoveryUpdateService {
|
|
|
|
function getBootloaderUpdateVersion()
|
|
{
|
|
$recoveryManifest = new Config(__DIR__."/manifests/recovery.xml", new Xml);
|
|
if(defined("PEACHPIE_VERSION"))
|
|
{
|
|
$recoveryManifest = $recoveryManifest->all();
|
|
\System\Diagnostics\Debug::WriteLine("Recovery Version: ".$recoveryManifest['version'], "RecoveryUpdateService");
|
|
}
|
|
return $recoveryManifest['version'];
|
|
}
|
|
|
|
function getBootloaderUpdateManifest()
|
|
{
|
|
$recoveryManifest = new Config(__DIR__."/manifests/recovery.xml", new Xml);
|
|
|
|
// Tweak to configuration to allow PeachPie to compile it as .NET
|
|
// We do this because if we do it the normal way using $conf->get() it fails to display anything.
|
|
$recoveryManifest = $recoveryManifest->all();
|
|
$buildDate = $recoveryManifest['build-date'];
|
|
$version = $recoveryManifest['version'];
|
|
$pinn_commit = $recoveryManifest['git']['pinn']['commit'];
|
|
$rpi_userland_branch = $recoveryManifest['git']['rpi-userland']['branch'];
|
|
$rpi_userland_commit = $recoveryManifest['git']['rpi-userland']['commit'];
|
|
$rpi_firmware_branch = $recoveryManifest['git']['rpi-firmware']['branch'];
|
|
$rpi_firmware_commit = $recoveryManifest['git']['rpi-firmware']['commit'];
|
|
$kernel_branch = $recoveryManifest['git']['rpi-linux']['branch'];
|
|
$kernel_commit = $recoveryManifest['git']['rpi-linux']['commit'];
|
|
|
|
$buildData = <<<EOF
|
|
Build-date: $buildDate
|
|
PINN Version: $version
|
|
PINN Git HEAD @ $pinn_commit
|
|
rpi-userland Git $rpi_userland_branch @ $rpi_userland_commit
|
|
rpi-firmware Git $rpi_firmware_branch @ $rpi_firmware_commit
|
|
rpi-linux Git $kernel_branch @ $kernel_commit
|
|
EOF;
|
|
|
|
return $buildData;
|
|
|
|
}
|
|
|
|
function getBootloaderUpdateOTA()
|
|
{
|
|
$recoveryManifest = new Config(__DIR__."/manifests/recovery.xml", new Xml);
|
|
|
|
// Tweak to allow PeachPie compiled version to read the manifest.
|
|
$recoveryManifest = $recoveryManifest->all();
|
|
|
|
$recoveryFile = "images/recovery/".$recoveryManifest['version'].".zip";
|
|
return $recoveryFile;
|
|
}
|
|
|
|
function getRecoveryInstallerRepository()
|
|
{
|
|
$repositoryConfig = new Config(__DIR__.'/repository.xml', new Xml);
|
|
$repositoryArray = array("os_list"=>[]);
|
|
$i = 0;
|
|
foreach($repositoryConfig['repository'] as $repository)
|
|
{
|
|
|
|
$repositoryArray['os_list'][$i] = [
|
|
'description' => $repository['@attributes']['description'],
|
|
'download_size' => $repository['download-size'],
|
|
'group' => $repository['@attributes']['group'],
|
|
'icon' => $repository['icon'],
|
|
'marketing_info' => $repository['url']['marketing-info'],
|
|
'nominal_size' => $repository['nominal-size'],
|
|
'os_info' => $repository['url']['os-info'],
|
|
'os_name' => $repository['@attributes']['name'],
|
|
'partition_setup' => $repository['url']['partition-setup'],
|
|
'partition_info' => $repository['url']['partition-info'],
|
|
'release_date' => $repository['release-date'],
|
|
'supported_models' => $repository['supported-model'],
|
|
'supports_backup' => $repository['supports-backup'],
|
|
'tarballs' => $repository['url']['tarball'],
|
|
'version' => $repository['version']
|
|
];
|
|
}
|
|
|
|
return json_encode($repositoryArray, JSON_PRETTY_PRINT+JSON_UNESCAPED_SLASHES);
|
|
}
|
|
|
|
|
|
function getRecoveryInstallerRepositoryList()
|
|
{
|
|
// Generate repo_list.json file.
|
|
}
|
|
|
|
}
|
|
|
|
class OSUpdateService {
|
|
|
|
function getLatestVersionInformation($operatingSystem)
|
|
{
|
|
$osManifest = new Config("manifests/os/".$operatingSystem.".xml", new Xml);
|
|
|
|
if(defined("PEACHPIE_VERSION"))
|
|
{
|
|
$osManifest = $osManifest->all();
|
|
\System\Diagnostics\Debug::write(json_encode($osManifest)."\r\n","OSUpdateService");
|
|
}
|
|
|
|
$osResponse = array(
|
|
"os-version" =>$osManifest['info']['version'],
|
|
"release-date" => $osManifest['info']['release-date']);
|
|
return $osResponse;
|
|
}
|
|
|
|
|
|
function getAvailableOSList()
|
|
{
|
|
$osmanifestlist = array();
|
|
$i = 0;
|
|
|
|
$flags = \FilesystemIterator::SKIP_DOTS;// some flags to filter . and .. and follow symlinks
|
|
$iterator = new \RecursiveDirectoryIterator(dirname('manifests/os/'), $flags);// create a simple recursive directory iterator
|
|
$iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST);// make it a truly recursive iterator
|
|
|
|
foreach($iterator as $fileinfo) {
|
|
if($fileinfo->getExtension() == "xml") {
|
|
if($fileinfo->getFilename() != "recovery") {
|
|
$osmanifest = new Config($fileinfo->__toString(), new Xml);
|
|
if(defined("PEACHPIE_VERSION")) {
|
|
$osmanifest = $osmanifest->all();
|
|
}
|
|
if(empty($osmanifest['info']['@attributes']['name'])) {
|
|
break;
|
|
}
|
|
$osmanifestlist[$i]['name'] = $osmanifest['info']['@attributes']['name'];
|
|
if(defined("PEACHPIE_VERSION")) \System\Diagnostics\Debug::writeLine($osmanifestlist[$i]['name']);
|
|
$osmanifestlist[$i]['version'] = $osmanifest['info']['version'];
|
|
$osmanifestlist[$i]['release-date'] = $osmanifest['info']['release-date'];
|
|
$i++;
|
|
}
|
|
}
|
|
}
|
|
return $osmanifestlist;
|
|
}
|
|
} |