Compare commits

...

7 Commits

Author SHA1 Message Date
Essem 95bbede177
Merge 9bd21a726c into 113c931cda 2024-04-24 15:13:59 +00:00
Claire 113c931cda
Fix follow request notifications not being displayed (#2695) 2024-04-24 17:00:48 +02:00
Claire b79df709a8
Merge pull request #2693 from glitch-soc/i18n/crowdin/translations
New Crowdin Translations (automated)
2024-04-24 17:00:31 +02:00
Claire 0e071edccc Fix bogus translation files 2024-04-24 12:36:32 +02:00
GitHub Actions c61130af33 New Crowdin translations 2024-04-22 04:27:38 +00:00
Essem 9bd21a726c
Expose poll media support in instance api endpoint 2024-03-11 13:15:07 -05:00
Essem 8551eae7cc
Allow posting media alongside polls 2024-03-11 13:15:06 -05:00
15 changed files with 57 additions and 25 deletions

View File

@ -88,7 +88,6 @@ export const COMPOSE_FOCUS = 'COMPOSE_FOCUS';
const messages = defineMessages({
uploadErrorLimit: { id: 'upload_error.limit', defaultMessage: 'File upload limit exceeded.' },
uploadErrorPoll: { id: 'upload_error.poll', defaultMessage: 'File upload not allowed with polls.' },
open: { id: 'compose.published.open', defaultMessage: 'Open' },
published: { id: 'compose.published.body', defaultMessage: 'Post published.' },
saved: { id: 'compose.saved.body', defaultMessage: 'Post saved.' },
@ -322,11 +321,6 @@ export function uploadCompose(files) {
return;
}
if (getState().getIn(['compose', 'poll'])) {
dispatch(showAlert({ message: messages.uploadErrorPoll }));
return;
}
dispatch(uploadComposeRequest());
for (const [i, f] of Array.from(files).entries()) {

View File

@ -4,7 +4,7 @@ import { addPoll, removePoll } from '../../../actions/compose';
import PollButton from '../components/poll_button';
const mapStateToProps = state => ({
disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 0),
disabled: state.getIn(['compose', 'is_uploading']),
active: state.getIn(['compose', 'poll']) !== null,
});

View File

@ -5,7 +5,6 @@ import { openModal } from '../../../actions/modal';
import UploadButton from '../components/upload_button';
const mapStateToProps = state => {
const isPoll = state.getIn(['compose', 'poll']) !== null;
const isUploading = state.getIn(['compose', 'is_uploading']);
const readyAttachmentsSize = state.getIn(['compose', 'media_attachments']).size ?? 0;
const pendingAttachmentsSize = state.getIn(['compose', 'pending_media_attachments']).size ?? 0;
@ -14,7 +13,7 @@ const mapStateToProps = state => {
const hasVideoOrAudio = state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')));
return {
disabled: isPoll || isUploading || isOverLimit || hasVideoOrAudio,
disabled: isUploading || isOverLimit || hasVideoOrAudio,
resetFileKey: state.getIn(['compose', 'resetFileKey']),
};
};

View File

@ -1,17 +1,28 @@
import { connect } from 'react-redux';
import { authorizeFollowRequest, rejectFollowRequest } from 'flavours/glitch/actions/accounts';
import { makeGetAccount } from 'flavours/glitch/selectors';
import FollowRequest from '../components/follow_request';
const mapDispatchToProps = (dispatch, { account }) => ({
const makeMapStateToProps = () => {
const getAccount = makeGetAccount();
const mapStateToProps = (state, props) => ({
account: getAccount(state, props.id),
});
return mapStateToProps;
};
const mapDispatchToProps = (dispatch, { id }) => ({
onAuthorize () {
dispatch(authorizeFollowRequest(account.get('id')));
dispatch(authorizeFollowRequest(id));
},
onReject () {
dispatch(rejectFollowRequest(account.get('id')));
dispatch(rejectFollowRequest(id));
},
});
export default connect(null, mapDispatchToProps)(FollowRequest);
export default connect(makeMapStateToProps, mapDispatchToProps)(FollowRequest);

View File

@ -64,8 +64,6 @@
"notification_purge.btn_invert": "Auswahl\numkehren",
"notification_purge.btn_none": "Auswahl\naufheben",
"notification_purge.start": "Benachrichtigungen-Aufräumen-Modus starten",
"notifications.column_settings.filter_bar.advanced": "Zeige alle Kategorien an",
"notifications.column_settings.filter_bar.category": "Schnellfilterleiste",
"notifications.column_settings.filter_bar.show_bar": "Filterleiste anzeigen",
"notifications.marked_clear": "Ausgewählte Benachrichtigungen entfernen",
"notifications.marked_clear_confirmation": "Möchtest du wirklich alle auswählten Benachrichtigungen für immer entfernen?",

View File

@ -23,8 +23,8 @@
"compose.content-type.markdown_meta": "Formatear tus mensajes con Markdown",
"compose.content-type.plain": "Texto plano",
"compose.content-type.plain_meta": "Escribir sin formato avanzado",
"compose.disable_threaded_mode": "Deshabilitar Modo Hilo",
"compose.enable_threaded_mode": "Habilitar Modo Hilo",
"compose.disable_threaded_mode": "Deshabilitar modo de hilo",
"compose.enable_threaded_mode": "Habilitar modo de hilo",
"compose_form.sensitive.hide": "{count, plural, one {Marca medios como sensible} other {Marca los medios como sensibles}}",
"compose_form.sensitive.marked": "{count, plural, one {El medio está marcado como sensible} other {Los medios están marcados como sensibles}}",
"compose_form.sensitive.unmarked": "{count, plural, one {El medio no está marcado como sensible} other {Los medios no están marcados como sensibles}}",
@ -64,8 +64,6 @@
"notification_purge.btn_invert": "Invertir\nselección",
"notification_purge.btn_none": "Seleccionar\nnada",
"notification_purge.start": "Entrar en modo de limpieza de notificaciones",
"notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías",
"notifications.column_settings.filter_bar.category": "Barra de filtrado rápido",
"notifications.column_settings.filter_bar.show_bar": "Mostrar barra de filtros",
"notifications.marked_clear": "Limpiar notificaciones seleccionadas",
"notifications.marked_clear_confirmation": "¿Deseas borrar permanentemente todas las notificaciones seleccionadas?",

View File

@ -14,9 +14,17 @@
"column_subheading.lists": "Listas",
"column_subheading.navigation": "Navegación",
"community.column_settings.allow_local_only": "Mostrar sólo toots locales",
"compose.attach.doodle": "Dibujar algo",
"compose.change_federation": "Cambiar configuración de la federación",
"compose.content-type.change": "Cambiar opciones avanzadas de formato",
"compose.content-type.html": "HTML",
"compose.content-type.html_meta": "Formatear tus publicaciones con HTML",
"compose.content-type.markdown": "Markdown",
"compose.content-type.markdown_meta": "Formatear tus publicaciones con Markdown",
"compose.content-type.plain": "Texto plano",
"compose.content-type.plain_meta": "Escribir sin formato avanzado",
"compose.disable_threaded_mode": "Deshabilitar modo de hilo",
"compose.enable_threaded_mode": "Habilitar modo de hilo",
"confirmation_modal.do_not_ask_again": "No preguntar por la confirmación de nuevo",
"confirmations.deprecated_settings.confirm": "Usar las preferencias de Mastodon",
"confirmations.deprecated_settings.message": "Algunas de las {app_settings} de glitch-soc, específicas para el dispositivo que estás usando han sido reemplazadas en las {preferences} de Mastodon y serán sobreescritas:",
@ -30,6 +38,10 @@
"direct.group_by_conversations": "Agrupar por conversación",
"endorsed_accounts_editor.endorsed_accounts": "Cuentas destacadas",
"favourite_modal.combo": "Puedes presionar {combo} para omitir esto la próxima vez",
"federation.federated.long": "Permitir que esta publicación llegue a otros servidores",
"federation.federated.short": "Federado",
"federation.local_only.long": "Evitar que esta publicación llegue a otros servidores",
"federation.local_only.short": "Solo local",
"firehose.column_settings.allow_local_only": "Mostrar mensajes solo-locales en \"Todo\"",
"home.column_settings.advanced": "Avanzado",
"home.column_settings.filter_regex": "Filtrar por expresiones regulares",
@ -112,6 +124,7 @@
"settings.shared_settings_link": "preferencias de usuario",
"settings.show_action_bar": "Mostrar botones de acción en toots colapsados",
"settings.show_content_type_choice": "Mostrar selección de tipo de contenido al crear toots",
"settings.show_published_toast": "Mostrar mensaje al publicar/guardar una publicación",
"settings.show_reply_counter": "Mostrar un conteo estimado de respuestas",
"settings.side_arm": "Botón secundario:",
"settings.side_arm.none": "Ninguno",

View File

@ -14,9 +14,17 @@
"column_subheading.lists": "Listas",
"column_subheading.navigation": "Navegación",
"community.column_settings.allow_local_only": "Mostrar toots solo-locales",
"compose.attach.doodle": "Dibujar algo",
"compose.change_federation": "Cambiar configuración de la federación",
"compose.content-type.change": "Cambiar opciones avanzadas de formato",
"compose.content-type.html": "HTML",
"compose.content-type.html_meta": "Formatear tus publicaciones con HTML",
"compose.content-type.markdown": "Markdown",
"compose.content-type.markdown_meta": "Formatear tus publicaciones con Markdown",
"compose.content-type.plain": "Texto plano",
"compose.content-type.plain_meta": "Escribir sin formato avanzado",
"compose.disable_threaded_mode": "Deshabilitar modo de hilo",
"compose.enable_threaded_mode": "Habilitar modo de hilo",
"confirmation_modal.do_not_ask_again": "No preguntar por la confirmación de nuevo",
"confirmations.deprecated_settings.confirm": "Usar las preferencias de Mastodon",
"confirmations.deprecated_settings.message": "Algunas de las {app_settings} de glitch-soc, específicas para el dispositivo que estás usando han sido reemplazadas en las {preferences} de Mastodon y serán sobreescritas:",
@ -30,6 +38,10 @@
"direct.group_by_conversations": "Agrupar por conversación",
"endorsed_accounts_editor.endorsed_accounts": "Cuentas destacadas",
"favourite_modal.combo": "Puedes presionar {combo} para omitir esto la próxima vez",
"federation.federated.long": "Permitir que esta publicación llegue a otros servidores",
"federation.federated.short": "Federado",
"federation.local_only.long": "Evitar que esta publicación llegue a otros servidores",
"federation.local_only.short": "Solo local",
"firehose.column_settings.allow_local_only": "Mostrar mensajes solo-locales en \"Todo\"",
"home.column_settings.advanced": "Avanzado",
"home.column_settings.filter_regex": "Filtrar por expresiones regulares",
@ -112,6 +124,7 @@
"settings.shared_settings_link": "preferencias de usuario",
"settings.show_action_bar": "Mostrar botones de acción en publicaciones colapsadas",
"settings.show_content_type_choice": "Mostrar selección de tipo de contenido al crear publicaciones",
"settings.show_published_toast": "Mostrar mensaje al publicar/guardar una publicación",
"settings.show_reply_counter": "Mostrar un conteo estimado de respuestas",
"settings.side_arm": "Botón secundario:",
"settings.side_arm.none": "Ninguno",

View File

@ -2,6 +2,7 @@
"about.fork_disclaimer": "Glitch-socはMastodonからフォークされたフリーなオープンソースソフトウェアです。",
"account.disclaimer_full": "このユーザー情報は不正確な可能性があります。",
"account.follows": "フォロー",
"account.follows_you": "フォローされています",
"account.suspended_disclaimer_full": "このユーザーはモデレータにより停止されました。",
"account.view_full_profile": "正確な情報を見る",
"boost_modal.missing_description": "このトゥートには少なくとも1つの画像に説明が付与されていません",
@ -14,8 +15,12 @@
"column_subheading.navigation": "ナビゲーション",
"community.column_settings.allow_local_only": "ローカル限定投稿を表示する",
"compose.content-type.html": "HTML",
"compose.content-type.html_meta": "投稿に HTML を使用する",
"compose.content-type.markdown": "マークダウン",
"compose.content-type.markdown_meta": "投稿に Markdown を使用する",
"compose.content-type.plain": "プレーンテキスト",
"compose.disable_threaded_mode": "スレッドモードを無効にする",
"compose.enable_threaded_mode": "スレッドモードを有効にする",
"confirmation_modal.do_not_ask_again": "もう1度尋ねない",
"confirmations.deprecated_settings.confirm": "Mastodonの設定を使用",
"confirmations.missing_media_description.confirm": "このまま投稿",
@ -28,6 +33,8 @@
"direct.group_by_conversations": "会話でグループ化",
"endorsed_accounts_editor.endorsed_accounts": "紹介しているユーザー",
"favourite_modal.combo": "次からは {combo} を押せば、これをスキップできます。",
"federation.federated.short": "連合",
"federation.local_only.short": "ローカル限定",
"home.column_settings.advanced": "高度",
"home.column_settings.filter_regex": "正規表現でフィルター",
"home.column_settings.show_direct": "DMを表示",
@ -97,6 +104,7 @@
"settings.rewrite_mentions_acct": "ユーザー名とドメイン名(アカウントがリモートの場合)を表示するように書き換える",
"settings.rewrite_mentions_no": "書き換えない",
"settings.rewrite_mentions_username": "ユーザー名を表示するように書き換える",
"settings.shared_settings_link": "ユーザー設定",
"settings.show_action_bar": "アクションバーを表示",
"settings.show_content_type_choice": "トゥートを書くときコンテンツ形式の選択ボタンを表示する",
"settings.show_reply_counter": "投稿に対するリプライの数を表示する",

View File

@ -64,8 +64,6 @@
"notification_purge.btn_invert": "反选",
"notification_purge.btn_none": "取消全选",
"notification_purge.start": "进入通知清理模式",
"notifications.column_settings.filter_bar.advanced": "显示所有类别",
"notifications.column_settings.filter_bar.category": "快速筛选栏",
"notifications.column_settings.filter_bar.show_bar": "显示筛选栏",
"notifications.marked_clear": "清除选择的通知",
"notifications.marked_clear_confirmation": "你确定要永久清除所有选择的通知吗?",

View File

@ -60,8 +60,6 @@
"notification_purge.btn_invert": "反向選擇",
"notification_purge.btn_none": "取消選取",
"notification_purge.start": "進入通知清理模式",
"notifications.column_settings.filter_bar.advanced": "顯示所有分類",
"notifications.column_settings.filter_bar.category": "快速過濾欄",
"notifications.column_settings.filter_bar.show_bar": "顯示過濾器",
"notifications.marked_clear": "清除被選取的通知訊息",
"notifications.marked_clear_confirmation": "您確定要永久清除所有被選取的通知訊息嗎?",

View File

@ -73,6 +73,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer
},
polls: {
allow_media: true,
max_options: PollValidator::MAX_OPTIONS,
max_characters_per_option: PollValidator::MAX_OPTION_CHARS,
min_expiration: PollValidator::MIN_EXPIRATION,

View File

@ -92,6 +92,7 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer
},
polls: {
allow_media: true,
max_options: PollValidator::MAX_OPTIONS,
max_characters_per_option: PollValidator::MAX_OPTION_CHARS,
min_expiration: PollValidator::MIN_EXPIRATION,

View File

@ -146,7 +146,7 @@ class PostStatusService < BaseService
return
end
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > 4 || @options[:poll].present?
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > 4
@media = @account.media_attachments.where(status_id: nil).where(id: @options[:media_ids].take(4).map(&:to_i))

View File

@ -70,7 +70,7 @@ class UpdateStatusService < BaseService
def validate_media!
return [] if @options[:media_ids].blank? || !@options[:media_ids].is_a?(Enumerable)
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > 4 || @options[:poll].present?
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > 4
media_attachments = @status.account.media_attachments.where(status_id: [nil, @status.id]).where(scheduled_status_id: nil).where(id: @options[:media_ids].take(4).map(&:to_i)).to_a