|
@@ -1,199 +0,0 @@
|
|
|
-<?php
|
|
|
-
|
|
|
-namespace App\Console\Commands;
|
|
|
-
|
|
|
-use Illuminate\Console\Command;
|
|
|
-use App\Avatar;
|
|
|
-use App\Profile;
|
|
|
-use App\Jobs\AvatarPipeline\RemoteAvatarFetch;
|
|
|
-use App\Util\ActivityPub\Helpers;
|
|
|
-use Illuminate\Support\Facades\DB;
|
|
|
-use Illuminate\Support\Str;
|
|
|
-
|
|
|
-class AvatarSync extends Command
|
|
|
-{
|
|
|
- /**
|
|
|
- * The name and signature of the console command.
|
|
|
- *
|
|
|
- * @var string
|
|
|
- */
|
|
|
- protected $signature = 'avatars:sync';
|
|
|
-
|
|
|
- /**
|
|
|
- * The console command description.
|
|
|
- *
|
|
|
- * @var string
|
|
|
- */
|
|
|
- protected $description = 'Perform actions on avatars';
|
|
|
-
|
|
|
- public $found = 0;
|
|
|
- public $notFetched = 0;
|
|
|
- public $fixed = 0;
|
|
|
-
|
|
|
- /**
|
|
|
- * Create a new command instance.
|
|
|
- *
|
|
|
- * @return void
|
|
|
- */
|
|
|
- public function __construct()
|
|
|
- {
|
|
|
- parent::__construct();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Execute the console command.
|
|
|
- *
|
|
|
- * @return int
|
|
|
- */
|
|
|
- public function handle()
|
|
|
- {
|
|
|
- $this->info('Welcome to the avatar sync manager');
|
|
|
- $this->line(' ');
|
|
|
- $this->line(' ');
|
|
|
- $this->error('This command is deprecated and will be removed in a future version');
|
|
|
- $this->error('You should use the following command instead: ');
|
|
|
- $this->line(' ');
|
|
|
- $this->info('php artisan avatar:storage');
|
|
|
- $this->line(' ');
|
|
|
-
|
|
|
- $confirm = $this->confirm('Are you sure you want to use this deprecated command even though it is no longer supported?');
|
|
|
- if(!$confirm) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- $actions = [
|
|
|
- 'Analyze',
|
|
|
- 'Full Analyze',
|
|
|
- 'Fetch - Fetch missing remote avatars',
|
|
|
- 'Fix - Fix remote accounts without avatar record',
|
|
|
- 'Sync - Store latest remote avatars',
|
|
|
- ];
|
|
|
-
|
|
|
- $name = $this->choice(
|
|
|
- 'Select an action',
|
|
|
- $actions,
|
|
|
- 0,
|
|
|
- 1,
|
|
|
- false
|
|
|
- );
|
|
|
-
|
|
|
- $this->info('Selected: ' . $name);
|
|
|
-
|
|
|
- switch($name) {
|
|
|
- case $actions[0]:
|
|
|
- $this->analyze();
|
|
|
- break;
|
|
|
-
|
|
|
- case $actions[1]:
|
|
|
- $this->fullAnalyze();
|
|
|
- break;
|
|
|
-
|
|
|
- case $actions[2]:
|
|
|
- $this->fetch();
|
|
|
- break;
|
|
|
-
|
|
|
- case $actions[3]:
|
|
|
- $this->fix();
|
|
|
- break;
|
|
|
-
|
|
|
- case $actions[4]:
|
|
|
- $this->sync();
|
|
|
- break;
|
|
|
- }
|
|
|
- return Command::SUCCESS;
|
|
|
- }
|
|
|
-
|
|
|
- protected function incr($name)
|
|
|
- {
|
|
|
- switch($name) {
|
|
|
- case 'found':
|
|
|
- $this->found = $this->found + 1;
|
|
|
- break;
|
|
|
-
|
|
|
- case 'notFetched':
|
|
|
- $this->notFetched = $this->notFetched + 1;
|
|
|
- break;
|
|
|
-
|
|
|
- case 'fixed':
|
|
|
- $this->fixed++;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- protected function analyze()
|
|
|
- {
|
|
|
- $count = Avatar::whereIsRemote(true)->whereNull('cdn_url')->count();
|
|
|
- $this->info('Found ' . $count . ' profiles with blank avatars.');
|
|
|
- $this->line(' ');
|
|
|
- $this->comment('We suggest running php artisan avatars:sync again and selecting the sync option');
|
|
|
- $this->line(' ');
|
|
|
- }
|
|
|
-
|
|
|
- protected function fullAnalyze()
|
|
|
- {
|
|
|
- $count = Profile::count();
|
|
|
- $bar = $this->output->createProgressBar($count);
|
|
|
- $bar->start();
|
|
|
-
|
|
|
- Profile::chunk(50, function($profiles) use ($bar) {
|
|
|
- foreach($profiles as $profile) {
|
|
|
- if($profile->domain == null) {
|
|
|
- $bar->advance();
|
|
|
- continue;
|
|
|
- }
|
|
|
- $avatar = Avatar::whereProfileId($profile->id)->first();
|
|
|
- if(!$avatar || $avatar->cdn_url == null) {
|
|
|
- $this->incr('notFetched');
|
|
|
- }
|
|
|
- $this->incr('found');
|
|
|
- $bar->advance();
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- $this->line(' ');
|
|
|
- $this->line(' ');
|
|
|
- $this->info('Found ' . $this->found . ' remote accounts');
|
|
|
- $this->info('Found ' . $this->notFetched . ' remote avatars to fetch');
|
|
|
- }
|
|
|
-
|
|
|
- protected function fetch()
|
|
|
- {
|
|
|
- $this->error('This action has been deprecated, please run the following command instead:');
|
|
|
- $this->line(' ');
|
|
|
- $this->info('php artisan avatar:storage');
|
|
|
- $this->line(' ');
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- protected function fix()
|
|
|
- {
|
|
|
- Profile::chunk(5000, function($profiles) {
|
|
|
- foreach($profiles as $profile) {
|
|
|
- if($profile->domain == null || $profile->private_key) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- $avatar = Avatar::whereProfileId($profile->id)->first();
|
|
|
- if($avatar) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- $avatar = new Avatar;
|
|
|
- $avatar->is_remote = true;
|
|
|
- $avatar->profile_id = $profile->id;
|
|
|
- $avatar->save();
|
|
|
- $this->incr('fixed');
|
|
|
- }
|
|
|
- });
|
|
|
- $this->line(' ');
|
|
|
- $this->line(' ');
|
|
|
- $this->info('Fixed ' . $this->fixed . ' accounts with a blank avatar');
|
|
|
- }
|
|
|
-
|
|
|
- protected function sync()
|
|
|
- {
|
|
|
- $this->error('This action has been deprecated, please run the following command instead:');
|
|
|
- $this->line(' ');
|
|
|
- $this->info('php artisan avatar:storage');
|
|
|
- $this->line(' ');
|
|
|
- return;
|
|
|
- }
|
|
|
-}
|