set_status( $is_reoptimize ? Image_Status::REOPTIMIZING_IN_PROGRESS : Image_Status::OPTIMIZATION_IN_PROGRESS ) ->save(); Async_Operation::create( $is_reoptimize ? Async_Operation_Hook::REOPTIMIZE_SINGLE : Async_Operation_Hook::OPTIMIZE_SINGLE, [ 'attachment_id' => $image_id ], Async_Operation_Queue::OPTIMIZE ); } catch ( Throwable $t ) { $meta ->set_status( $is_reoptimize ? Image_Status::REOPTIMIZING_FAILED : Image_Status::OPTIMIZATION_FAILED ) ->save(); throw $t; } } /** * @throws Async_Operation_Exception */ private static function is_optimization_in_progress( int $image_id ): bool { $query = ( new Image_Optimization_Operation_Query() ) ->set_status( [ Async_Operation::OPERATION_STATUS_PENDING, Async_Operation::OPERATION_STATUS_RUNNING ] ) ->set_image_id( $image_id ) ->return_ids(); $operations = Async_Operation::get( $query ); return count( $operations ) > 0; } }