about summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
author9p4 <vcs@ersei.net>2023-03-08 11:06:53 -0500
committerGitHub <noreply@github.com>2023-03-08 17:06:53 +0100
commitb715bd8e53537c44915fa76e89e4af53486b027f (patch)
tree9b44509d3d36b063caa3de7e8ebb30bb6f99436d /lib
parent0bc1a002fda69ce4c5015cbf68dc5a86fdc679b9 (diff)
Add refreshing many accounts at once with "tootctl accounts refresh" (#23304)
Diffstat (limited to 'lib')
-rw-r--r--lib/mastodon/accounts_cli.rb36
1 files changed, 21 insertions, 15 deletions
diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb
index 98855cbd0..a6532541e 100644
--- a/lib/mastodon/accounts_cli.rb
+++ b/lib/mastodon/accounts_cli.rb
@@ -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
 
-        if account.nil?
-          say('No such account', :red)
-          exit(1)
-        end
+          next if options[:dry_run]
 
-        unless options[:dry_run]
-          account.reset_avatar!
-          account.reset_header!
-          account.save
+          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)