media_item_cache = Media_Item_Cache::get_instance(); $this->global_stats = Global_Stats::get(); $this->logger = Helper::logger(); $this->register_filter( 'wp_smush_scan_library_slice_handle_attachment', array( $this, 'maybe_update_animated_status_during_scan', ), 10, 2 ); $this->register_action( 'wp_smush_after_attachment_upload', array( $this, 'maybe_update_animated_status_on_upload', ) ); $this->register_action( 'wp_smush_before_smush_file', array( $this, 'maybe_update_animated_status_before_optimization', ) ); } public function maybe_update_animated_status_during_scan( $slice_data, $attachment_id ) { $this->maybe_update_animated_status( $attachment_id ); return $slice_data; } public function maybe_update_animated_status_on_upload( $attachment_id ) { $this->maybe_update_animated_status( $attachment_id ); } /** * TODO: add test * * @param $attachment_id * * @return void */ public function maybe_update_animated_status_before_optimization( $attachment_id ) { $this->maybe_update_animated_status( $attachment_id ); } private function maybe_update_animated_status( $attachment_id ) { $media_item = $this->media_item_cache->get( $attachment_id ); if ( ! $media_item->is_valid() ) { $this->logger->error( 'Tried to check animated value but encountered an problem with the media item' ); return; } if ( apply_filters( 'wp_smush_skip_image_animation_check', false, $attachment_id ) ) { // The image is explicitly excluded from the animation check return; } if ( $media_item->animated_meta_exists() ) { // We already marked this item, no need to check again. return; } if ( ! $media_item->has_animated_mime_type() ) { // The media item is not even a GIF so no need to check. return; } $file_path = $media_item->get_full_or_scaled_size()->get_file_path(); $is_animated = Helper::check_animated_file_contents( $file_path ); $this->logger->log( 'Setting animated meta value' ); $set_animated = $media_item->set_animated( $is_animated ); if ( $set_animated ) { $media_item->save(); } if ( $is_animated ) { do_action( 'wp_smush_attachment_animated_status_changed', $attachment_id ); } } }