diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index 4e13fb312..03b2fa3a1 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -3248,7 +3248,8 @@ class ApiV1Controller extends Controller 'page' => 'nullable|integer|max:40', 'min_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX, 'max_id' => 'nullable|integer|min:0|max:' . PHP_INT_MAX, - 'limit' => 'nullable|integer|max:100' + 'limit' => 'nullable|integer|max:100', + 'only_media' => 'sometimes|boolean' ]); if(config('database.default') === 'pgsql') { @@ -3272,6 +3273,7 @@ class ApiV1Controller extends Controller $min = $request->input('min_id'); $max = $request->input('max_id'); $limit = $request->input('limit', 20); + $onlyMedia = $request->input('only_media', true); if($min || $max) { $minMax = SnowflakeService::byDate(now()->subMonths(6)); @@ -3300,7 +3302,13 @@ class ApiV1Controller extends Controller ->map(function ($i) { return StatusService::getMastodon($i); }) - ->filter(function($i) { + ->filter(function($i) use($onlyMedia) { + if(!$i) { + return false; + } + if($onlyMedia && !isset($i['media_attachments']) || !count($i['media_attachments'])) { + return false; + } return $i && isset($i['account']); }) ->values() @@ -3873,6 +3881,12 @@ class ApiV1Controller extends Controller abort_if(!$tag, 422, 'Unknown hashtag'); + abort_if( + HashtagFollow::whereProfileId($pid)->count() >= HashtagFollow::MAX_LIMIT, + 422, + 'You cannot follow more than ' . HashtagFollow::MAX_LIMIT . ' hashtags.' + ); + $follows = HashtagFollow::updateOrCreate( [ 'profile_id' => $account['id'], @@ -3949,7 +3963,6 @@ class ApiV1Controller extends Controller } $pid = $request->user()->profile_id; $account = AccountService::get($pid); - $operator = config('database.default') == 'pgsql' ? 'ilike' : 'like'; $tag = Hashtag::where('name', $operator, $id) ->orWhere('slug', $operator, $id)