From: Michael Ang Date: Mon, 3 May 2010 23:00:38 +0000 (+0000) Subject: Pass data from meta.xml through to BookReaderMeta clients. Use cover image for previ... X-Git-Url: http://git.rot13.org/?a=commitdiff_plain;h=e2993326af3e82b21d744e605d762da792d36ba5;p=bookreader.git Pass data from meta.xml through to BookReaderMeta clients. Use cover image for preview if book published >= 1950. See https://bugs.edge.launchpad.net/bookreader/+bug/574761 --- diff --git a/BookReaderIA/datanode/BookReaderMeta.inc.php b/BookReaderIA/datanode/BookReaderMeta.inc.php index 9601a52..fcd1803 100644 --- a/BookReaderIA/datanode/BookReaderMeta.inc.php +++ b/BookReaderIA/datanode/BookReaderMeta.inc.php @@ -26,6 +26,22 @@ This file is part of BookReader. class BookReaderMeta { + // Fields from _meta.xml to add to response (if present) + var $metaFields = array( + 'title' => 'title', + 'author' => 'author', + 'publisher' => 'publisher', + 'date' => 'date', + 'language' => 'language', + 'contributor' => 'contributor', + 'collection' => 'collection', + 'page-progression' => 'pageProgression', + ); + + var $metaDefaults = array( + 'pageProgression' => 'lr', + ); + // Builds metadata object (to be encoded as JSON) function buildMetadata($id, $itemPath, $bookId, $server) { @@ -145,13 +161,17 @@ class BookReaderMeta { } # Load some values from meta.xml - $pageProgression = 'lr'; // default - if ('' != $metaData->{'page-progression'}) { - $pageProgression = $metaData->{"page-progression"}; + foreach ($this->metaFields as $srcName => $destName) { + if ($metaData->{$srcName}) { + $response[$destName] = $metaData->{$srcName} . ''; + } else { + if (array_key_exists($destName, $this->metaDefaults)) { + $response[$destName] = $this->metaDefaults[$destName]; + } + } } // General metadata - $response['title'] = $metaData->title . ''; // $$$ renamed $response['numPages'] = count($pageNums); // $$$ renamed if ('' != $titleLeaf) { $response['titleLeaf'] = $titleLeaf; // $$$ change to titleIndex - do leaf mapping here @@ -161,7 +181,6 @@ class BookReaderMeta { } } $response['url'] = "http://www.archive.org/details/$id"; - $response['pageProgression'] = $pageProgression . ''; $response['pageWidths'] = $pageWidths; $response['pageHeights'] = $pageHeights; $response['pageNums'] = $pageNums; @@ -289,7 +308,7 @@ class BookReaderMeta { return $leafNums[$index]; // $$$ todo change to instance variables } - function imageURL($leafNum, $metadata, $scale, $rotate) { + function imageURL($leafNum, $metadata, $scale = null, $rotate = null) { // "Under the hood", non-public, dynamically changing (achtung!) image URLs currently look like: // http://{server}/BookReader/BookReaderImages.php?zip={zipPath}&file={filePath}&scale={scale}&rotate={rotate} // e.g. http://ia311213.us.archive.org/BookReader/BookReaderImages.php?zip=/0/items/coloritsapplicat00andriala/coloritsapplicat00andriala_jp2.zip&file=coloritsapplicat00andriala_jp2/coloritsapplicat00andriala_0009.jp2&scale=8&rotate=0 @@ -298,10 +317,10 @@ class BookReaderMeta { $filePath = $this->imageFilePath($leafNum, $metadata['bookId'], $metadata['imageFormat']); $url = 'http://' . $metadata['server'] . '/BookReader/BookReaderImages.php?zip=' . $metadata['zip'] . '&file=' . $filePath; - if (defined($scale)) { + if ($scale !== null) { $url .= '&scale=' . $scale; } - if (defined($rotate)) { + if ($rotate !== null) { $url .= '&rotate=' . $rotate; } @@ -325,6 +344,15 @@ class BookReaderMeta { return sprintf("%s_%s/%s_%04d.%s", $bookId, $format, $bookId, intval($leafNum), $format); } + // Parse date from _meta.xml to integer + function parseYear($dateFromMetaXML) { + // grab the first run of digits + if (preg_match('|(\d+)|', $dateFromMetaXML, $matches)) { + return (int)$matches[1]; + } + return null; + } + function processRequest($requestEnv) { $id = $requestEnv['itemId']; // $$$ renamed $itemPath = $requestEnv['itemPath']; diff --git a/BookReaderIA/datanode/BookReaderPreview.php b/BookReaderIA/datanode/BookReaderPreview.php index 8770a9c..7604f91 100644 --- a/BookReaderIA/datanode/BookReaderPreview.php +++ b/BookReaderIA/datanode/BookReaderPreview.php @@ -66,22 +66,41 @@ 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']);