From 574d7300bdf9cda748079d41b466c431b3d7e4c0 Mon Sep 17 00:00:00 2001 From: frankdelange Date: Sat, 14 Jan 2017 10:23:44 +0100 Subject: [PATCH] files_opds: add FictionBook 2 (.fb2) preview provider --- files_opds/admin.php | 1 + files_opds/ajax/admin.php | 2 ++ files_opds/appinfo/app.php | 3 +- files_opds/js/admin.js | 3 ++ files_opds/lib/fb2preview.php | 52 +++++++++++++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 files_opds/lib/fb2preview.php diff --git a/files_opds/admin.php b/files_opds/admin.php index 9470298..ee90598 100644 --- a/files_opds/admin.php +++ b/files_opds/admin.php @@ -18,6 +18,7 @@ $defaults = new \OC_Defaults(); $formats = array( ["epub" => Config::getPreview('OC\Preview\Epub') ? 1 : 0 ], + ["fb2" => Config::getPreview('OC\Preview\FB2') ? 1 : 0 ], ["pdf" => Config::getPreview('OC\Preview\PDF') ? 1 : 0], ["opendocument" => Config::getPreview('OC\Preview\OpenDocument') ? 1 : 0], ["msoffice" => Config::getPreview('OC\Preview\MSOfficeDoc') ? 1 : 0] diff --git a/files_opds/ajax/admin.php b/files_opds/ajax/admin.php index 50a7db0..75f99d7 100644 --- a/files_opds/ajax/admin.php +++ b/files_opds/ajax/admin.php @@ -38,11 +38,13 @@ if (isset($_POST['opdsCoverX'])) { } else { // set preview preferences $opdsPreviewEpub = $_POST['opdsPreviewEpub']; + $opdsPreviewFb2 = $_POST['opdsPreviewFb2']; $opdsPreviewPdf = $_POST['opdsPreviewPdf']; $opdsPreviewOpenDocument = $_POST['opdsPreviewOpenDocument']; $opdsPreviewMsOffice = $_POST['opdsPreviewMsOffice']; Config::setPreview('OC\Preview\Epub',$opdsPreviewEpub); + Config::setPreview('OC\Preview\FB2',$opdsPreviewFb2); Config::setPreview('OC\Preview\PDF',$opdsPreviewPdf); Config::setPreview('OC\Preview\OpenDocument',$opdsPreviewOpenDocument); Config::setPreview('OC\Preview\StarOffice',$opdsPreviewOpenDocument); diff --git a/files_opds/appinfo/app.php b/files_opds/appinfo/app.php index 1960e6f..9bf8dfa 100644 --- a/files_opds/appinfo/app.php +++ b/files_opds/appinfo/app.php @@ -4,5 +4,6 @@ $l = \OC::$server->getL10N('files_opds'); \OCP\App::registerPersonal('files_opds', 'personal'); \OCP\App::registerAdmin('files_opds', 'admin'); -/* register preview provider */ +/* register preview providers */ \OC::$server->getPreviewManager()->registerProvider('/application\/epub\+zip/', function() { return new OCA\Files_Opds\EpubPreview; }); +\OC::$server->getPreviewManager()->registerProvider('/application\/x-fictionbook\+xml/', function() { return new OCA\Files_Opds\Fb2Preview; }); diff --git a/files_opds/js/admin.js b/files_opds/js/admin.js index 4b1ecc8..cb29337 100644 --- a/files_opds/js/admin.js +++ b/files_opds/js/admin.js @@ -3,11 +3,13 @@ $(document).ready(function(){ var opdsAdminSettings = { save : function() { var epub = document.getElementById('opds-preview-epub').checked ? 'true' : 'false'; + var fb2 = document.getElementById('opds-preview-fb2').checked ? 'true' : 'false'; var pdf = document.getElementById('opds-preview-pdf').checked ? 'true' : 'false'; var opendocument = document.getElementById('opds-preview-opendocument').checked ? 'true' : 'false'; var msoffice = document.getElementById('opds-preview-msoffice').checked ? 'true' : 'false'; var data = { opdsPreviewEpub : epub, + opdsPreviewFb2 : fb2, opdsPreviewPdf : pdf, opdsPreviewOpenDocument : opendocument, opdsPreviewMsOffice : msoffice @@ -40,6 +42,7 @@ $(document).ready(function(){ }; $('#opds-preview-epub').on("change", opdsAdminSettings.save); + $('#opds-preview-fb2').on("change", opdsAdminSettings.save); $('#opds-preview-pdf').on("change", opdsAdminSettings.save); $('#opds-preview-opendocument').on("change", opdsAdminSettings.save); $('#opds-preview-msoffice').on("change", opdsAdminSettings.save); diff --git a/files_opds/lib/fb2preview.php b/files_opds/lib/fb2preview.php new file mode 100644 index 0000000..3dfcd26 --- /dev/null +++ b/files_opds/lib/fb2preview.php @@ -0,0 +1,52 @@ +getFileInfo($path); + if(!$fileInfo) { + return false; + } + + $absPath = $fileview->toTmpFile($path); + + $fb2 = new \OCA\Files_Opds\FB2($absPath); + + $cover = $fb2->Cover(); + + if ($cover) { + $image = new \OC_Image(); + + $image->loadFromData($cover['data']); + } + + return (($cover !== null) && $image->valid()) ? $image : false; + } + + public function isAvailable(\OCP\Files\FileInfo $file) { + return $file->getSize() > 0; + } +} +