From 4bce0d33491f6304f7f9b857c6ec541a7f229365 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lucas?= Date: Tue, 5 Feb 2013 21:08:28 +0100 Subject: [PATCH] Enable kepub.epub download. re #39 --- .htaccess | 1 + book.php | 4 ++++ config_default.php | 7 +++++++ data.php | 6 +++++- php-epub-meta/epub.php | 47 ++++++++++++++++++++++++------------------ 5 files changed, 44 insertions(+), 21 deletions(-) diff --git a/.htaccess b/.htaccess index e3948c9..0603a65 100644 --- a/.htaccess +++ b/.htaccess @@ -19,6 +19,7 @@ RewriteEngine on +RewriteRule ^download/(.*)/.*\.kepub\.epub$ fetch.php?data=$1&type=epub [L] RewriteRule ^download/(.*)/.*\.(.*)$ fetch.php?data=$1&type=$2 [L] diff --git a/book.php b/book.php index 3aa6bc8..17b184a 100644 --- a/book.php +++ b/book.php @@ -298,6 +298,7 @@ class Book extends Base { public function getUpdatedEpub ($idData) { + global $config; $data = $this->getDataById ($idData); try @@ -320,6 +321,9 @@ class Book extends Base { $epub->Serie ($se->name); $epub->SerieIndex ($this->seriesIndex); } + if ($config['cops_provide_kepub'] == "1") { + $epub->updateForKepub (); + } $epub->download ($data->getUpdatedFilenameEpub ()); } catch (Exception $e) diff --git a/config_default.php b/config_default.php index 46d2e0c..fc24172 100644 --- a/config_default.php +++ b/config_default.php @@ -155,4 +155,11 @@ * Note that for now only the first, second and forth type of custom columns are supported */ $config['cops_calibre_custom_column'] = array (); + + /* + * Rename .epub to .kepub.epub if downloaded from a Kobo eReader + * The ebook will then be recognized a Kepub so with chaptered paging, statistics, ... + * You have to enable URL rewriting if you want to enable kepup.epub download + */ + $config['cops_provide_kepub'] = "1"; ?> \ No newline at end of file diff --git a/data.php b/data.php index a6a56e4..cdd05d5 100644 --- a/data.php +++ b/data.php @@ -95,7 +95,11 @@ class Data extends Base { if ($config['cops_use_url_rewriting'] == "1") { - return "download/" . $this->id . "/" . urlencode ($this->getFilename ()); + if ($config['cops_provide_kepub'] == "1" && preg_match("/Kobo/", $_SERVER['HTTP_USER_AGENT'])) { + return "download/" . $this->id . "/" . urlencode ($this->getUpdatedFilenameKepub ()); + } else { + return "download/" . $this->id . "/" . urlencode ($this->getFilename ()); + } } else { diff --git a/php-epub-meta/epub.php b/php-epub-meta/epub.php index 857d29a..f6cf71f 100644 --- a/php-epub-meta/epub.php +++ b/php-epub-meta/epub.php @@ -393,30 +393,37 @@ class EPub { ); } + public function getCoverItem () { + $nodes = $this->xpath->query('//opf:metadata/opf:meta[@name="cover"]'); + if(!$nodes->length) return NULL; + + $coverid = (String) $nodes->item(0)->attr('opf:content'); + if(!$coverid) return NULL; + + $nodes = $this->xpath->query('//opf:manifest/opf:item[@id="'.$coverid.'"]'); + if(!$nodes->length) return NULL; + + return $nodes->item(0); + } + + public function updateForKepub () { + $item = $this->getCoverItem (); + if (!is_null ($item)) { + $item->attr('opf:properties', 'cover-image'); + } + } + public function Cover2($path=false, $mime=false){ $hascover = true; - $item; - // load cover - $nodes = $this->xpath->query('//opf:metadata/opf:meta[@name="cover"]'); - if(!$nodes->length){ + $item = $this->getCoverItem (); + if (is_null ($item)) { $hascover = false; - } else{ - $coverid = (String) $nodes->item(0)->attr('opf:content'); - if(!$coverid){ - $hascover = false; - } else{ - $nodes = $this->xpath->query('//opf:manifest/opf:item[@id="'.$coverid.'"]'); - if(!$nodes->length){ - $hascover = false; - } else{ - $item = $nodes->item(0); - $mime = $item->attr('opf:media-type'); - $this->coverpath = $item->attr('opf:href'); - $this->coverpath = dirname('/'.$this->meta).'/'.$this->coverpath; // image path is relative to meta file - $this->coverpath = ltrim($this->coverpath,'/'); - } - } + } else { + $mime = $item->attr('opf:media-type'); + $this->coverpath = $item->attr('opf:href'); + $this->coverpath = dirname('/'.$this->meta).'/'.$this->coverpath; // image path is relative to meta file + $this->coverpath = ltrim($this->coverpath,'/'); } // set cover