Skip to content
This repository has been archived by the owner on Jun 29, 2022. It is now read-only.

Commit

Permalink
make sure file is optimized
Browse files Browse the repository at this point in the history
Signed-off-by: Bruno Meilick <[email protected]>

#6
  • Loading branch information
bnomei committed Jan 15, 2019
1 parent b876bd5 commit f64aad8
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 79 deletions.
139 changes: 75 additions & 64 deletions classes/Imageoptim.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,40 @@ public static function instance()
return static::$instance;
}

private static function push(string $key, string $value)
{
kirby()->cache('bnomei.thumbimageoptim')->set(\md5($key), [
'dst' => $key,
'time' => $value,
]);
}

private static function pop(string $key)
{
kirby()->cache('bnomei.thumbimageoptim')->remove(\md5($key));
}

public static function removeFilesOfUnfinishedJobs()
{
$r = kirby()->roots()->cache().'/bnomei/thumbimageoptim';
$cachefiles = \Kirby\Toolkit\Dir::files($r);
foreach($cachefiles as $file) {
$md5 = basename($file, '.cache');
if($job = kirby()->cache('bnomei.thumbimageoptim')->get($md5)) {
if (is_array($job) && array_key_exists('dst', $job)) {
$dst = $job['dst'];
if (file_exists($dst)) {
if (unlink($dst)) {
static::pop($dst);
}
} else {
static::pop($dst);
}
}
}
}
}

private static function log(string $msg = '', string $level = 'info', array $context = []):bool
{
$log = option('bnomei.thumbimageoptim.log');
Expand All @@ -28,45 +62,19 @@ private static function log(string $msg = '', string $level = 'info', array $con
return false;
}

private static $kirbyThumbsComponent = null;
public static function beforeRegisterComponent()
{
if (!static::$kirbyThumbsComponent) {
static::log('beforeRegisterComponent', 'debug');
static::$kirbyThumbsComponent = kirby()->component('thumb');
}
}


public static function kirbyThumb($src, $dst, $options)
{
if (static::$kirbyThumbsComponent && \is_callable(static::$kirbyThumbsComponent)) {
return static::$kirbyThumbsComponent($src, $dst, $options);
}
return null;
// https://github.com/getkirby/kirby/blob/master/config/components.php#L85
$darkroom = \Kirby\Image\Darkroom::factory(option('thumbs.driver', 'gd'), option('thumbs', []));
$options = $darkroom->preprocess($src, $options);
$root = (new \Kirby\Cms\Filename($src, $dst, $options))->toString();
\Kirby\Toolkit\F::copy($src, $root);
$darkroom->process($root, $options);
return $root;
}

public static function thumb($src, $dst, $options)
{
// $root = (new \Kirby\Cms\Filename($src, $dst, $options))->toString();
if (\file_exists($dst) == true && \filemtime($dst) >= \filemtime($src)) {
static::log('exists', 'debug', [
'src' => $src,
'src-filemtime' => date('c', \filemtime($src)),
'dst' => $dst,
'dst-filemtime' => date('c', \filemtime($dst)),
]);
return $dst;
} else {
\Kirby\Toolkit\F::copy($src, $dst);
static::log('copy', 'debug', [
'src' => $src,
'src-filemtime' => date('c', \filemtime($src)),
'dst' => $dst,
'dst-filemtime' => date('c', \filemtime($dst)),
]);
}

$api = static::instance();
if (!option('bnomei.thumbimageoptim.optimize') || !$api) {
static::log('kirbyThumb:early', 'debug', [
Expand All @@ -81,6 +89,8 @@ public static function thumb($src, $dst, $options)
$defaults = option('bnomei.thumbimageoptim.defaults');
$settings = array_merge($options, $defaults);

static::push($dst, date('c'));

try {
// https://github.com/ImageOptim/php-imageoptim-api
$request = null;
Expand All @@ -94,7 +104,6 @@ public static function thumb($src, $dst, $options)
]);
} else {
// request download

$path = explode('/', ltrim(str_replace(kirby()->roots()->content(), '', \dirname($src)), '/'));
$pathO = array_map(function ($v) {
// https://github.com/bnomei/kirby3-thumb-imageoptim/issues/2
Expand All @@ -108,41 +117,46 @@ public static function thumb($src, $dst, $options)
$pathO = implode('/', $pathO);

$page = page($pathO);
\Kirby\Toolkit\F::copy($src, $dst); // or url will not work

if ($img = $page->image(\pathinfo($src, PATHINFO_BASENAME))) {
$url = $img->url();
$request = $api->imageFromURL($url);

static::log('imageFromURL', 'debug', [
'src' => $src,
'dst' => $dst,
'dst-url' => $url,
'options' => $options,
]);
if (option('bnomei.thumbimageoptim.log.enabled')) {
static::log('imageFromURL', 'debug', [
'src' => $src,
'dst' => $dst,
'dst-url' => $url,
'options' => $options,
]);
}
} else {
static::log('Image not found at Page-object', 'warning', [
'src' => $src,
'dst' => $dst,
'pathO' => $pathO,
'file' => \pathinfo($src, PATHINFO_BASENAME),
'options' => $options,
]);
if (option('bnomei.thumbimageoptim.log.enabled')) {
static::log('Image not found at Page-object', 'warning', [
'src' => $src,
'dst' => $dst,
'pathO' => $pathO,
'file' => \pathinfo($src, PATHINFO_BASENAME),
'options' => $options,
]);
}
}
}
if ($request) {
$request = $request->resize(
$settings['width'],
$settings['height'],
$settings['crop'] == 1 ? 'crop' : 'scale-down'
)->quality(
$settings['io_quality']
)
->dpr(intval($settings['io_dpr']));
$settings['width'],
$settings['height'],
$settings['crop'] == 1 ? 'crop' : 'scale-down'
)->quality(
$settings['io_quality']
)
->dpr(intval($settings['io_dpr']));

if ($tl = option('bnomei.thumbimageoptim.timelimit')) {
set_time_limit(intval($tl));
}

$bytes = null;
// https://github.com/bnomei/kirby3-thumb-imageoptim/issues/4
if (static::is_localhost() || option('bnomei.thumbimageoptim.forceupload')) {
Expand All @@ -151,12 +165,15 @@ public static function thumb($src, $dst, $options)
static::log('Image URL', 'debug', [
'url' => $request->apiURL()
]);

// https://github.com/ImageOptim/php-imageoptim-api#apiurl--debug-or-use-another-https-client
$bytes = \Kirby\Http\Remote::get($request->apiURL(), ['method' => 'POST'])->content();
}

$success = $bytes ? \Kirby\Toolkit\F::write($dst, $bytes) : false;
if ($success) {
static::pop($dst);
}
}
} catch (Exception $ex) {
static::log($ex->getMessage(), 'error', [
Expand All @@ -170,13 +187,7 @@ public static function thumb($src, $dst, $options)
if ($success) {
return $dst;
}
// else
static::log('kirbyThumb:late', 'debug', [
'src' => $src,
'dst' => $dst,
'options' => $options,
]);
return static::kirbyThumb($src, $dst, $options);
return null;
}

private static function is_localhost()
Expand Down
9 changes: 2 additions & 7 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "bnomei/kirby3-thumb-imageoptim",
"description": "Kirby 3 Thumb Driver using Imageoptim",
"type": "plugin",
"version": "1.1.7",
"version": "1.2.0",
"license": "MIT",
"authors": [
{
Expand Down Expand Up @@ -33,12 +33,6 @@
"optimize-autoloader": true,
"sort-packages": true
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/k-next/kirby"
}
],
"require": {
"php": ">=7.1.0",
"getkirby/cms": "^3.0.0-RC-2.0",
Expand All @@ -49,6 +43,7 @@
},
"scripts": {
"zip": [
"touch kirby3-thumb-imageoptim.zip",
"rm kirby3-thumb-imageoptim.zip",
"composer install --no-dev",
"composer remove getkirby/cms",
Expand Down
15 changes: 8 additions & 7 deletions config.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
<?php

if(!class_exists('Bnomei\Imageoptim')) {
require_once __DIR__ . '/classes/imageoptim.php';
Bnomei\Imageoptim::beforeRegisterComponent();
}

Kirby::plugin('bnomei/thumbimageoptim', [
'options' => [
'optimize' => true,
Expand All @@ -23,10 +18,16 @@
}
return false;
},
'cache' => true,
],
'components' => [
'thumb' => function ($kirby, $src, $dst, $options) {
return \Bnomei\Imageoptim::thumb($src, $dst, $options);
return \Bnomei\Imageoptim::thumb($src, $dst, $options);
}
]
],
'hooks' => [
'route:before' => function () {
\Bnomei\Imageoptim::removeFilesOfUnfinishedJobs();
},
],
]);
2 changes: 1 addition & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ This plugin is free but if you use it in a commercial project please consider to
## Installation

- for devkit-setup use `composer require bnomei/kirby3-thumb-imageoptim` or
- extract latest release of [kirby3-thumb-imageoptim.zip](https://github.com/bnomei/kirby3-thumb-imageoptim/releases/download/v1.1.7/kirby3-thumb-imageoptim.zip) as folder `site/plugins/kirby3-thumb-imageoptim`
- extract latest release of [kirby3-thumb-imageoptim.zip](https://github.com/bnomei/kirby3-thumb-imageoptim/releases/download/v1.2.0/kirby3-thumb-imageoptim.zip) as folder `site/plugins/kirby3-thumb-imageoptim`

> Installation as a gitsubmodule is *not* supported.
Expand Down

0 comments on commit f64aad8

Please sign in to comment.