Add support for reduce. Update unit tests for subdir books.
[bookreader.git] / BookReaderIA / datanode / BookReaderPreview.php
index 5fb4a7f..4192fb8 100644 (file)
@@ -1,7 +1,8 @@
 <?
 /*
 
-Provides access to preview images of book.
+Provides access to preview images of book.  It is run with privileges and provides a reduced
+access wrapper around BookReaderImages.
 
 Michael Ang <http://github.com/mangtronix>
 
@@ -28,13 +29,19 @@ require_once('BookReaderImages.inc.php');
 
 function BRfatal($message) {
     header("HTTP/1.0 404 Not Found");
+    header("Content-type: text/plain");
     print $message;
-    exit();
+    die(-1);
 }
 
 $brm = new BookReaderMeta();
-$metadata = $brm->buildMetadata($_REQUEST['id'], $_REQUEST['itemPath'], $_REQUEST['bookId'], $_REQUEST['server']);
+try {
+    $metadata = $brm->buildMetadata($_REQUEST['id'], $_REQUEST['itemPath'], $_REQUEST['subPrefix'], $_REQUEST['server']);
+} catch (Exception $e) {
+    BRfatal($e->getMessage);
+}
 
+// $$$ allow size information
 $knownPages = array('title','cover','preview');
 $page = $_REQUEST['page'];
 if (! in_array($page, $knownPages) ) {
@@ -61,35 +68,63 @@ switch ($page) {
         
     case 'preview':
         // Preference is:
+        //   Cover page if book was published >= 1950
         //   Title page
         //   Cover page
         //   Page 0
+        
+        /*
+        header('Content-type: text/plain');
+        print 'Date ' . $metadata['date'];
+        print 'Year ' . $brm->parseYear($metadata['date']);
+        */
+        if ( array_key_exists('date', $metadata) && array_key_exists('coverIndices', $metadata) ) {
+            if ($brm->parseYear($metadata['date']) >= 1950) {
+                $imageIndex = $metadata['coverIndices'][0];                
+                break;
+            }
+        }
         if (array_key_exists('titleIndex', $metadata)) {
             $imageIndex = $metadata['titleIndex'];
-        } else if (array_key_exists('coverIndices', $metadata)) {
+            break;
+        }
+        if (array_key_exists('coverIndices', $metadata)) {
             $imageIndex = $metadata['coverIndices'][0];
-        } else {
-            $imageIndex = 0;
+            break;
         }
+        
+        // First page
+        $imageIndex = 0;
         break;
         
     default:
         // Shouldn't be possible
         BRfatal("Couldn't find page");
         break;
+        
 }
 
 $leaf = $brm->leafForIndex($imageIndex, $metadata['leafNums']);
 
 $requestEnv = array(
     'zip' => $metadata['zip'],
-    'file' => $brm->imageFilePath($leaf, $metadata['bookId'], $metadata['imageFormat']),
+    'file' => $brm->imageFilePath($leaf, $metadata['subPrefix'], $metadata['imageFormat']),
     'ext' => 'jpg',
-    'reduce' => 2, // XXX
 );
 
 // Return image data - will check privs
 $bri = new BookReaderImages();
-$bri->serveRequest($requestEnv);
+try {
+    $bri->serveRequest($requestEnv);
+} catch (Exception $e) {
+    header("HTTP/1.0 404 Not Found");
+    header("Content-type: text/plain");
+    print "Error serving request:";
+    print "  " . $e->getMessage();
+    print "Debugging information:";
+    echo $e->getTraceAsString();
+    die(-1);
+}
 
 ?>
\ No newline at end of file