Mastodon/lib/mastodon/cli/preview_cards.rb

50 lines
1.7 KiB
Ruby

# frozen_string_literal: true
require_relative 'base'
module Mastodon::CLI
class PreviewCards < Base
include ActionView::Helpers::NumberHelper
option :days, type: :numeric, default: 180
option :concurrency, type: :numeric, default: 5, aliases: [:c]
option :verbose, type: :boolean, aliases: [:v]
option :dry_run, type: :boolean, default: false
option :link, type: :boolean, default: false
desc 'remove', 'Remove preview card media'
long_desc <<-DESC
Removes local thumbnails for preview cards.
The --days option sets the age a preview card must be before attached
media will be removed. Preview cards will not be re-fetched unless the
link is posted again two weeks after the last usage, so it is not
recommended to delete preview card media from within the last 14 days.
With the --link option, only media from link-type preview cards will be
deleted, skipping video and photo cards.
DESC
def remove
time_ago = options[:days].days.ago
link = options[:link] ? 'link-type ' : ''
scope = PreviewCard.cached
scope = scope.where(type: :link) if options[:link]
scope = scope.where(updated_at: ...time_ago)
processed, aggregate = parallelize_with_progress(scope) do |preview_card|
next if preview_card.image.blank?
size = preview_card.image_file_size
unless dry_run?
preview_card.image.destroy
preview_card.save
end
size
end
say("Removed media from #{processed} #{link}preview cards (approx. #{number_to_human_size(aggregate)})#{dry_run_mode_suffix}", :green, true)
end
end
end