MediaTransformer.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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->activityVerb()),
  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(config('media.hls.enabled') && $media->hls_transcoded_at != null && $media->hls_path) {
  29. $res['hls_manifest'] = url(Storage::url($media->hls_path));
  30. }
  31. if($media->width && $media->height) {
  32. $res['meta'] = [
  33. 'focus' => [
  34. 'x' => 0,
  35. 'y' => 0
  36. ],
  37. 'original' => [
  38. 'width' => $media->width,
  39. 'height' => $media->height,
  40. 'size' => "{$media->width}x{$media->height}",
  41. 'aspect' => $media->width / $media->height
  42. ]
  43. ];
  44. }
  45. return $res;
  46. }
  47. }