~cytrogen/masto-fe

45a19ddfe48c8f9346bdb4c786726fc36e15a51e — Claire 2 years ago 1a4a23b + 99c7283
Merge pull request #2440 from ClearlyClaire/glitch-soc/merge-upstream

Merge upstream changes up to 27e84c069112a3d2abfad947642457cc997a261a
M Gemfile.lock => Gemfile.lock +1 -1
@@ 671,7 671,7 @@ GEM
      rubyzip (>= 1.2.2, < 3.0)
      websocket (~> 1.0)
    semantic_range (3.0.0)
    sidekiq (6.5.10)
    sidekiq (6.5.11)
      connection_pool (>= 2.2.5, < 3)
      rack (~> 2.0)
      redis (>= 4.5.0, < 5)

M app/javascript/flavours/glitch/features/status/index.jsx => app/javascript/flavours/glitch/features/status/index.jsx +1 -1
@@ 653,7 653,7 @@ class Status extends ImmutablePureComponent {

  shouldUpdateScroll = (prevRouterProps, { location }) => {
    // Do not change scroll when opening a modal
    if (location.state?.mastodonModalKey && location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey) {
    if (location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey) {
      return false;
    }


M app/javascript/mastodon/features/status/index.jsx => app/javascript/mastodon/features/status/index.jsx +1 -1
@@ 619,7 619,7 @@ class Status extends ImmutablePureComponent {

  shouldUpdateScroll = (prevRouterProps, { location }) => {
    // Do not change scroll when opening a modal
    if (location.state?.mastodonModalKey && location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey) {
    if (location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey) {
      return false;
    }


M app/javascript/mastodon/locales/ko.json => app/javascript/mastodon/locales/ko.json +1 -1
@@ 102,7 102,7 @@
  "bundle_modal_error.message": "컴포넌트를 불러오는 중 문제가 발생했습니다.",
  "bundle_modal_error.retry": "다시 시도",
  "closed_registrations.other_server_instructions": "마스토돈은 분산화 되어 있기 때문에, 다른 서버에서 계정을 만들더라도 이 서버와 상호작용 할 수 있습니다.",
  "closed_registrations_modal.description": "{domain}은 현재 가입이 막혀있는 상태입니다, 만약 마스토돈을 이용하기 위해 꼭 {domain}을 사용할 필요는 없다는 사실을 인지해 두세요.",
  "closed_registrations_modal.description": "{domain}은 현재 가입이 막혀있는 상태입니다, 마스토돈을 이용하기 위해 꼭 {domain}을 사용할 필요는 없다는 사실을 인지해 두세요.",
  "closed_registrations_modal.find_another_server": "다른 서버 찾기",
  "closed_registrations_modal.preamble": "마스토돈은 분산화 되어 있습니다, 그렇기 때문에 어디에서 계정을 생성하든, 이 서버에 있는 누구와도 팔로우와 상호작용을 할 수 있습니다. 심지어는 스스로 서버를 만드는 것도 가능합니다!",
  "closed_registrations_modal.title": "마스토돈에서 가입",

M app/javascript/mastodon/locales/uk.json => app/javascript/mastodon/locales/uk.json +15 -15
@@ 79,16 79,16 @@
  "admin.impact_report.instance_accounts": "Профілі облікових записів буде видалено",
  "admin.impact_report.instance_followers": "Підписники, яких можуть втратити наші користувачі",
  "admin.impact_report.instance_follows": "Підписники, яких можуть втратити їхні користувачі",
  "admin.impact_report.title": "Наслідки",
  "alert.rate_limited.message": "Спробуйте ще раз через {retry_time, time, medium}.",
  "admin.impact_report.title": "Підсумки впливу",
  "alert.rate_limited.message": "Спробуйте ще раз за {retry_time, time, medium}.",
  "alert.rate_limited.title": "Швидкість обмежена",
  "alert.unexpected.message": "Сталася неочікувана помилка.",
  "alert.unexpected.title": "Ой!",
  "announcement.announcement": "Оголошення",
  "attachments_list.unprocessed": "(не оброблено)",
  "audio.hide": "Сховати аудіо",
  "autosuggest_hashtag.per_week": "{count} в тиждень",
  "boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу",
  "autosuggest_hashtag.per_week": "{count} на тиждень",
  "boost_modal.combo": "Ви можете натиснути {combo}, щоби пропустити це наступного разу",
  "bundle_column_error.copy_stacktrace": "Копіювати звіт про помилку",
  "bundle_column_error.error.body": "Неможливо показати запитану сторінку. Це може бути спричинено помилкою у нашому коді, або через проблему сумісності з браузером.",
  "bundle_column_error.error.title": "О, ні!",


@@ 140,7 140,7 @@
  "compose.saved.body": "Допис збережено.",
  "compose_form.direct_message_warning_learn_more": "Дізнатися більше",
  "compose_form.encryption_warning": "Дописи на Mastodon не захищені шифруванням. Не поширюйте жодну делікатну інформацію.",
  "compose_form.hashtag_warning": "Цей допис не буде зображений у жодній стрічці гештеґу, оскільки він прихований. Тільки публічні дописи можуть бути знайдені за гештеґом.",
  "compose_form.hashtag_warning": "Цього допису не буде під жодним гештеґом, оскільки він не є загальнодоступним. За гештеґом можна шукати лише публічні дописи.",
  "compose_form.lock_disclaimer": "Ваш обліковий запис не {locked}. Будь-який користувач може підписатися на вас та переглядати ваші дописи для підписників.",
  "compose_form.lock_disclaimer.lock": "приватний",
  "compose_form.placeholder": "Що у вас на думці?",


@@ 151,7 151,7 @@
  "compose_form.poll.switch_to_multiple": "Дозволити вибір декількох відповідей",
  "compose_form.poll.switch_to_single": "Перемкнути у режим вибору однієї відповіді",
  "compose_form.publish": "Опублікувати",
  "compose_form.publish_form": "Опублікувати",
  "compose_form.publish_form": "Новий допис",
  "compose_form.publish_loud": "{publish}!",
  "compose_form.save_changes": "Зберегти зміни",
  "compose_form.sensitive.hide": "{count, plural, one {Позначити медіа делікатним} other {Позначити медіа делікатними}}",


@@ 206,7 206,7 @@
  "dismissable_banner.explore_tags": "Ці хештеги зараз набирають популярності серед людей на цьому та інших серверах децентралізованої мережі. Хештеги, які використовуються більшою кількістю людей, мають вищий рейтинг.",
  "dismissable_banner.public_timeline": "Це найновіші загальнодоступні дописи від людей в соціальній мережі, на які підписані люди в {domain}.",
  "embed.instructions": "Вбудуйте цей допис до вашого вебсайту, скопіювавши код нижче.",
  "embed.preview": "Ось як він виглядатиме:",
  "embed.preview": "Ось який вигляд це матиме:",
  "emoji_button.activity": "Діяльність",
  "emoji_button.clear": "Очистити",
  "emoji_button.custom": "Власні",


@@ 227,7 227,7 @@
  "empty_column.account_unavailable": "Профіль недоступний",
  "empty_column.blocks": "Ви ще не заблокували жодного користувача.",
  "empty_column.bookmarked_statuses": "У вас ще немає дописів у закладках. Коли ви щось додасте до закладок, воно з'явиться тут.",
  "empty_column.community": "Локальна стрічка пуста. Напишіть щось, щоб розігріти народ!",
  "empty_column.community": "Локальна стрічка порожня. Напишіть щось, щоб розігріти народ!",
  "empty_column.direct": "У вас ще немає жодних особистих згадок. Коли ви надсилаєте чи отримуєте повідомлення, воно з'явиться тут.",
  "empty_column.domain_blocks": "Тут поки немає прихованих доменів.",
  "empty_column.explore_statuses": "Нема нічого популярного. Подивіться пізніше!",


@@ 240,10 240,10 @@
  "empty_column.list": "Цей список порожній. Коли його учасники додадуть нові дописи, вони з'являться тут.",
  "empty_column.lists": "У вас ще немає списків. Коли ви їх створите, вони з'являться тут.",
  "empty_column.mutes": "Ви ще не приховали жодного користувача.",
  "empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.",
  "empty_column.notifications": "У вас ще немає сповіщень. Коли інші люди почнуть взаємодіяти з вами, ви побачите їх тут.",
  "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших серверів, щоб заповнити стрічку",
  "error.unexpected_crash.explanation": "Через помилку у нашому коді або несумісність браузера, ця сторінка не може бути зображена коректно.",
  "error.unexpected_crash.explanation_addons": "Неможливо правильно показати цю сторінку. Ймовірно, цю помилку викликано додатком браузера або автоматичним засобом перекладу.",
  "error.unexpected_crash.explanation_addons": "Неможливо правильно показати цю сторінку. Ймовірно, цю помилку спричинило розширення браузера або автоматичний засіб перекладу.",
  "error.unexpected_crash.next_steps": "Спробуйте перезавантажити сторінку. Якщо це не допоможе, ви все ще зможете використовувати Mastodon через інший браузер або рідний застосунок.",
  "error.unexpected_crash.next_steps_addons": "Спробуйте їх вимкнути та оновити сторінку. Якщо це не допомагає, ви можете використовувати Mastodon через інший браузер або окремий застосунок.",
  "errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну",


@@ 394,7 394,7 @@
  "moved_to_account_banner.text": "Ваш обліковий запис {disabledAccount} наразі вимкнений, оскільки вас перенесено до {movedToAccount}.",
  "mute_modal.duration": "Тривалість",
  "mute_modal.hide_notifications": "Сховати сповіщення цього користувача?",
  "mute_modal.indefinite": "Назавжди",
  "mute_modal.indefinite": "Невизначений строк",
  "navigation_bar.about": "Про застосунок",
  "navigation_bar.advanced_interface": "Відкрити в розширеному вебінтерфейсі",
  "navigation_bar.blocks": "Заблоковані користувачі",


@@ 428,7 428,7 @@
  "notification.follow": "{name} підписалися на вас",
  "notification.follow_request": "{name} відправили запит на підписку",
  "notification.mention": "{name} згадали вас",
  "notification.own_poll": "Ваше опитування завершено",
  "notification.own_poll": "Ваше опитування завершилося",
  "notification.poll": "Опитування, у якому ви голосували, скінчилося",
  "notification.reblog": "{name} поширює ваш допис",
  "notification.status": "{name} щойно дописує",


@@ 480,7 480,7 @@
  "onboarding.follows.title": "Персоналізуйте домашню стрічку",
  "onboarding.share.lead": "Розкажіть людям про те, як вони можуть знайти вас на Mastodon!",
  "onboarding.share.message": "Я {username} на #Mastodon! Стежте за мною на {url}",
  "onboarding.share.next_steps": "Можливі наступні кроки:",
  "onboarding.share.next_steps": "Можливі такі кроки:",
  "onboarding.share.title": "Поділитися своїм профілем",
  "onboarding.start.lead": "Тепер ви — частина Mastodon, унікальної децентралізованої платформи соціальних медіа, де ви, а не алгоритми керують вашими вподобаннями. Розпочнімо роботу:",
  "onboarding.start.skip": "Хочете пропустити?",


@@ 694,7 694,7 @@
  "units.short.thousand": "{count} тис",
  "upload_area.title": "Перетягніть сюди, щоб завантажити",
  "upload_button.label": "Додати зображення, відео або аудіо",
  "upload_error.limit": "Ліміт завантаження файлів перевищено.",
  "upload_error.limit": "Ви перевищили ліміт завантаження файлів.",
  "upload_error.poll": "Не можна завантажувати файли до опитувань.",
  "upload_form.audio_description": "Опишіть для людей із вадами слуху",
  "upload_form.description": "Опишіть для людей з вадами зору",


@@ 713,7 713,7 @@
  "upload_modal.hint": "Клацніть або перетягніть коло на превʼю, щоб обрати точку, яку буде завжди видно на мініатюрах.",
  "upload_modal.preparing_ocr": "Підготовка OCR…",
  "upload_modal.preview_label": "Переглянути ({ratio})",
  "upload_progress.label": "Завантаження...",
  "upload_progress.label": "Вивантаження...",
  "upload_progress.processing": "Обробка…",
  "username.taken": "Це ім'я користувача вже зайнято. Спробуйте інше",
  "video.close": "Закрити відео",

M app/services/report_service.rb => app/services/report_service.rb +1 -1
@@ 57,7 57,7 @@ class ReportService < BaseService

  def forward_to_replied_to!
    # Send report to servers to which the account was replying to, so they also have a chance to act
    inbox_urls = Account.remote.where(domain: forward_to_domains).where(id: Status.where(id: reported_status_ids).where.not(in_reply_to_account_id: nil).select(:in_reply_to_account_id)).inboxes - [@target_account.inbox_url]
    inbox_urls = Account.remote.where(domain: forward_to_domains).where(id: Status.where(id: reported_status_ids).where.not(in_reply_to_account_id: nil).select(:in_reply_to_account_id)).inboxes - [@target_account.inbox_url, @target_account.shared_inbox_url]

    inbox_urls.each do |inbox_url|
      ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url)

M config/locales/simple_form.es-MX.yml => config/locales/simple_form.es-MX.yml +1 -1
@@ 323,7 323,7 @@ es-MX:
        url: URL de Endpoint
    'no': 'No'
    not_recommended: No recomendado
    overridden: Sobrescrito
    overridden: Reemplazado
    recommended: Recomendado
    required:
      mark: "*"

M spec/services/report_service_spec.rb => spec/services/report_service_spec.rb +20 -1
@@ 36,7 36,7 @@ RSpec.describe ReportService, type: :service do
        expect(report.uri).to_not be_nil
      end

      context 'when reporting a reply' do
      context 'when reporting a reply on a different remote server' do
        let(:remote_thread_account) { Fabricate(:account, domain: 'foo.com', protocol: :activitypub, inbox_url: 'http://foo.com/inbox') }
        let(:reported_status) { Fabricate(:status, account: remote_account, thread: Fabricate(:status, account: remote_thread_account)) }



@@ 67,6 67,25 @@ RSpec.describe ReportService, type: :service do
          end
        end
      end

      context 'when reporting a reply on the same remote server as the person being replied-to' do
        let(:remote_thread_account) { Fabricate(:account, domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox') }
        let(:reported_status) { Fabricate(:status, account: remote_account, thread: Fabricate(:status, account: remote_thread_account)) }

        context 'when forward_to_domains includes both the replied-to domain and the origin domain' do
          it 'sends ActivityPub payload only once' do
            subject.call(source_account, remote_account, status_ids: [reported_status.id], forward: forward, forward_to_domains: [remote_account.domain])
            expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once
          end
        end

        context 'when forward_to_domains does not include the replied-to domain' do
          it 'sends ActivityPub payload only once' do
            subject.call(source_account, remote_account, status_ids: [reported_status.id], forward: forward)
            expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once
          end
        end
      end
    end

    context 'when forward is false' do