mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-22 14:31:26 +00:00
commit
5fc83beb2c
12 changed files with 114 additions and 18 deletions
|
@ -79,6 +79,7 @@
|
||||||
- Updated RemoteAvatarFetch job, fixed bug preventing new avatars from being stored. ([92bc2845](https://github.com/pixelfed/pixelfed/commit/92bc2845))
|
- Updated RemoteAvatarFetch job, fixed bug preventing new avatars from being stored. ([92bc2845](https://github.com/pixelfed/pixelfed/commit/92bc2845))
|
||||||
- Updated AccountService, fix json casting. ([e5f8f344](https://github.com/pixelfed/pixelfed/commit/e5f8f344))
|
- Updated AccountService, fix json casting. ([e5f8f344](https://github.com/pixelfed/pixelfed/commit/e5f8f344))
|
||||||
- Updated ApiV1Controller, fix illegal operator bug by setting default min_id. ([415826f2](https://github.com/pixelfed/pixelfed/commit/415826f2))
|
- Updated ApiV1Controller, fix illegal operator bug by setting default min_id. ([415826f2](https://github.com/pixelfed/pixelfed/commit/415826f2))
|
||||||
|
- Updated StatusService, add getMastodon method for mastoapi compatibility. ([36a129fe](https://github.com/pixelfed/pixelfed/commit/36a129fe))
|
||||||
- ([](https://github.com/pixelfed/pixelfed/commit/))
|
- ([](https://github.com/pixelfed/pixelfed/commit/))
|
||||||
|
|
||||||
## [v0.11.1 (2021-09-07)](https://github.com/pixelfed/pixelfed/compare/v0.11.0...v0.11.1)
|
## [v0.11.1 (2021-09-07)](https://github.com/pixelfed/pixelfed/compare/v0.11.0...v0.11.1)
|
||||||
|
|
|
@ -89,6 +89,26 @@ class PublicApiController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getStatus(Request $request, $id)
|
||||||
|
{
|
||||||
|
abort_if(!$request->user(), 403);
|
||||||
|
$status = StatusService::get($id, false);
|
||||||
|
abort_if(!$status, 404);
|
||||||
|
if(in_array($status['visibility'], ['public', 'unlisted'])) {
|
||||||
|
return $status;
|
||||||
|
}
|
||||||
|
$pid = $request->user()->profile_id;
|
||||||
|
if($status['account']['id'] == $pid) {
|
||||||
|
return $status;
|
||||||
|
}
|
||||||
|
if($status['visibility'] == 'private') {
|
||||||
|
if(FollowerService::follows($pid, $status['account']['id'])) {
|
||||||
|
return $status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
abort(404);
|
||||||
|
}
|
||||||
|
|
||||||
public function status(Request $request, $username, int $postid)
|
public function status(Request $request, $username, int $postid)
|
||||||
{
|
{
|
||||||
$profile = Profile::whereUsername($username)->whereNull('status')->firstOrFail();
|
$profile = Profile::whereUsername($username)->whereNull('status')->firstOrFail();
|
||||||
|
|
|
@ -21,7 +21,8 @@ class Profile extends Model
|
||||||
|
|
||||||
protected $dates = [
|
protected $dates = [
|
||||||
'deleted_at',
|
'deleted_at',
|
||||||
'last_fetched_at'
|
'last_fetched_at',
|
||||||
|
'last_status_at'
|
||||||
];
|
];
|
||||||
protected $hidden = ['private_key'];
|
protected $hidden = ['private_key'];
|
||||||
protected $visible = ['id', 'user_id', 'username', 'name'];
|
protected $visible = ['id', 'user_id', 'username', 'name'];
|
||||||
|
|
|
@ -6,7 +6,6 @@ use Illuminate\Support\Facades\Cache;
|
||||||
use Illuminate\Support\Facades\Redis;
|
use Illuminate\Support\Facades\Redis;
|
||||||
use DB;
|
use DB;
|
||||||
use App\Status;
|
use App\Status;
|
||||||
//use App\Transformer\Api\v3\StatusTransformer;
|
|
||||||
use App\Transformer\Api\StatusStatelessTransformer;
|
use App\Transformer\Api\StatusStatelessTransformer;
|
||||||
use App\Transformer\Api\StatusTransformer;
|
use App\Transformer\Api\StatusTransformer;
|
||||||
use League\Fractal;
|
use League\Fractal;
|
||||||
|
@ -41,6 +40,49 @@ class StatusService
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getMastodon($id, $publicOnly = true)
|
||||||
|
{
|
||||||
|
$status = self::get($id, $publicOnly);
|
||||||
|
if(!$status) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$status['replies_count'] = $status['reply_count'];
|
||||||
|
unset(
|
||||||
|
$status['_v'],
|
||||||
|
$status['comments_disabled'],
|
||||||
|
$status['content_text'],
|
||||||
|
$status['gid'],
|
||||||
|
$status['label'],
|
||||||
|
$status['liked_by'],
|
||||||
|
$status['local'],
|
||||||
|
$status['parent'],
|
||||||
|
$status['pf_type'],
|
||||||
|
$status['place'],
|
||||||
|
$status['replies'],
|
||||||
|
$status['reply_count'],
|
||||||
|
$status['shortcode'],
|
||||||
|
$status['taggedPeople'],
|
||||||
|
$status['thread'],
|
||||||
|
$status['account']['header_bg'],
|
||||||
|
$status['account']['is_admin'],
|
||||||
|
$status['account']['last_fetched_at'],
|
||||||
|
$status['account']['local'],
|
||||||
|
$status['account']['location'],
|
||||||
|
$status['account']['note_text'],
|
||||||
|
$status['account']['pronouns'],
|
||||||
|
$status['account']['website'],
|
||||||
|
);
|
||||||
|
$status['account']['avatar_static'] = $status['account']['avatar'];
|
||||||
|
$status['account']['bot'] = false;
|
||||||
|
$status['account']['emojis'] = [];
|
||||||
|
$status['account']['fields'] = [];
|
||||||
|
$status['account']['header'] = url('/storage/headers/missing.png');
|
||||||
|
$status['account']['header_static'] = url('/storage/headers/missing.png');
|
||||||
|
$status['account']['last_status_at'] = null;
|
||||||
|
|
||||||
|
return $status;
|
||||||
|
}
|
||||||
|
|
||||||
public static function getState($id, $pid)
|
public static function getState($id, $pid)
|
||||||
{
|
{
|
||||||
$status = self::get($id, false);
|
$status = self::get($id, false);
|
||||||
|
|
|
@ -11,7 +11,6 @@ class AccountTransformer extends Fractal\TransformerAbstract
|
||||||
public function transform(Profile $profile)
|
public function transform(Profile $profile)
|
||||||
{
|
{
|
||||||
$local = $profile->domain == null;
|
$local = $profile->domain == null;
|
||||||
$is_admin = !$local ? false : $profile->user->is_admin;
|
|
||||||
$username = $local ? $profile->username : explode('@', substr($profile->username, 1))[0];
|
$username = $local ? $profile->username : explode('@', substr($profile->username, 1))[0];
|
||||||
return [
|
return [
|
||||||
'id' => (string) $profile->id,
|
'id' => (string) $profile->id,
|
||||||
|
@ -19,22 +18,21 @@ class AccountTransformer extends Fractal\TransformerAbstract
|
||||||
'acct' => $username,
|
'acct' => $username,
|
||||||
'display_name' => $profile->name,
|
'display_name' => $profile->name,
|
||||||
'locked' => (bool) $profile->is_private,
|
'locked' => (bool) $profile->is_private,
|
||||||
|
'bot' => false,
|
||||||
'created_at' => $profile->created_at->toJSON(),
|
'created_at' => $profile->created_at->toJSON(),
|
||||||
'followers_count' => $profile->followerCount(),
|
|
||||||
'following_count' => $profile->followingCount(),
|
|
||||||
'statuses_count' => (int) $profile->statusCount(),
|
|
||||||
'note' => $profile->bio ?? '',
|
'note' => $profile->bio ?? '',
|
||||||
'url' => $profile->url(),
|
'url' => $profile->url(),
|
||||||
'avatar' => $profile->avatarUrl(),
|
'avatar' => $profile->avatarUrl(),
|
||||||
'avatar_static' => $profile->avatarUrl(),
|
'avatar_static' => $profile->avatarUrl(),
|
||||||
'header' => '',
|
'header' => '',
|
||||||
'header_static' => '',
|
'header_static' => '',
|
||||||
|
'followers_count' => (int) $profile->followerCount(),
|
||||||
|
'following_count' => (int) $profile->followingCount(),
|
||||||
|
'statuses_count' => (int) $profile->statusCount(),
|
||||||
|
'last_status_at' => optional($profile->last_status_at)->toJSON(),
|
||||||
'emojis' => [],
|
'emojis' => [],
|
||||||
'moved' => null,
|
'moved' => null,
|
||||||
'fields' => null,
|
'fields' => [],
|
||||||
'bot' => false,
|
|
||||||
'software' => 'pixelfed',
|
|
||||||
'is_admin' => (bool) $is_admin,
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,10 +13,9 @@ class MediaTransformer extends Fractal\TransformerAbstract
|
||||||
'id' => (string) $media->id,
|
'id' => (string) $media->id,
|
||||||
'type' => lcfirst($media->activityVerb()),
|
'type' => lcfirst($media->activityVerb()),
|
||||||
'url' => $media->url(),
|
'url' => $media->url(),
|
||||||
'remote_url' => null,
|
|
||||||
'preview_url' => $media->thumbnailUrl(),
|
'preview_url' => $media->thumbnailUrl(),
|
||||||
'text_url' => null,
|
'remote_url' => $media->remote_url,
|
||||||
'meta' => null,
|
'text_url' => $media->url(),
|
||||||
'description' => $media->caption,
|
'description' => $media->caption,
|
||||||
'blurhash' => $media->blurhash ?? 'U4Rfzst8?bt7ogayj[j[~pfQ9Goe%Mj[WBay'
|
'blurhash' => $media->blurhash ?? 'U4Rfzst8?bt7ogayj[j[~pfQ9Goe%Mj[WBay'
|
||||||
];
|
];
|
||||||
|
|
|
@ -9,11 +9,13 @@ class MentionTransformer extends Fractal\TransformerAbstract
|
||||||
{
|
{
|
||||||
public function transform(Profile $profile)
|
public function transform(Profile $profile)
|
||||||
{
|
{
|
||||||
|
$local = $profile->domain == null;
|
||||||
|
$username = $local ? $profile->username : explode('@', substr($profile->username, 1))[0];
|
||||||
return [
|
return [
|
||||||
'id' => (string) $profile->id,
|
'id' => (string) $profile->id,
|
||||||
'url' => $profile->url(),
|
'url' => $profile->url(),
|
||||||
'username' => $profile->username,
|
'username' => $profile->username,
|
||||||
'acct' => $profile->username,
|
'acct' => $username,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,14 +17,14 @@ class StatusTransformer extends Fractal\TransformerAbstract
|
||||||
'id' => (string) $status->id,
|
'id' => (string) $status->id,
|
||||||
'created_at' => $status->created_at->toJSON(),
|
'created_at' => $status->created_at->toJSON(),
|
||||||
'in_reply_to_id' => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null,
|
'in_reply_to_id' => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null,
|
||||||
'in_reply_to_account_id' => $status->in_reply_to_profile_id,
|
'in_reply_to_account_id' => $status->in_reply_to_profile_id ? (string) $status->in_reply_to_profile_id : null,
|
||||||
'sensitive' => (bool) $status->is_nsfw,
|
'sensitive' => (bool) $status->is_nsfw,
|
||||||
'spoiler_text' => $status->cw_summary ?? '',
|
'spoiler_text' => $status->cw_summary ?? '',
|
||||||
'visibility' => $status->visibility ?? $status->scope,
|
'visibility' => $status->visibility ?? $status->scope,
|
||||||
'language' => 'en',
|
'language' => 'en',
|
||||||
'uri' => $status->url(),
|
'uri' => $status->permalink(''),
|
||||||
'url' => $status->url(),
|
'url' => $status->url(),
|
||||||
'replies_count' => 0,
|
'replies_count' => $status->reply_count ?? 0,
|
||||||
'reblogs_count' => $status->reblogs_count ?? 0,
|
'reblogs_count' => $status->reblogs_count ?? 0,
|
||||||
'favourites_count' => $status->likes_count ?? 0,
|
'favourites_count' => $status->likes_count ?? 0,
|
||||||
'reblogged' => $status->shared(),
|
'reblogged' => $status->shared(),
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AddLastStatusAtToProfilesTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('profiles', function (Blueprint $table) {
|
||||||
|
$table->timestamp('last_status_at')->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('profiles', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('last_status_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
BIN
public/js/spa.js
vendored
BIN
public/js/spa.js
vendored
Binary file not shown.
Binary file not shown.
|
@ -163,6 +163,7 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
|
||||||
Route::get('accounts/{id}/followers', 'PublicApiController@accountFollowers');
|
Route::get('accounts/{id}/followers', 'PublicApiController@accountFollowers');
|
||||||
Route::post('accounts/{id}/block', 'Api\ApiV1Controller@accountBlockById');
|
Route::post('accounts/{id}/block', 'Api\ApiV1Controller@accountBlockById');
|
||||||
Route::post('accounts/{id}/unblock', 'Api\ApiV1Controller@accountUnblockById');
|
Route::post('accounts/{id}/unblock', 'Api\ApiV1Controller@accountUnblockById');
|
||||||
|
Route::get('statuses/{id}', 'PublicApiController@getStatus');
|
||||||
Route::get('accounts/{id}', 'PublicApiController@account');
|
Route::get('accounts/{id}', 'PublicApiController@account');
|
||||||
Route::post('avatar/update', 'ApiController@avatarUpdate');
|
Route::post('avatar/update', 'ApiController@avatarUpdate');
|
||||||
Route::get('custom_emojis', 'Api\ApiV1Controller@customEmojis');
|
Route::get('custom_emojis', 'Api\ApiV1Controller@customEmojis');
|
||||||
|
|
Loading…
Reference in a new issue