Catch mediatomb browse errors
[noxon-gateway.git] / src / mediatomb.php
index d80e20ee8681f85fc41bc931d9e81fe05cc92fcb..33b9bd87305fbeedf076e65d341c4a3cbd72223e 100644 (file)
@@ -25,6 +25,11 @@ function mediatombBrowse(Services_MediaTomb $smt, $fullPath, $prefix)
 
     $path = substr($fullPath, strlen($prefix));
     $container = $smt->getContainerByPath($path);
+    if ($container === null) {
+        sendMessage('Error accessing ' . $fullPath);
+        return;
+    }
+
     $listItems = array();
 
     $it = $container->getItemIterator(false);
@@ -65,10 +70,16 @@ function mediatombAddFile(&$listItems, $item)
 
     $di = $item->getDetailedItem();
     $itemUrl = $item->url;
-    if ($di->mimetype !== 'audio/mpeg') {
+    if (!clientSupportsType($di->mimetype)) {
+        //client wants transcoded file
         //noxon iRadio cube does not want to play .ogg files
-        $itemUrl = $host1 . 'transcode-nocache.php'
-            . '?url=' . urlencode($itemUrl);
+        if (isset($GLOBALS['cacheDir']) && $GLOBALS['cacheDir'] != '') {
+            $itemUrl = $host1 . 'transcode-cache.php'
+                . '?url=' . urlencode($itemUrl);
+        } else {
+            $itemUrl = $host1 . 'transcode-nocache.php'
+                . '?url=' . urlencode($itemUrl);
+        }
     }
     $listItems[] = getEpisodeItem(
         $item->title,
@@ -78,6 +89,20 @@ function mediatombAddFile(&$listItems, $item)
     );
 }
 
+function clientSupportsType($mimetype)
+{
+    if ($mimetype === 'audio/mpeg') {
+        return true;
+    }
+    $ip = $_SERVER['REMOTE_ADDR'];
+    if (isset($GLOBALS['clientSupport'][$ip][$mimetype])
+        && $GLOBALS['clientSupport'][$ip][$mimetype] === true
+    ) {
+        return true;
+    }
+    return false;
+}
+
 /**
  * Single file mode - shows directories that only have a single file in them.
  * Each audio file gets its own virtual directory, containing only the