mirror of
https://github.com/Yetangitu/ampache
synced 2025-10-03 17:59:21 +02:00

Fix coding guidelines incoherences. Code should match PSR1/2 now, and php-cs is set to check it on each commit. Also fixed the Git hook to take into account only added, modified, copied and renamed files (preventing errors when trying to check deleted files). Closes #1260.
103 lines
3.9 KiB
PHP
103 lines
3.9 KiB
PHP
<?php
|
|
define('NO_SESSION', '1');
|
|
require_once '../lib/init.php';
|
|
|
|
if (!AmpConfig::get('upnp_backend')) {
|
|
echo "Disabled.";
|
|
exit;
|
|
}
|
|
|
|
set_time_limit(600);
|
|
|
|
header("Content-Type: text/html; charset=UTF-8");
|
|
$rootMediaItems = array();
|
|
$rootMediaItems[] = Upnp_Api::_musicMetadata('');
|
|
$rootMediaItems[] = Upnp_Api::_videoMetadata('');
|
|
|
|
// Parse the request from UPnP player
|
|
$requestRaw = file_get_contents('php://input');
|
|
if ($requestRaw != '') {
|
|
$upnpRequest = Upnp_Api::parseUPnPRequest($requestRaw);
|
|
//!!debug_event('upnp', 'Request: ' . $requestRaw, '5');
|
|
} else {
|
|
echo 'Error: no UPnP request.';
|
|
debug_event('upnp', 'No request', '5');
|
|
exit;
|
|
}
|
|
|
|
$items = array();
|
|
$totMatches = 0;
|
|
$responseType = "u:Error";
|
|
switch ($upnpRequest['action']) {
|
|
case 'search':
|
|
$responseType = 'u:SearchResponse';
|
|
$items = Upnp_Api::_callSearch($upnpRequest['searchcriteria']);
|
|
break;
|
|
case 'browse':
|
|
$responseType = 'u:BrowseResponse';
|
|
|
|
if ($upnpRequest['objectid'] == '0') {
|
|
// Root items
|
|
if ($upnpRequest['browseflag'] == 'BrowseMetadata') {
|
|
$items[] = array(
|
|
'id' => '0',
|
|
'parentID' => '-1',
|
|
'childCount' => '2',
|
|
'dc:title' => T_('root'),
|
|
'upnp:class' => 'object.container',
|
|
);
|
|
} else {
|
|
$items = $rootMediaItems;
|
|
}
|
|
break;
|
|
} else {
|
|
# The parse_url function returns an array in this format:
|
|
# Array (
|
|
# [scheme] => http
|
|
# [host] => hostname
|
|
# [user] => username
|
|
# [pass] => password
|
|
# [path] => /path
|
|
# [query] => arg=value
|
|
# [fragment] => anchor
|
|
# )
|
|
$reqObjectURL = parse_url($upnpRequest['objectid']);
|
|
switch ($reqObjectURL['scheme']) {
|
|
case 'amp':
|
|
switch ($reqObjectURL['host']) {
|
|
case 'music':
|
|
if ($upnpRequest['browseflag'] == 'BrowseMetadata') {
|
|
$items = Upnp_Api::_musicMetadata($reqObjectURL['path'], $reqObjectURL['query']);
|
|
} else {
|
|
list($totMatches, $items) = Upnp_Api::_musicChilds($reqObjectURL['path'], $reqObjectURL['query'], $upnpRequest['startingindex'], $upnpRequest['requestedcount']);
|
|
}
|
|
break;
|
|
case 'video':
|
|
if ($upnpRequest['browseflag'] == 'BrowseMetadata') {
|
|
$items = Upnp_Api::_videoMetadata($reqObjectURL['path'], $reqObjectURL['query']);
|
|
} else {
|
|
list($totMatches, $items) = Upnp_Api::_videoChilds($reqObjectURL['path'], $reqObjectURL['query'], $upnpRequest['startingindex'], $upnpRequest['requestedcount']);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
};
|
|
break;
|
|
}
|
|
|
|
$totMatches = ($totMatches == 0) ? count($items) : $totMatches;
|
|
if ($items == null || $totMatches == 0) {
|
|
$domDIDL = Upnp_Api::createDIDL('');
|
|
$numRet = 0;
|
|
} else {
|
|
$domDIDL = Upnp_Api::createDIDL($items);
|
|
$numRet = count($items);
|
|
}
|
|
|
|
$xmlDIDL = $domDIDL->saveXML();
|
|
$domSOAP = Upnp_Api::createSOAPEnvelope($xmlDIDL, $numRet, $totMatches, $responseType);
|
|
$soapXML = $domSOAP->saveXML();
|
|
|
|
echo $soapXML;
|
|
//!!debug_event('upnp', 'Response: ' . $soapXML, '5');
|