X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=BookReaderIA%2Finc%2FBookReader.inc;h=56a1fd66c03569b3063cf71a140333ab4677db2c;hb=bc2a1bf0a8e59f009c005cc78f1b22420e689c63;hp=86d356358d0899d03c718705fb4a66fed60917f3;hpb=050e4a2a8055ef061b0d7d21562c23d138801ea5;p=bookreader.git diff --git a/BookReaderIA/inc/BookReader.inc b/BookReaderIA/inc/BookReader.inc index 86d3563..56a1fd6 100644 --- a/BookReaderIA/inc/BookReader.inc +++ b/BookReaderIA/inc/BookReader.inc @@ -19,12 +19,12 @@ class BookReader // $$$ TODO add support for jpg and tar stacks // https://bugs.edge.launchpad.net/gnubook/+bug/323003 // https://bugs.edge.launchpad.net/gnubook/+bug/385397 - $imageFormatRegex = '@' . preg_quote($prefix, '@') . '_(jp2|tif)\.zip$@'; + $imageFormatRegex = '@' . preg_quote($prefix, '@') . '_(jp2|tif|jpg)\.(zip|tar)$@'; $baseLength = strlen($item->metadataGrabber->mainDir . '/'); foreach ($item->getFiles() as $location => $fileInfo) { $filename = substr($location, $baseLength); - + if ($checkOldScandata) { if ($filename == 'scandata.xml' || $filename == 'scandata.zip') { $foundScandata = $filename; @@ -39,7 +39,7 @@ class BookReader $foundImageStack = $filename; } } - + if ($foundScandata && $foundImageStack) { return true; } @@ -73,7 +73,7 @@ class BookReader { // Set title to default if not set if (!$title) { - $title = 'Bookreader'; + $title = 'BookReader'; } $id = $identifier; @@ -81,7 +81,12 @@ class BookReader // manually update with Launchpad version number at each checkin so that browsers // do not use old cached version // see https://bugs.launchpad.net/gnubook/+bug/330748 - $version = "0.9.18"; + $version = "r25"; + + if (BookReader::getDevHost($server)) { + // on dev host - add time to force reload + $version .= '_' . time(); + } if ("" == $id) { echo "No identifier specified!"; @@ -94,6 +99,8 @@ class BookReader + + <? echo $title; ?> @@ -164,21 +175,37 @@ class BookReader exit; } - public static function jsMetadataURL($server, $identifier, $mainDir, $subPrefix = '') + // Returns the user part of dev host from URL, or null + public static function getDevHost($server) { - $serverBaseURL = $server; - - // Check if we're on a dev vhost and point to JSIA in the user's public_html on the datanode - if (preg_match("/^www-(\w+)/", $_SERVER["SERVER_NAME"], $match)) { + if (preg_match("/^www-(\w+)/", $_SERVER["SERVER_NAME"], $match)) { + return $match[1]; + } + + return null; + } + + + public static function serverBaseURL($server) + { + // Check if we're on a dev vhost and point to JSIA in the user's public_html + // on the datanode // $$$ the remapping isn't totally automatic yet and requires user to // ln -s ~/petabox/www/datanode/BookReader ~/public_html/BookReader // so we enable it only for known hosts - $devhosts = array('mang', 'testflip'); - if (in_array($match[1], $devhosts)) { - $serverBaseURL = $serverBaseURL . "/~" . $match[1]; + $devhost = BookReader::getDevHost($server); + $devhosts = array('mang', 'testflip', 'rkumar'); + if (in_array($devhost, $devhosts)) { + $server = $server . "/~" . $devhost; } - } - + return $server; + } + + + public static function jsMetadataURL($server, $identifier, $mainDir, $subPrefix = '') + { + $serverBaseURL = BookReader::serverBaseURL($server); + $params = array( 'id' => $identifier, 'itemPath' => $mainDir, 'server' => $server ); if ($subPrefix) { $params['subPrefix'] = $subPrefix; @@ -197,5 +224,76 @@ class BookReader return $url; } + // Return the URL for the requested /download/$path, or null + public static function getURL($path, $item) { + // $path should look like {itemId}/{operator}/{filename} + // Other operators may be added + + $parts = preg_split('#/#', $path, 3); + if (count($parts) != 3) { + return null; + } + $identifier = $parts[0]; + $operator = $parts[1]; + $filename = $parts[2]; + + $serverBaseURL = BookReader::serverBaseURL($item->getServer()); + + switch ($operator) { + case 'page': + // Find bookId and which page was requested + $pathParts = pathinfo($filename); + + // Look for preview request + if (preg_match('/^(.*)_(cover|title|preview)$/', $pathParts['filename'], $matches) === 0) { + return null; + } + $bookId = $matches[1]; + $page = $matches[2]; + $query = array( + 'id' => $identifier, + 'bookId' => $bookId, + 'itemPath' => $item->getMainDir(), + 'server' => $serverBaseURL, + 'page' => $page, + ); + return 'http://' . $serverBaseURL . '/BookReader/BookReaderPreview.php?' . http_build_query($query, '', '&'); + + default: + return null; + } + + return null; // was not handled + } + + // $$$ Ideally we will not rely on user agent, but for the moment we do + public static function paramsFromUserAgent($userAgent) { + $browserParams = array( + 'ipad' => array( 'ui' => 'touch' ), + 'iphone' => array( 'ui' => 'embed', 'mode' => '1up'), + ); + + $browser = BookReader::browserFromUserAgent($userAgent); + if ($browser) { + return $browserParams[$browser]; + } + return array(); + } + + public static function browserFromUserAgent($userAgent) { + $browserPatterns = array( + 'ipad' => '/iPad/', + 'iphone' => '/iPhone/', // Also cover iPod Touch + ); + + foreach ($browserPatterns as $browser => $pattern) { + if (preg_match($pattern, $userAgent)) { + return $browser; + } + } + return null; + } + } - ?> + +?> \ No newline at end of file