include $cfgFile;
}
-if (strtolower($fullUri) == '/setupapp/radio567/asp/browsexpa/loginxml.asp?token=0') {
- //initial login for "internet radio" and podcasts
- //lowercase tags
+if (strtolower($fullUri) == '/setupapp/radio567/asp/browsexpa/loginxml.asp?token=0'
+ || $fullUri == '/RadioNativeLogin.php'
+) {
+ //initial login for "internet radio", podcasts and "my noxon"
header('Content-type: text/html');
- readfile($dataDir . 'initial-login.xml');
- exit();
-} else if ($fullUri == '/RadioNativeLogin.php') {
- //initial login for "My noxon"
- //this one wants CamelCased tags
- header('Content-type: text/html');
- readfile($dataDir . 'login-mynoxon.xml');
+ readfile($dataDir . 'login-camelcase.xml');
exit();
} else if ($path == '/setupapp/radio567/asp/BrowseXPA/LoginXML.asp') {
//"Internet Radio"
return;
}
+ $ext = pathinfo($path, PATHINFO_EXTENSION);
if (is_dir($fullPath)) {
sendDir($path);
- } else if (substr($path, -4) == '.url') {
+ } else if ($ext == 'url') {
require_once 'podcasts.php';
sendPodcast($path);
- } else if (substr($path, -4) == '.txt') {
+ } else if ($ext == 'txt') {
sendTextFile($path);
+ } else if ($ext == 'sh') {
+ sendScript($path);
} else {
sendMessage('Unknown file type');
}
}
+function pathEncode($urlPath)
+{
+ return str_replace('%2F', '/', rawurlencode($urlPath));
+}
+
function sendDir($path)
{
global $varDir;
$entries = glob(str_replace('//', '/', $varDir . rtrim($path, '/') . '/*'));
$count = 0;
foreach ($entries as $entry) {
- $urlPath = substr($entry, strlen($varDir));
+ $urlPath = pathEncode(substr($entry, strlen($varDir)));
+ $ext = pathinfo($entry, PATHINFO_EXTENSION);
+
+ $titleBase = basename($entry);
+ $titleBase = preg_replace('#^[0-9]+_#', '', $titleBase);
if (is_dir($entry)) {
++$count;
- $listItems[] = getDirItem(basename($entry), $urlPath . '/');
- } else if (substr($entry, -4) == '.url') {
+ $listItems[] = getDirItem($titleBase, $urlPath . '/');
+ } else if ($ext == 'url') {
//podcast
++$count;
- $listItems[] = getPodcastItem(basename($entry, '.url'), $urlPath);
- } else if (substr($entry, -4) == '.txt') {
+ $listItems[] = getPodcastItem(basename($titleBase, '.url'), $urlPath);
+ } else if (substr($entry, -8) == '.auto.sh') {
+ //automatically execute script while listing this directory
+ addScriptOutput($listItems, $entry);
+ } else if ($ext == 'txt' || $ext == 'sh') {
//plain text file
++$count;
- $listItems[] = getDirItem(basename($entry, '.txt'), $urlPath);
+ $listItems[] = getDirItem(basename($titleBase, '.' . $ext), $urlPath);
}
}
if (!$count) {
sendListItems($listItems);
}
+function sendScript($path)
+{
+ global $varDir;
+
+ $listItems = array();
+ addPreviousItem($listItems, $path);
+
+ $fullPath = $varDir . $path;
+ addScriptOutput($listItems, $fullPath);
+ sendListItems($listItems);
+}
+
+function addScriptOutput(&$listItems, $fullPath)
+{
+ exec($fullPath . ' 2>&1', $output, $retVal);
+
+ if ($retVal == 0) {
+ addTextLines($listItems, $output);
+ } else {
+ $listItems[] = getMessageItem('Error executing script');
+ addTextLines($listItems, $output);
+ }
+}
+
function sendTextFile($path)
{
global $varDir;
addPreviousItem($listItems, $path);
$lines = file($varDir . $path);
+ addTextLines($listItems, $lines);
+ sendListItems($listItems);
+}
+
+function addTextLines(&$listItems, $lines)
+{
foreach ($lines as $line) {
- $listItems[] = getDisplayItem($line);
+ $line = trim($line);
+ if ($line != '') {
+ $listItems[] = getDisplayItem($line);
+ }
}
- sendListItems($listItems);
}
function getDisplayItem($line)
{
+ $line = preg_replace('#\s+#', ' ', $line);
return '<Item>'
. '<ItemType>Display</ItemType>'
- . '<Display>' . utf8_decode(htmlspecialchars(trim($line))) . '</Display>'
+ . '<Display>' . utf8_decode(htmlspecialchars($line)) . '</Display>'
. '</Item>';
}