Add refreshing many accounts at once with "tootctl accounts refresh" (#23304)
This commit is contained in:
		
							parent
							
								
									ed782a2d36
								
							
						
					
					
						commit
						8ca1b0b6fc
					
				
					 1 changed files with 21 additions and 15 deletions
				
			
		| 
						 | 
				
			
			@ -372,16 +372,16 @@ module Mastodon
 | 
			
		|||
    option :concurrency, type: :numeric, default: 5, aliases: [:c]
 | 
			
		||||
    option :verbose, type: :boolean, aliases: [:v]
 | 
			
		||||
    option :dry_run, type: :boolean
 | 
			
		||||
    desc 'refresh [USERNAME]', 'Fetch remote user data and files'
 | 
			
		||||
    desc 'refresh [USERNAMES]', 'Fetch remote user data and files'
 | 
			
		||||
    long_desc <<-LONG_DESC
 | 
			
		||||
      Fetch remote user data and files for one or multiple accounts.
 | 
			
		||||
 | 
			
		||||
      With the --all option, all remote accounts will be processed.
 | 
			
		||||
      Through the --domain option, this can be narrowed down to a
 | 
			
		||||
      specific domain only. Otherwise, a single remote account must
 | 
			
		||||
      be specified with USERNAME.
 | 
			
		||||
      specific domain only. Otherwise, remote accounts must be
 | 
			
		||||
      specified with space-separated USERNAMES.
 | 
			
		||||
    LONG_DESC
 | 
			
		||||
    def refresh(username = nil)
 | 
			
		||||
    def refresh(*usernames)
 | 
			
		||||
      dry_run = options[:dry_run] ? ' (DRY RUN)' : ''
 | 
			
		||||
 | 
			
		||||
      if options[:domain] || options[:all]
 | 
			
		||||
| 
						 | 
				
			
			@ -397,19 +397,25 @@ module Mastodon
 | 
			
		|||
        end
 | 
			
		||||
 | 
			
		||||
        say("Refreshed #{processed} accounts#{dry_run}", :green, true)
 | 
			
		||||
      elsif username.present?
 | 
			
		||||
        username, domain = username.split('@')
 | 
			
		||||
        account = Account.find_remote(username, domain)
 | 
			
		||||
      elsif !usernames.empty?
 | 
			
		||||
        usernames.each do |user|
 | 
			
		||||
          user, domain = user.split('@')
 | 
			
		||||
          account = Account.find_remote(user, domain)
 | 
			
		||||
 | 
			
		||||
          if account.nil?
 | 
			
		||||
            say('No such account', :red)
 | 
			
		||||
            exit(1)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
        unless options[:dry_run]
 | 
			
		||||
          next if options[:dry_run]
 | 
			
		||||
 | 
			
		||||
          begin
 | 
			
		||||
            account.reset_avatar!
 | 
			
		||||
            account.reset_header!
 | 
			
		||||
            account.save
 | 
			
		||||
          rescue Mastodon::UnexpectedResponseError
 | 
			
		||||
            say("Account failed: #{user}@#{domain}", :red)
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        say("OK#{dry_run}", :green)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue