MediaService.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace App\Services;
  3. use Cache;
  4. use Illuminate\Support\Facades\Redis;
  5. use App\Media;
  6. use App\Status;
  7. use League\Fractal;
  8. use League\Fractal\Serializer\ArraySerializer;
  9. use League\Fractal\Pagination\IlluminatePaginatorAdapter;
  10. use App\Transformer\Api\MediaTransformer;
  11. use App\Util\Media\License;
  12. class MediaService
  13. {
  14. const CACHE_KEY = 'status:transformer:media:attachments:';
  15. public static function get($statusId)
  16. {
  17. $status = Status::find($statusId);
  18. if(!$status) {
  19. return [];
  20. }
  21. $ttl = $status->created_at->lt(now()->subMinutes(30)) ? 129600 : 30;
  22. return Cache::remember(self::CACHE_KEY.$statusId, $ttl, function() use($status) {
  23. if(!$status) {
  24. return [];
  25. }
  26. if(in_array($status->type, ['group:post', 'photo', 'video', 'video:album', 'photo:album', 'loop', 'photo:video:album'])) {
  27. $media = Media::whereStatusId($status->id)->orderBy('order')->get();
  28. $fractal = new Fractal\Manager();
  29. $fractal->setSerializer(new ArraySerializer());
  30. $resource = new Fractal\Resource\Collection($media, new MediaTransformer());
  31. return $fractal->createData($resource)->toArray();
  32. }
  33. return [];
  34. });
  35. }
  36. public static function del($statusId)
  37. {
  38. return Cache::forget(self::CACHE_KEY . $statusId);
  39. }
  40. public static function activitypub($statusId)
  41. {
  42. $status = self::get($statusId);
  43. if(!$status) {
  44. return [];
  45. }
  46. return collect($status)->map(function($s) {
  47. $license = isset($s['license']) && $s['license']['title'] ? $s['license']['title'] : null;
  48. return [
  49. 'type' => 'Document',
  50. 'mediaType' => $s['mime'],
  51. 'url' => $s['url'],
  52. 'name' => $s['description'],
  53. 'blurhash' => $s['blurhash'],
  54. 'license' => $license
  55. ];
  56. });
  57. }
  58. }