From 16e725183e425cdcdb8997bd16e118412d906fc2 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Tue, 25 Jan 2022 02:08:50 -0700 Subject: [PATCH] Update ApiV1Controller, add custom_emoji endpoint --- app/Http/Controllers/AdminController.php | 3 +++ app/Http/Controllers/Api/ApiV1Controller.php | 3 ++- app/Services/CustomEmojiService.php | 26 +++++++++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index dae875e20..b54f26844 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -360,6 +360,7 @@ class AdminController extends Controller if($request->has('cc')) { Cache::forget('pf:admin:custom_emoji:stats'); + Cache::forget('pf:custom_emoji'); return redirect(route('admin.custom-emoji')); } @@ -463,6 +464,7 @@ class AdminController extends Controller $request->emoji->storeAs('public/emoji', $fileName); $emoji->media_path = 'emoji/' . $fileName; $emoji->save(); + Cache::forget('pf:custom_emoji'); return redirect(route('admin.custom-emoji')); } @@ -471,6 +473,7 @@ class AdminController extends Controller abort_unless(config('federation.custom_emoji.enabled'), 404); $emoji = CustomEmoji::findOrFail($id); Storage::delete("public/{$emoji->media_path}"); + Cache::forget('pf:custom_emoji'); $emoji->delete(); return redirect(route('admin.custom-emoji')); } diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index 987878970..e7415bebe 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -77,6 +77,7 @@ use App\Util\Localization\Localization; use App\Util\Media\License; use App\Jobs\MediaPipeline\MediaSyncLicensePipeline; use App\Services\DiscoverService; +use App\Services\CustomEmojiService; class ApiV1Controller extends Controller { @@ -920,7 +921,7 @@ class ApiV1Controller extends Controller */ public function customEmojis() { - return response()->json([]); + return response(CustomEmojiService::all())->header('Content-Type', 'application/json'); } /** diff --git a/app/Services/CustomEmojiService.php b/app/Services/CustomEmojiService.php index 755415619..72615884b 100644 --- a/app/Services/CustomEmojiService.php +++ b/app/Services/CustomEmojiService.php @@ -71,8 +71,8 @@ class CustomEmojiService $emoji->save(); $name = str_replace(':', '', $json['name']); + Cache::forget('pf:custom_emoji'); Cache::forget('pf:custom_emoji:' . $name); - if($id) { StatusService::del($id); } @@ -104,4 +104,28 @@ class CustomEmojiService return true; } + + public static function all() + { + return Cache::rememberForever('pf:custom_emoji', function() { + $pgsql = config('database.default') === 'pgsql'; + return CustomEmoji::when(!$pgsql, function($q, $pgsql) { + return $q->groupBy('shortcode'); + }) + ->get() + ->map(function($emojo) { + $url = url('storage/' . $emojo->media_path); + return [ + 'shortcode' => str_replace(':', '', $emojo->shortcode), + 'url' => $url, + 'static_path' => $url, + 'visible_in_picker' => $emojo->disabled == false + ]; + }) + ->when($pgsql, function($collection) { + return $collection->unique('shortcode'); + }) + ->toJson(JSON_UNESCAPED_SLASHES); + }); + } }