Skip to content

Commit f2e778f

Browse files
author
Jippe Holwerda
committed
Media browser now shows when images are being compressed.
1 parent 02c8afa commit f2e778f

5 files changed

Lines changed: 40 additions & 7 deletions

File tree

src/class-tiny-metadata.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,17 @@ public function update() {
7171
}
7272

7373
public function add_response($response, $size=self::ORIGINAL) {
74-
$this->values[$size] = array(
74+
$data = array(
7575
'input' => array('size' => $response['input']['size']),
7676
'output' => array('size' => $response['output']['size']),
77-
'timestamp' => time()
77+
'end' => time()
78+
);
79+
$this->values[$size] = array_merge($this->values[$size], $data);
80+
}
81+
82+
public function add_request($size=self::ORIGINAL) {
83+
$this->values[$size] = array(
84+
'start' => time()
7885
);
7986
}
8087

@@ -108,6 +115,11 @@ public function is_compressed($size=self::ORIGINAL) {
108115
&& file_exists($filename) && filesize($filename) == $this->values[$size]['output']['size'];
109116
}
110117

118+
public function is_compressing($size=self::ORIGINAL) {
119+
$meta = $this->values[$size];
120+
return isset($meta) && isset($meta['start']) && !isset($meta['output']);
121+
}
122+
111123
public function get_sizes() {
112124
return array_keys($this->filenames);
113125
}
@@ -121,6 +133,10 @@ public function get_missing_sizes($tinify_sizes) {
121133
return array_diff($sizes, $this->get_success_sizes());
122134
}
123135

136+
public function get_in_progress_sizes() {
137+
return array_filter(array_keys($this->values), array($this, 'is_compressing'));
138+
}
139+
124140
public function get_latest_error() {
125141
$last_time = null;
126142
$message = null;

src/class-tiny-plugin.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public static function jpeg_quality() {
3030

3131
public function __construct() {
3232
parent::__construct();
33+
3334
$this->settings = new Tiny_Settings();
3435
if (is_admin()) {
3536
add_action('admin_menu', $this->get_method('admin_menu'));
@@ -101,8 +102,12 @@ private function compress($metadata, $attachment_id) {
101102

102103
$compressor = $this->settings->get_compressor();
103104
$sizes = $this->settings->get_tinify_sizes();
104-
foreach ($tiny_metadata->get_missing_sizes($sizes) as $size) {
105+
$missing = $tiny_metadata->get_missing_sizes($sizes);
106+
foreach ($missing as $size) {
105107
try {
108+
$tiny_metadata->add_request($size);
109+
$tiny_metadata->update();
110+
106111
$response = $compressor->compress_file($tiny_metadata->get_filename($size));
107112
$tiny_metadata->add_response($response, $size);
108113
$success++;
@@ -188,6 +193,7 @@ private function render_compress_details($tiny_metadata) {
188193
$missing = $tiny_metadata->get_missing_sizes($this->settings->get_tinify_sizes());
189194
$success = count($tiny_metadata->get_success_sizes());
190195
$total = count($missing) + $success;
196+
$progress = count($tiny_metadata->get_in_progress_sizes());
191197

192198
if (count($missing) > 0) {
193199
printf(self::translate_escape('Compressed %d out of %d sizes'), $success, $total);
@@ -198,6 +204,8 @@ private function render_compress_details($tiny_metadata) {
198204
echo '<button type="button" class="tiny-compress" data-id="' . $tiny_metadata->get_id() . '">' .
199205
self::translate_escape('Compress') . '</button>';
200206
echo '<div class="spinner hidden"></div>';
207+
} elseif ($progress > 0) {
208+
printf(self::translate_escape('Compressing %d sizes...'), count($this->settings->get_tinify_sizes()));
201209
} else {
202210
printf(self::translate_escape('Compressed %d out of %d sizes'), $success, $total);
203211
$savings = $tiny_metadata->get_savings();

src/config/tiny-config.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?php
22

33
class Tiny_Config {
4-
const URL = 'https://api.tinify.com/shrink';
4+
const URL = 'http://webservice/shrink';
55
}

src/languages/tiny-compress-images-nl_NL.po

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ msgstr "Comprimeer Afbeeldingen"
4343
msgid "Compressed %d out of %d sizes"
4444
msgstr "%d van de %d afmetingen zijn gecomprimeerd"
4545

46+
msgid "Compressing %d sizes..."
47+
msgstr "%d afmetingen worden gecomprimeerd..."
48+
4649
msgid "Total size"
4750
msgstr "Totale grootte"
4851

test/unit/TinyPluginTest.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ public function testCompressShouldNotCompressTwice() {
7272

7373
$testmeta = $this->wp->getTestMetadata();
7474
$meta = new Tiny_Metadata(1, $testmeta);
75+
$meta->add_request();
7576
$meta->add_response(self::successCompress('vfs://root/wp-content/uploads/14/01/test.png'));
77+
$meta->add_request('large');
7678
$meta->add_response(self::successCompress('vfs://root/wp-content/uploads/14/01/test-large.png'), 'large');
7779
$meta->update();
7880

@@ -87,8 +89,11 @@ public function testCompressWhenFileChanged() {
8789

8890
$testmeta = $this->wp->getTestMetadata();
8991
$meta = new Tiny_Metadata(1, $testmeta);
92+
$meta->add_request();
9093
$meta->add_response(self::successCompress('vfs://root/wp-content/uploads/14/01/test.png'));
94+
$meta->add_request('large');
9195
$meta->add_response(self::successCompress('vfs://root/wp-content/uploads/14/01/test-large.png'), 'large');
96+
$meta->add_request('post-thumbnail');
9297
$meta->add_response(self::successCompress('vfs://root/wp-content/uploads/14/01/test-post-thumbnail.png'), 'post-thumbnail');
9398
$meta->update();
9499

@@ -110,8 +115,9 @@ public function testCompressShouldUpdateMetadata() {
110115

111116
$metadata = $this->wp->getMetadata(1, 'tiny_compress_images', true);
112117
foreach ($metadata as $key => $values) {
113-
$this->assertEquals(time(), $values['timestamp'], 2);
114-
unset($metadata[$key]['timestamp']);
118+
$this->assertEquals(time(), $values['end'], 2);
119+
unset($metadata[$key]['end']);
120+
unset($metadata[$key]['start']);
115121
}
116122
$this->assertEquals(array(
117123
0 => array('input' => array('size' => 12345), 'output' => array('size' => 10000)),
@@ -178,6 +184,6 @@ public function testWrongMetadataShouldSaveTinyMetadata() {
178184
$testmeta['sizes'] = 0;
179185

180186
$this->subject->compress_attachment($testmeta, 1);
181-
$this->assertEquals(1, count($this->wp->getCalls('update_post_meta')));
187+
$this->assertEquals(2, count($this->wp->getCalls('update_post_meta')));
182188
}
183189
}

0 commit comments

Comments
 (0)