added media status and retry loading thumbnails

This commit is contained in:
2024-04-28 17:25:10 +10:00
parent a5be12aee3
commit a2def6abc0
4 changed files with 67 additions and 1 deletions

View File

@@ -109,5 +109,8 @@ class GenerateVariants implements ShouldQueue
$media->addVariant($variantName, 'image/webp', 'webp', $variantFile); $media->addVariant($variantName, 'image/webp', 'webp', $variantFile);
}//end foreach }//end foreach
} }
$media->status = 'ready';
$media->save();
} }
} }

View File

@@ -25,6 +25,7 @@ class Media extends Model
'user_id', 'user_id',
'hash', 'hash',
'password', 'password',
'status'
]; ];
/** /**
@@ -206,6 +207,8 @@ class Media extends Model
*/ */
public function generateVariants(bool $overwrite = true): void public function generateVariants(bool $overwrite = true): void
{ {
$this->status = 'processing';
$this->save();
dispatch(new GenerateVariants($this, $overwrite))->onQueue('media'); dispatch(new GenerateVariants($this, $overwrite))->onQueue('media');
} }

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('media', function (Blueprint $table) {
$table->string('status')->default('ready');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('media', function (Blueprint $table) {
$table->dropColumn('status');
});
}
};

View File

@@ -84,7 +84,17 @@ const SMMediaPicker = {
Alpine.store('media').items = response.data.data; Alpine.store('media').items = response.data.data;
Alpine.store('media').pagination = []; Alpine.store('media').pagination = [];
console.log(response.data.links);
response.data.data.forEach((file) => {
console.log(file.name, file.status);
if(file.status === 'processing') {
const fileName = file.name;
setTimeout(() => {
SMMediaPicker.updateThumbnail(fileName);
}, 5000);
}
});
Alpine.nextTick(() => { Alpine.nextTick(() => {
Alpine.store('media').pagination = response.data.links; Alpine.store('media').pagination = response.data.links;
}).then(r => { }).then(r => {
@@ -258,6 +268,28 @@ const SMMediaPicker = {
} }
}) })
}, },
updateThumbnail: (name) => {
axios.get('/media/' + name)
.then(response => {
console.log(response.data.name, response.data.status);
const item = Alpine.store('media').items.find(i => i.name === name);
if(item) {
if(response.data.status === 'ready') {
item.thumbnail = response.data.thumbnail;
item.status = response.data.status;
item.variants = response.data.variants;
} else if(response.data.status === 'processing') {
setTimeout(() => {
SMMediaPicker.updateThumbnail(name);
}, 5000);
}
}
})
.catch(error => {
console.error(error);
});
}
}; };
window.SMMediaPicker = SMMediaPicker; window.SMMediaPicker = SMMediaPicker;