MediaTransformer.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. namespace App\Transformer\Api;
  3. use App\Media;
  4. use League\Fractal;
  5. use Storage;
  6. class MediaTransformer extends Fractal\TransformerAbstract
  7. {
  8. public function transform(Media $media)
  9. {
  10. $res = [
  11. 'id' => (string) $media->id,
  12. 'type' => strtolower($media->mediaType()),
  13. 'url' => $media->url(),
  14. 'remote_url' => null,
  15. 'preview_url' => $media->thumbnailUrl(),
  16. 'optimized_url' => $media->optimized_url,
  17. 'text_url' => null,
  18. 'meta' => null,
  19. 'description' => $media->caption,
  20. 'license' => $media->getLicense(),
  21. 'is_nsfw' => $media->is_nsfw,
  22. 'orientation' => $media->orientation,
  23. 'filter_name' => $media->filter_name,
  24. 'filter_class' => $media->version == 1 ? $media->filter_class : null,
  25. 'mime' => $media->mime,
  26. 'blurhash' => $media->blurhash ?? 'U4Rfzst8?bt7ogayj[j[~pfQ9Goe%Mj[WBay',
  27. ];
  28. if ((bool) config('media.hls.enabled')) {
  29. if ($media->hls_transcoded_at != null && $media->hls_path) {
  30. $res['hls_manifest'] = url(Storage::url($media->hls_path));
  31. }
  32. }
  33. if ($media->width && $media->height) {
  34. $res['meta'] = [
  35. 'focus' => [
  36. 'x' => 0,
  37. 'y' => 0,
  38. ],
  39. 'original' => [
  40. 'width' => $media->width,
  41. 'height' => $media->height,
  42. 'size' => "{$media->width}x{$media->height}",
  43. 'aspect' => $media->width / $media->height,
  44. ],
  45. ];
  46. }
  47. return $res;
  48. }
  49. }