diff options
Diffstat (limited to 'lib/tasks')
-rw-r--r-- | lib/tasks/assets.rake | 22 | ||||
-rw-r--r-- | lib/tasks/emojis.rake | 56 | ||||
-rw-r--r-- | lib/tasks/mastodon.rake | 17 |
3 files changed, 86 insertions, 9 deletions
diff --git a/lib/tasks/assets.rake b/lib/tasks/assets.rake new file mode 100644 index 000000000..44896afc7 --- /dev/null +++ b/lib/tasks/assets.rake @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +def render_static_page(action, dest:, **opts) + I18n.with_locale(ENV['DEFAULT_LOCALE'] || I18n.default_locale) do + html = ApplicationController.render(action, opts) + File.write(dest, html) + end +end + +namespace :assets do + desc 'Generate static pages' + task :generate_static_pages do + render_static_page 'errors/500', layout: 'error', dest: Rails.root.join('public', '500.html') + end +end + +if Rake::Task.task_defined?('assets:precompile') + Rake::Task['assets:precompile'].enhance do + Webpacker.manifest.refresh + Rake::Task['assets:generate_static_pages'].invoke + end +end diff --git a/lib/tasks/emojis.rake b/lib/tasks/emojis.rake new file mode 100644 index 000000000..cd5e30e96 --- /dev/null +++ b/lib/tasks/emojis.rake @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +def codepoints_to_filename(codepoints) + codepoints.downcase.gsub(/\A[0]+/, '').tr(' ', '-') +end + +def codepoints_to_unicode(codepoints) + if codepoints.include?(' ') + codepoints.split(' ').map(&:hex).pack('U*') + else + [codepoints.hex].pack('U') + end +end + +namespace :emojis do + desc 'Generate a unicode to filename mapping' + task :generate do + source = 'http://www.unicode.org/Public/emoji/5.0/emoji-test.txt' + codes = [] + dest = Rails.root.join('app', 'javascript', 'mastodon', 'emoji_map.json') + + puts "Downloading emojos from source... (#{source})" + + HTTP.get(source).to_s.split("\n").each do |line| + next if line.start_with? '#' + parts = line.split(';').map(&:strip) + next if parts.size < 2 + codes << [parts[0], parts[1].start_with?('fully-qualified')] + end + + grouped_codes = codes.reduce([]) do |agg, current| + if current[1] + agg << [current[0]] + else + agg.last << current[0] + agg + end + end + + existence_maps = grouped_codes.map { |c| c.map { |cc| [cc, File.exist?(Rails.root.join('public', 'emoji', codepoints_to_filename(cc) + '.svg'))] }.to_h } + map = {} + + existence_maps.each do |group| + existing_one = group.key(true) + + group.each_key do |key| + map[codepoints_to_unicode(key)] = codepoints_to_filename(existing_one) + end + end + + map = map.sort { |a, b| a[0].size <=> b[0].size }.to_h + + File.write(dest, Oj.dump(map)) + puts "Wrote emojo to destination! (#{dest})" + end +end diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake index 3c65ece4b..5614ddf48 100644 --- a/lib/tasks/mastodon.rake +++ b/lib/tasks/mastodon.rake @@ -83,16 +83,15 @@ namespace :mastodon do MediaAttachment.where.not(remote_url: '').where('created_at < ?', time_ago).find_each do |media| media.file.destroy - media.type = :unknown media.save end end desc 'Set unknown attachment type for remote-only attachments' task set_unknown: :environment do - Rails.logger.debug 'Setting unknown attachment type for remote-only attachments...' + puts 'Setting unknown attachment type for remote-only attachments...' MediaAttachment.where(file_file_name: nil).where.not(type: :unknown).in_batches.update_all(type: :unknown) - Rails.logger.debug 'Done!' + puts 'Done!' end desc 'Redownload avatars/headers of remote users. Optionally limit to a particular domain with DOMAIN' @@ -188,24 +187,24 @@ namespace :mastodon do namespace :maintenance do desc 'Update counter caches' task update_counter_caches: :environment do - Rails.logger.debug 'Updating counter caches for accounts...' + puts 'Updating counter caches for accounts...' - Account.unscoped.select('id').find_in_batches do |batch| + Account.unscoped.where.not(protocol: :activitypub).select('id').find_in_batches do |batch| Account.where(id: batch.map(&:id)).update_all('statuses_count = (select count(*) from statuses where account_id = accounts.id), followers_count = (select count(*) from follows where target_account_id = accounts.id), following_count = (select count(*) from follows where account_id = accounts.id)') end - Rails.logger.debug 'Updating counter caches for statuses...' + puts 'Updating counter caches for statuses...' Status.unscoped.select('id').find_in_batches do |batch| Status.where(id: batch.map(&:id)).update_all('favourites_count = (select count(*) from favourites where favourites.status_id = statuses.id), reblogs_count = (select count(*) from statuses as reblogs where reblogs.reblog_of_id = statuses.id)') end - Rails.logger.debug 'Done!' + puts 'Done!' end desc 'Generate static versions of GIF avatars/headers' task add_static_avatars: :environment do - Rails.logger.debug 'Generating static avatars/headers for GIF ones...' + puts 'Generating static avatars/headers for GIF ones...' Account.unscoped.where(avatar_content_type: 'image/gif').or(Account.unscoped.where(header_content_type: 'image/gif')).find_each do |account| begin @@ -217,7 +216,7 @@ namespace :mastodon do end end - Rails.logger.debug 'Done!' + puts 'Done!' end desc 'Ensure referencial integrity' |