From 0b03cff2320419c52e3416dc5268cfcbf02ba442 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Thu, 16 Sep 2021 20:29:29 +0200 Subject: [PATCH] wip #4666 @0.75 --- app/Jobs/ProcessFluidbook.php | 239 +--------------------------------- composer.lock | 67 +++++----- 2 files changed, 38 insertions(+), 268 deletions(-) diff --git a/app/Jobs/ProcessFluidbook.php b/app/Jobs/ProcessFluidbook.php index da1a257..9347c8d 100644 --- a/app/Jobs/ProcessFluidbook.php +++ b/app/Jobs/ProcessFluidbook.php @@ -3,260 +3,27 @@ namespace App\Jobs; use App\Models\Publication; -use Cubist\Util\Files\Files; -use Cubist\Util\Files\VirtualDirectory; -use Cubist\Util\PHP; -use Exception; -use Fluidbook\Tools\Jobs\ProcessFile; -use Fluidbook\Tools\Jobs\ProcessPage; -use Fluidbook\Tools\PDF\Document; -use Fluidbook\Tools\Search\SearchIndex; -use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldBeUnique; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Foundation\Bus\Dispatchable; -use Illuminate\Queue\InteractsWithQueue; -use Illuminate\Queue\Jobs\SyncJob; -use Illuminate\Queue\SerializesModels; -use JsonException; +use Fluidbook\Tools\Compiler\Compiler; use Spatie\MediaLibrary\MediaCollections\Models\Media; -use stdClass; -class ProcessFluidbook implements ShouldQueue, ShouldBeUnique +class ProcessFluidbook extends Compiler { - use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; - - /** - * @var Document - */ - protected $in; - - /** - * @var string - */ - protected $out; - - /** - * @var string - */ - protected $stub; /** * @var Publication */ protected $pub; - - /** @var VirtualDirectory */ - protected $vdir; - - /** - * @var stdClass - */ - protected $config; - - /** - * Create a new job instance. - * - * @return void - */ public function __construct() { - $this->pub = Publication::find(1); /** @var Media $media */ $media = $this->pub->getMediaInField($this->pub->getAttributeValue('document'))->first(); + $this->addSource($media->getPath()); - $this->in = new Document($media->getPath()); $this->out = storage_path('fluidbook/out/'); - $this->stub = resource_path('fluidbook/'); } - /** - * Execute the job. - * - * @return void - */ - public function handle() - { - $sync = ($this->job instanceof SyncJob); - if ($sync) { - PHP::neverStop(false); - } - - start_measure('Process Fluidbook'); - $this->processPages($sync); - $this->getTexts(); - $this->getLinks(); - $this->compileFluidbook(); - stop_measure('Process Fluidbook'); - } - - public function processPages($sync = false) - { - start_measure('Process Pages'); - $out = $this->getConvertPath(); - Files::mkdir($out); - $this->in->processPages($out, $this->getProcessFiles(), $sync); - stop_measure('Process Pages'); - } - - /** - * @return ProcessFile[] - */ - public function getProcessFiles() - { - return [ - 'thumb' => new ProcessFile('jpg', 'thumb'), - 'back150' => new ProcessFile('jpg', 150, true, false), - 'text' => new ProcessFile('svg', 300, false, true), - ]; - } - - /** - * @param $name - * @param null|int $page - * @return ProcessFile - * @throws Exception - */ - public function getProcessFile($name, $page = null) - { - $files = $this->getProcessFiles(); - if (isset($files[$name])) { - $res = $files[$name]; - if (null !== $page) { - $res->setJob(new ProcessPage($this->in, $page, $this->getConvertPath())); - } - return $res; - } - throw new Exception(sprintf('File %s does not exist', $name)); - } - - public function getConvertPath() - { - return storage_path('fluidbook/convert/' . $this->in->getHash() . '/'); - } - - public function getTexts() - { - start_measure('Process texts'); - $this->in->processTexts($this->getConvertPath()); - start_measure('Process texts'); - } - - public function getLinks() - { - start_measure('Process links'); - $this->in->processLinks($this->getConvertPath()); - start_measure('Process links'); - } - - /** - * @throws JsonException - */ - protected function compileFluidbook() - { - start_measure('Compile fluidbook'); - - $this->vdir = new VirtualDirectory($this->out); - $this->vdir->copyDirectory($this->stub, '/'); - - $this->compileContents(); - $this->compileSearch(); - $this->compileConfig(); - - $this->vdir->sync(true); - - stop_measure('Compile fluidbook'); - } - - public function compileContents() - { - for ($i = 1; $i <= $this->in->getPages(); $i++) { - - $this->vdir->copy($this->getProcessFile('back150', $i)->getPath(), 'data/background/150/p' . $i . '.jpg'); - $this->vdir->copy($this->getProcessFile('text', $i)->getPath(), 'data/contents/p' . $i . '.svg'); - $this->vdir->copy($this->getProcessFile('thumb', $i)->getPath(), 'data/thumbnails/p' . $i . '.jpg'); - } - } - - public function compileLinks() - { - return []; - } - - public function compileSearch() - { - $index = new SearchIndex(); - for ($i = 1; $i <= $this->in->getPages(); $i++) { - $index->addPage($i, $i, $this->getConvertPath() . 'texts'); - } - - $this->vdir->file_put_contents('data/search.highlight.js', 'var HIGHLIGHTS=' . json_encode($index->compileHighlights()) . ';'); - $this->vdir->file_put_contents('data/search.index.js', 'var INDEX=' . json_encode($index->compileIndex()) . ';'); - } - - /** - * @throws JsonException - */ - public function compileConfig() - { - $settings = mb_substr(file_get_contents($this->stub . '/data/datas.js'), 13, -2); - $this->config = json_decode($settings, false, 512, JSON_THROW_ON_ERROR); - - $this->compileDimensions(); - $this->compilePageNumbers(); - $this->compileChapters(); - $this->config->links = $this->compileLinks(); - - $c = 'var SETTINGS=' . json_encode($this->config, JSON_THROW_ON_ERROR) . ';'; - $this->vdir->file_put_contents('data/datas.js', $c); - } - - protected function compileDimensions() - { - $width = round($this->in->getWidth(), 8); - $height = round($this->in->getHeight(), 8); - - $this->config->pageZoomFactor = 3; - $this->config->optimalWidth = 567; - $this->config->optimalHeight = 709; - $imagesize = getimagesize($this->getProcessFile('back150', 1)->getPath()); - $this->config->pdfZoomFactor = round(($imagesize[0] * 0.48) / $width, 12); - - $this->config->cssScale = $this->config->pageZoomFactor * min($this->config->optimalWidth / $width, $this->config->optimalHeight / $height); - $cssWidth = $width * $this->config->cssScale; - $cssHeight = $height * $this->config->cssScale; - - $this->config->pages = $this->in->getPages(); - $this->config->width = $cssWidth; - $this->config->height = $cssHeight; - - $this->config->multiply = $this->config->pdfZoomFactor * $this->config->cssScale; - - $this->config->pagesDimensions = []; - - $thumbDimensions = getimagesize($this->getProcessFile('thumb', 1)->getPath()); - $this->config->thumbWidth = $thumbDimensions[0]; - $this->config->thumbHeight = $thumbDimensions[1]; - - for ($i = 1; $i <= $this->in->getPages(); $i++) { - $this->config->pagesDimensions[$i] = [$this->config->width, $this->config->height]; - } - } - - protected function compilePageNumbers() - { - $this->config->numerotation = $this->in->getPageNumbers(); - } - - protected function compileChapters() - { - $this->config->chaptersPagesNumber = 'physical'; - $this->config->chapters = $this->in->getChapters(); - } - - } diff --git a/composer.lock b/composer.lock index f956c3f..65bf951 100644 --- a/composer.lock +++ b/composer.lock @@ -131,16 +131,16 @@ }, { "name": "backpack/crud", - "version": "4.1.52", + "version": "4.1.53", "source": { "type": "git", "url": "https://github.com/Laravel-Backpack/CRUD.git", - "reference": "239e60df0436f8a817facce20a2dffcb2b6e7250" + "reference": "8698b8ed51e8b18e311f928f6f80a7161f1eb172" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Backpack/CRUD/zipball/239e60df0436f8a817facce20a2dffcb2b6e7250", - "reference": "239e60df0436f8a817facce20a2dffcb2b6e7250", + "url": "https://api.github.com/repos/Laravel-Backpack/CRUD/zipball/8698b8ed51e8b18e311f928f6f80a7161f1eb172", + "reference": "8698b8ed51e8b18e311f928f6f80a7161f1eb172", "shasum": "" }, "require": { @@ -218,9 +218,9 @@ ], "support": { "issues": "https://github.com/Laravel-Backpack/CRUD/issues", - "source": "https://github.com/Laravel-Backpack/CRUD/tree/4.1.52" + "source": "https://github.com/Laravel-Backpack/CRUD/tree/4.1.53" }, - "time": "2021-09-06T06:35:01+00:00" + "time": "2021-09-16T11:37:48+00:00" }, { "name": "backpack/logmanager", @@ -1486,13 +1486,13 @@ "source": { "type": "git", "url": "git://git.cubedesigners.com/cubist_util.git", - "reference": "625020133b3199d9dacf967225e97deba625a5c5" + "reference": "ca9f1c2f7c8e729a1b6ff64ece1e1c1ab1ef4228" }, "dist": { "type": "tar", - "url": "https://composer.cubedesigners.com/dist/cubist/util/cubist-util-dev-master-788531.tar", - "reference": "625020133b3199d9dacf967225e97deba625a5c5", - "shasum": "c86716eaf424939aef3bccbc77f6dfd43d210d12" + "url": "https://composer.cubedesigners.com/dist/cubist/util/cubist-util-dev-master-e2358f.tar", + "reference": "ca9f1c2f7c8e729a1b6ff64ece1e1c1ab1ef4228", + "shasum": "c0c32959b037843d1d053b60223a3e13e0693278" }, "require": { "cubist/net": "dev-master", @@ -1522,7 +1522,7 @@ } ], "description": "Utilities class", - "time": "2021-09-13T17:11:49+00:00" + "time": "2021-09-15T15:24:17+00:00" }, { "name": "cviebrock/eloquent-sluggable", @@ -2612,13 +2612,13 @@ "source": { "type": "git", "url": "git://git.cubedesigners.com/fluidbook_tools.git", - "reference": "cee9cbc8c5c8756448b7e6c9d42865d16c2266e8" + "reference": "6f09526ee33a67b11840421aa5f606a9cda1176b" }, "dist": { "type": "tar", - "url": "https://composer.cubedesigners.com/dist/fluidbook/tools/fluidbook-tools-dev-master-dfaf55.tar", - "reference": "cee9cbc8c5c8756448b7e6c9d42865d16c2266e8", - "shasum": "204142ce1cff1965fab050bf29165db2544c5875" + "url": "https://composer.cubedesigners.com/dist/fluidbook/tools/fluidbook-tools-dev-master-95ddd5.tar", + "reference": "6f09526ee33a67b11840421aa5f606a9cda1176b", + "shasum": "d0df8b14f7779f175f2628f54a30e3a5e95c6109" }, "require": { "barryvdh/laravel-debugbar": "^3.6", @@ -2650,7 +2650,7 @@ } ], "description": "Fluidbook Tools", - "time": "2021-09-14T12:38:18+00:00" + "time": "2021-09-16T17:17:22+00:00" }, { "name": "fruitcake/laravel-cors", @@ -3363,16 +3363,16 @@ }, { "name": "laravel/framework", - "version": "v8.60.0", + "version": "v8.61.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "44f16a31a1d4ac8a51605550d7796e2273984a48" + "reference": "3d528d3d3c8ecb444b50a266c212a52973a6669b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/44f16a31a1d4ac8a51605550d7796e2273984a48", - "reference": "44f16a31a1d4ac8a51605550d7796e2273984a48", + "url": "https://api.github.com/repos/laravel/framework/zipball/3d528d3d3c8ecb444b50a266c212a52973a6669b", + "reference": "3d528d3d3c8ecb444b50a266c212a52973a6669b", "shasum": "" }, "require": { @@ -3409,7 +3409,8 @@ "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" }, "replace": { "illuminate/auth": "self.version", @@ -3527,7 +3528,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-09-08T13:37:21+00:00" + "time": "2021-09-14T13:31:32+00:00" }, { "name": "laravel/sanctum", @@ -4243,24 +4244,24 @@ }, { "name": "monolog/monolog", - "version": "2.3.2", + "version": "2.3.4", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "71312564759a7db5b789296369c1a264efc43aad" + "reference": "437e7a1c50044b92773b361af77620efb76fff59" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/71312564759a7db5b789296369c1a264efc43aad", - "reference": "71312564759a7db5b789296369c1a264efc43aad", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/437e7a1c50044b92773b361af77620efb76fff59", + "reference": "437e7a1c50044b92773b361af77620efb76fff59", "shasum": "" }, "require": { "php": ">=7.2", - "psr/log": "^1.0.1" + "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0" + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" }, "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", @@ -4275,7 +4276,7 @@ "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90 <7.0.1", + "ruflin/elastica": ">=0.90@dev", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { @@ -4283,8 +4284,11 @@ "doctrine/couchdb": "Allow sending log messages to a CouchDB server", "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", "ext-mbstring": "Allow to work properly with unicode symbols", "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", @@ -4323,7 +4327,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.2" + "source": "https://github.com/Seldaek/monolog/tree/2.3.4" }, "funding": [ { @@ -4335,7 +4339,7 @@ "type": "tidelift" } ], - "time": "2021-07-23T07:42:52+00:00" + "time": "2021-09-15T11:27:21+00:00" }, { "name": "mxl/laravel-job", @@ -11594,7 +11598,6 @@ "type": "github" } ], - "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { -- 2.39.5