Merge pull request #462 from mastodon/release-1.4.5

Release 1.4.5
This commit is contained in:
CMK 2022-07-05 09:59:23 +08:00 committed by GitHub
commit 869e44737a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
178 changed files with 1642 additions and 631 deletions

View File

@ -15,8 +15,8 @@
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.4.4</string>
<string>1.4.5</string>
<key>CFBundleVersion</key>
<string>140</string>
<string>144</string>
</dict>
</plist>

View File

@ -2,18 +2,18 @@
"common": {
"alerts": {
"common": {
"please_try_again": "يُرجى المُحاولة مرة أُخرى.",
"please_try_again": "يُرجى المُحاوَلَةُ مُجَدَّدًا.",
"please_try_again_later": "يُرجى المُحاولة مرة أُخرى لاحقًا."
},
"sign_up_failure": {
"title": "إخفاق في التسجيل"
"title": "إخفاقٌ فِي التَّسجيل"
},
"server_error": {
"title": طأ في الخادم"
"title": َطَأٌ فِي الخادِم"
},
"vote_failure": {
"title": "إخفاق في التصويت",
"poll_ended": "انتهى استطلاع الرأي"
"title": "إخفاقٌ فِي التَّصويت",
"poll_ended": "اِنتَهَى اِستِطلاعُ الرَّأي"
},
"discard_post_content": {
"title": "التخلص من المسودة",
@ -216,26 +216,26 @@
"subtitle_extend": "اختر مجتمعًا بناءً على اهتماماتك، منطقتك أو يمكنك حتى اختيارُ مجتمعٍ ذي غرضٍ عام. تُشغَّل جميعُ المجتمعِ مِن قِبَلِ مُنظمَةٍ أو فردٍ مُستقلٍ تمامًا.",
"button": {
"category": {
"all": "الكل",
"all_accessiblity_description": "الفئة: الكل",
"all": "الكُل",
"all_accessiblity_description": "الفِئَة: الكُل",
"academia": "أكاديمي",
"activism": "النشطاء",
"food": "الطعام",
"furry": كسو بالفرو",
"games": "ألعاب",
"general": ام",
"journalism": حافة",
"lgbt": جتمع الشواذ",
"activism": "نُشَطاء",
"food": "طَعام",
"furry": َكسُوٌ بِالفَرو",
"games": "ألعَاب",
"general": َام",
"journalism": َحافة",
"lgbt": َخَانِيث",
"regional": "إقليمي",
"art": نون",
"music": وسيقى",
"tech": قنية"
"art": ُنون",
"music": ُوسيقى",
"tech": َقنِيَة"
},
"see_less": رض عناصر أقل",
"see_more": رض عناصر أكثر"
"see_less": َرضُ عَناصِرٍ أقَل",
"see_more": َرضُ عَناصِرٍ أكثَر"
},
"label": {
"language": "اللُّغة",
"language": "اللُّغَة",
"users": "مُستَخدِم",
"category": "الفئة"
},
@ -286,8 +286,8 @@
"email": "البريد الإلكتروني",
"password": "الرمز السري",
"agreement": "الاِتِّفاقيَّة",
"locale": "اللغة المحلية",
"reason": "السبب"
"locale": "اللُّغَة",
"reason": "السَّبَب"
},
"reason": {
"blocked": "يحتوي %s على موفِّر خدمة بريد إلكتروني غير مسموح به",
@ -297,14 +297,14 @@
"accepted": "يجب أن يُقبل %s",
"blank": "%s مَطلوب",
"invalid": "%s غير صالح",
"too_long": "%s طويل جداً",
"too_short": "%s قصير جدًا",
"too_long": "%s طَويلٌ جِدًّا",
"too_short": "%s قَصِيرٌ جِدًا",
"inclusion": "إنَّ %s قيمة غير مدعومة"
},
"special": {
"username_invalid": "يُمكِن أن يحتوي اسم المستخدم على أحرف أبجدية، أرقام وشرطات سفلية فقط",
"username_too_long": "اِسم المُستَخدِم طويل جداً (يَجِبُ ألّا يكون أطول من ثلاثين خانة)",
"email_invalid": "هذا عنوان بريد إلكتروني غير صالح",
"email_invalid": "عُنوانُ البَريدِ الاِلِكتُرُونيّ هَذَا غَيرُ صَالِح",
"password_too_short": "رمز السر قصير جدًا (يجب أن يتكون من ثمان خانات على الأقل)"
}
}
@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "أظْهِر كُلَّ شَيء",
"show_mentions": "أظْهِر الإشارَات"
},
"follow_request": {
"accept": "قَبُول",
"accepted": "مَقبُول",
"reject": "رَفض",
"rejected": "مَرفُوض"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Mostrar-ho tot",
"show_mentions": "Mostrar Mencions"
},
"follow_request": {
"accept": "Acceptar",
"accepted": "Acceptat",
"reject": "rebutjar",
"rejected": "Rebutjat"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "هەموو شتێک نیشان بدە",
"show_mentions": "ئاماژەکان نیشان بدە"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Alles anzeigen",
"show_mentions": "Erwähnungen anzeigen"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Mostrar todo",
"show_mentions": "Mostrar menciones"
},
"follow_request": {
"accept": "Aceptar",
"accepted": "Aceptada",
"reject": "rechazar",
"rejected": "Rechazada"
}
},
"thread": {

View File

@ -72,9 +72,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>Followed by %1$@, and another mutual</string>
<string>Seguido por %1$@ y otro mutuo</string>
<key>other</key>
<string>Followed by %1$@, and %ld mutuals</string>
<string>Seguido por %1$@ y %ld mutuos</string>
</dict>
</dict>
<key>plural.count.metric_formatted.post</key>

View File

@ -129,7 +129,7 @@
"show_post": "Mostrar Publicación",
"show_user_profile": "Mostrar perfil del usuario",
"content_warning": "Advertencia de Contenido",
"sensitive_content": "Sensitive Content",
"sensitive_content": "Contenido sensible",
"media_content_warning": "Pulsa en cualquier sitio para mostrar",
"tap_to_reveal": "Tocar para revelar",
"poll": {
@ -241,7 +241,7 @@
},
"input": {
"placeholder": "Encuentra un servidor o únete al tuyo propio...",
"search_servers_or_enter_url": "Search servers or enter URL"
"search_servers_or_enter_url": "Buscar servidores o introducir la URL"
},
"empty_state": {
"finding_servers": "Encontrando servidores disponibles...",
@ -251,7 +251,7 @@
},
"register": {
"title": "Háblanos de ti.",
"lets_get_you_set_up_on_domain": "Lets get you set up on %s",
"lets_get_you_set_up_on_domain": "Deja que te preparemos en %s",
"input": {
"avatar": {
"delete": "Borrar"
@ -322,7 +322,7 @@
"confirm_email": {
"title": "Una última cosa.",
"subtitle": "Te acabamos de enviar un correo a %s,\npulsa en el enlace para confirmar tu cuenta.",
"tap_the_link_we_emailed_to_you_to_verify_your_account": "Tap the link we emailed to you to verify your account",
"tap_the_link_we_emailed_to_you_to_verify_your_account": "Toca el enlace que te enviamos por correo electrónico para verificar tu cuenta",
"button": {
"open_email_app": "Abrir Aplicación de Correo Electrónico",
"resend": "Reenviar"
@ -347,8 +347,8 @@
"published": "¡Publicado!",
"Publishing": "Publicación en curso...",
"accessibility": {
"logo_label": "Logo Button",
"logo_hint": "Tap to scroll to top and tap again to previous location"
"logo_label": "Botón del logo",
"logo_hint": "Toca para desplazarte hacia arriba y toca de nuevo para la localización anterior"
}
}
},
@ -418,7 +418,7 @@
},
"profile": {
"header": {
"follows_you": "Follows You"
"follows_you": "Te sigue"
},
"dashboard": {
"posts": "publicaciones",
@ -465,22 +465,22 @@
}
},
"follower": {
"title": "follower",
"title": "seguidor",
"footer": "No se muestran los seguidores de otros servidores."
},
"following": {
"title": "following",
"title": "siguiendo",
"footer": "No se muestran los seguidos de otros servidores."
},
"familiarFollowers": {
"title": "Followers you familiar",
"followed_by_names": "Followed by %s"
"title": "Seguidores que conoces",
"followed_by_names": "Seguido por %s"
},
"favorited_by": {
"title": "Favorited By"
"title": "Hecho favorito por"
},
"reblogged_by": {
"title": "Reblogged By"
"title": "Reblogueado por"
},
"search": {
"title": "Buscar",
@ -520,10 +520,10 @@
"posts": "Publicaciones",
"hashtags": "Etiquetas",
"news": "Noticias",
"community": "Community",
"community": "Comunidad",
"for_you": "Para Ti"
},
"intro": "These are the posts gaining traction in your corner of Mastodon."
"intro": "Estas son las publicaciones que están ganando tracción en tu rincón de Mastodon."
},
"favorite": {
"title": "Tus Favoritos"
@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Mostrar Todo",
"show_mentions": "Mostrar Menciones"
},
"follow_request": {
"accept": "Aceptar",
"accepted": "Aceptado",
"reject": "rechazar",
"rejected": "Rechazado"
}
},
"thread": {
@ -620,46 +626,46 @@
"text_placeholder": "Escribe o pega comentarios adicionales",
"reported": "REPORTADO",
"step_one": {
"step_1_of_4": "Step 1 of 4",
"whats_wrong_with_this_post": "What's wrong with this post?",
"whats_wrong_with_this_account": "What's wrong with this account?",
"whats_wrong_with_this_username": "What's wrong with %s?",
"select_the_best_match": "Select the best match",
"i_dont_like_it": "I dont like it",
"it_is_not_something_you_want_to_see": "It is not something you want to see",
"its_spam": "Its spam",
"malicious_links_fake_engagement_or_repetetive_replies": "Malicious links, fake engagement, or repetetive replies",
"it_violates_server_rules": "It violates server rules",
"you_are_aware_that_it_breaks_specific_rules": "You are aware that it breaks specific rules",
"its_something_else": "Its something else",
"the_issue_does_not_fit_into_other_categories": "The issue does not fit into other categories"
"step_1_of_4": "Paso 1 de 4",
"whats_wrong_with_this_post": "¿Qué hay de malo con esta publicación?",
"whats_wrong_with_this_account": "¿Qué hay de malo con esta cuenta?",
"whats_wrong_with_this_username": "¿Qué hay de malo con %s?",
"select_the_best_match": "Selecciona la mejor opción",
"i_dont_like_it": "No me gusta",
"it_is_not_something_you_want_to_see": "No es algo que quieras ver",
"its_spam": "Es spam",
"malicious_links_fake_engagement_or_repetetive_replies": "Enlaces maliciosos, compromisos falsos o respuestas repetitivas",
"it_violates_server_rules": "Viola las reglas del servidor",
"you_are_aware_that_it_breaks_specific_rules": "Eres consciente de que infringe las normas específicas",
"its_something_else": "Es algo más",
"the_issue_does_not_fit_into_other_categories": "El problema no encaja en otras categorías"
},
"step_two": {
"step_2_of_4": "Step 2 of 4",
"which_rules_are_being_violated": "Which rules are being violated?",
"select_all_that_apply": "Select all that apply",
"i_just_dont_like_it": "I just dont like it"
"step_2_of_4": "Paso 2 de 4",
"which_rules_are_being_violated": "¿Qué normas se están violando?",
"select_all_that_apply": "Selecciona todos los que correspondan",
"i_just_dont_like_it": "Solamente no me gusta"
},
"step_three": {
"step_3_of_4": "Step 3 of 4",
"are_there_any_posts_that_back_up_this_report": "Are there any posts that back up this report?",
"select_all_that_apply": "Select all that apply"
"step_3_of_4": "Paso 3 de 4",
"are_there_any_posts_that_back_up_this_report": "¿Hay alguna publicación que respalde este informe?",
"select_all_that_apply": "Selecciona todos los que correspondan"
},
"step_four": {
"step_4_of_4": "Step 4 of 4",
"is_there_anything_else_we_should_know": "Is there anything else we should know?"
"step_4_of_4": "Paso 4 de 4",
"is_there_anything_else_we_should_know": "¿Hay algo más que deberíamos saber?"
},
"step_final": {
"dont_want_to_see_this": "Dont want to see this?",
"when_you_see_something_you_dont_like_on_mastodon_you_can_remove_the_person_from_your_experience.": "When you see something you dont like on Mastodon, you can remove the person from your experience.",
"unfollow": "Unfollow",
"unfollowed": "Unfollowed",
"unfollow_user": "Unfollow %s",
"mute_user": "Mute %s",
"you_wont_see_their_posts_or_reblogs_in_your_home_feed_they_wont_know_they_ve_been_muted": "You wont see their posts or reblogs in your home feed. They wont know theyve been muted.",
"block_user": "Block %s",
"they_will_no_longer_be_able_to_follow_or_see_your_posts_but_they_can_see_if_theyve_been_blocked": "They will no longer be able to follow or see your posts, but they can see if theyve been blocked.",
"while_we_review_this_you_can_take_action_against_user": "While we review this, you can take action against %s"
"dont_want_to_see_this": "¿No quieres ver esto?",
"when_you_see_something_you_dont_like_on_mastodon_you_can_remove_the_person_from_your_experience.": "Cuando veas algo que no te gusta en Mastodon, puedes quitar a la persona de tu experiencia.",
"unfollow": "Dejar de seguir",
"unfollowed": "Ha dejado de seguirte",
"unfollow_user": "Dejar de seguir a %s",
"mute_user": "Silenciar a %s",
"you_wont_see_their_posts_or_reblogs_in_your_home_feed_they_wont_know_they_ve_been_muted": "No verás sus publicaciones o reblogueos en tu línea temporal. No sabrán que han sido silenciados.",
"block_user": "Bloquear a %s",
"they_will_no_longer_be_able_to_follow_or_see_your_posts_but_they_can_see_if_theyve_been_blocked": "Ya no podrán ser capaces de seguirte o ver tus publicaciones, pero pueden ver si han sido bloqueados.",
"while_we_review_this_you_can_take_action_against_user": "Mientras revisamos esto, puedes tomar medidas contra %s"
}
},
"preview": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Erakutsi guztia",
"show_mentions": "Erakutsi aipamenak"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Näytä kaikki",
"show_mentions": "Näytä maininnat"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -418,7 +418,7 @@
},
"profile": {
"header": {
"follows_you": "Follows You"
"follows_you": "Vous suit"
},
"dashboard": {
"posts": "publications",
@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Tout Afficher",
"show_mentions": "Afficher les mentions"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Seall a h-uile càil",
"show_mentions": "Seall na h-iomraidhean"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Mostrar Todo",
"show_mentions": "Mostrar mencións"
},
"follow_request": {
"accept": "Aceptar",
"accepted": "Aceptada",
"reject": "rexeitar",
"rejected": "Rexeitada"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Tampilkan Segalanya",
"show_mentions": "Tampilkan Sebutan"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Mostra Tutto",
"show_mentions": "Mostra Menzioni"
},
"follow_request": {
"accept": "Accetta",
"accepted": "Richiesta accettata",
"reject": "rifiuta",
"rejected": "Richiesta rifiutata"
}
},
"thread": {

View File

@ -92,7 +92,7 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld media</string>
<string>%ld件のメディア</string>
</dict>
</dict>
<key>plural.count.post</key>
@ -106,7 +106,7 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld posts</string>
<string>%ld件の投稿</string>
</dict>
</dict>
<key>plural.count.favorite</key>
@ -148,7 +148,7 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld replies</string>
<string>%ld件の返信</string>
</dict>
</dict>
<key>plural.count.vote</key>
@ -176,7 +176,7 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld voters</string>
<string>%ld人の投票</string>
</dict>
</dict>
<key>plural.people_talking</key>
@ -316,7 +316,7 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>other</key>
<string>%ld 年前</string>
<string>%ld年前</string>
</dict>
</dict>
<key>date.month.ago.abbr</key>

View File

@ -129,12 +129,12 @@
"show_post": "投稿を見る",
"show_user_profile": "プロフィールを見る",
"content_warning": "コンテンツ警告",
"sensitive_content": "Sensitive Content",
"sensitive_content": "閲覧注意",
"media_content_warning": "どこかをタップして表示",
"tap_to_reveal": "タップして表示",
"poll": {
"vote": "投票",
"closed": "クローズド"
"closed": "終了"
},
"actions": {
"reply": "返信",
@ -325,7 +325,7 @@
"tap_the_link_we_emailed_to_you_to_verify_your_account": "Tap the link we emailed to you to verify your account",
"button": {
"open_email_app": "メールアプリを開く",
"resend": "Resend"
"resend": "再送信"
},
"dont_receive_email": {
"title": "メールをチェックしてください",
@ -347,8 +347,8 @@
"published": "投稿しました!",
"Publishing": "投稿中...",
"accessibility": {
"logo_label": "Logo Button",
"logo_hint": "Tap to scroll to top and tap again to previous location"
"logo_label": "ロゴボタン",
"logo_hint": "タップすると一番上までスクロールし、もう一度タップすると元の場所に戻ります"
}
}
},
@ -418,7 +418,7 @@
},
"profile": {
"header": {
"follows_you": "Follows You"
"follows_you": "フォローされています"
},
"dashboard": {
"posts": "投稿",
@ -441,20 +441,20 @@
},
"relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
"title": "アカウントをミュート",
"message": "%sをミュートしますか?"
},
"confirm_unmute_user": {
"title": "ミュートを解除",
"message": "%sをミュートしますか"
},
"confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
"title": "アカウントをブロック",
"message": "%sをブロックしますか?"
},
"confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
"title": "アカウントのブロックを解除",
"message": "%sのブロックを解除しますか?"
}
},
"accessibility": {
@ -465,11 +465,11 @@
}
},
"follower": {
"title": "follower",
"title": "フォロワー",
"footer": "他のサーバーからのフォロワーは表示されません。"
},
"following": {
"title": "following",
"title": "フォロー",
"footer": "他のサーバーにいるフォローは表示されません。"
},
"familiarFollowers": {
@ -534,16 +534,22 @@
"Mentions": "メンション"
},
"notification_description": {
"followed_you": "さんにフォローされました",
"favorited_your_post": "さんあなたの投稿をお気に入りに登録しました",
"reblogged_your_post": "さんあなたの投稿をブーストしました",
"mentioned_you": "さんがあなたに返信しました",
"request_to_follow_you": "さんがあなたにフォローリクエストしました",
"poll_has_ended": "アンケートが終了しました"
"followed_you": "にフォローされました",
"favorited_your_post": "がお気に入りに登録",
"reblogged_your_post": "がブースト",
"mentioned_you": "にメンションされました",
"request_to_follow_you": "からのフォローリクエスト",
"poll_has_ended": "アンケートが終了"
},
"keyobard": {
"show_everything": "すべて見る",
"show_mentions": "メンションを見る"
},
"follow_request": {
"accept": "承認",
"accepted": "承諾済み",
"reject": "拒否",
"rejected": "拒否済み"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Sken yal taɣawsa",
"show_mentions": "Sken tisedmirin"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Her tiştî nîşan bide",
"show_mentions": "Qalkirinan nîşan bike"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
},
"follow_request": {
"accept": "수락",
"accepted": "수락됨",
"reject": "거절",
"rejected": "거절됨"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Alles weergeven",
"show_mentions": "Vermeldingen weergeven"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Показать все",
"show_mentions": "Показать упоминания"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Visa allt",
"show_mentions": "Visa omnämningar"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -418,7 +418,7 @@
},
"profile": {
"header": {
"follows_you": "Follows You"
"follows_you": "ติดตามคุณ"
},
"dashboard": {
"posts": "โพสต์",
@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "แสดงทุกอย่าง",
"show_mentions": "แสดงการกล่าวถึง"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Her Şeyi Göster",
"show_mentions": "Bahsetmeleri Göster"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Hiện mọi thứ",
"show_mentions": "Hiện lượt nhắc"
},
"follow_request": {
"accept": "Chấp nhận",
"accepted": "Đã chấp nhận",
"reject": "từ chối",
"rejected": "Đã từ chối"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "显示全部",
"show_mentions": "显示提及"
},
"follow_request": {
"accept": "接受",
"accepted": "已接受",
"reject": "拒绝",
"rejected": "已拒绝"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "顯示全部",
"show_mentions": "顯示提及"
},
"follow_request": {
"accept": "接受",
"accepted": "已接受",
"reject": "拒絕",
"rejected": "已拒絕"
}
},
"thread": {

View File

@ -544,6 +544,12 @@
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
},
"follow_request": {
"accept": "Accept",
"accepted": "Accepted",
"reject": "reject",
"rejected": "Rejected"
}
},
"thread": {

View File

@ -4850,7 +4850,7 @@
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@ -4880,7 +4880,7 @@
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@ -4988,11 +4988,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 140;
DYLIB_CURRENT_VERSION = 144;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@ -5019,11 +5019,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 140;
DYLIB_CURRENT_VERSION = 144;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@ -5114,7 +5114,7 @@
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@ -5182,11 +5182,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 140;
DYLIB_CURRENT_VERSION = 144;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@ -5211,7 +5211,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5234,7 +5234,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5258,7 +5258,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5282,7 +5282,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5306,7 +5306,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5330,7 +5330,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5354,7 +5354,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5441,7 +5441,7 @@
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@ -5508,11 +5508,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 140;
DYLIB_CURRENT_VERSION = 144;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@ -5536,7 +5536,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5559,7 +5559,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5583,7 +5583,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5607,7 +5607,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -5630,7 +5630,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 140;
CURRENT_PROJECT_VERSION = 144;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (

View File

@ -19,7 +19,7 @@
<key>Mastodon - Profile.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>1</integer>
<integer>3</integer>
</dict>
<key>Mastodon - RTL.xcscheme_^#shared#^_</key>
<dict>
@ -114,7 +114,7 @@
<key>MastodonIntent.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>34</integer>
<integer>29</integer>
</dict>
<key>MastodonIntents.xcscheme_^#shared#^_</key>
<dict>
@ -129,12 +129,12 @@
<key>NotificationService.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>32</integer>
<integer>31</integer>
</dict>
<key>ShareActionExtension.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>33</integer>
<integer>30</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>

View File

@ -496,7 +496,7 @@ private extension SceneCoordinator {
}
let _viewController = SFSafariViewController(url: url)
_viewController.preferredBarTintColor = ThemeService.shared.currentTheme.value.navigationBarBackgroundColor
_viewController.preferredControlTintColor = Asset.Colors.brandBlue.color
_viewController.preferredControlTintColor = Asset.Colors.brand.color
viewController = _viewController
case .alertController(let alertController):

View File

@ -17,7 +17,7 @@ extension Mastodon.Entity.Notification.NotificationType {
var color: UIColor
switch self {
case .follow:
color = Asset.Colors.brandBlue.color
color = Asset.Colors.brand.color
case .favourite:
color = Asset.Colors.Notification.favourite.color
case .reblog:
@ -25,9 +25,9 @@ extension Mastodon.Entity.Notification.NotificationType {
case .mention:
color = Asset.Colors.Notification.mention.color
case .poll:
color = Asset.Colors.brandBlue.color
color = Asset.Colors.brand.color
case .followRequest:
color = Asset.Colors.brandBlue.color
color = Asset.Colors.brand.color
default:
color = .clear
}

View File

@ -35,7 +35,7 @@ extension UITableView {
let backgroundColor = cell.backgroundColor
UIView.animate(withDuration: 0.3) {
cell.backgroundColor = Asset.Colors.brandBlue.color.withAlphaComponent(0.5)
cell.backgroundColor = Asset.Colors.brand.color.withAlphaComponent(0.5)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
UIView.animate(withDuration: 0.3) {
cell.backgroundColor = backgroundColor

View File

@ -2,6 +2,19 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>onion</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>CFBundleDevelopmentRegion</key>
@ -17,7 +30,7 @@
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.4.4</string>
<string>1.4.5</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
@ -30,7 +43,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>140</string>
<string>144</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationQueriesSchemes</key>
@ -46,19 +59,6 @@
</array>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>onion</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
<key>NSUserActivityTypes</key>
<array>
<string>SendPostIntent</string>

View File

@ -14,7 +14,7 @@ extension DataSourceFacade {
user: ManagedObjectRecord<MastodonUser>,
authenticationBox: MastodonAuthenticationBox
) async throws {
let selectionFeedbackGenerator = UISelectionFeedbackGenerator()
let selectionFeedbackGenerator = await UISelectionFeedbackGenerator()
await selectionFeedbackGenerator.selectionChanged()
_ = try await dependency.context.apiService.toggleBlock(

View File

@ -15,7 +15,7 @@ extension DataSourceFacade {
status: ManagedObjectRecord<Status>,
authenticationBox: MastodonAuthenticationBox
) async throws {
let selectionFeedbackGenerator = UISelectionFeedbackGenerator()
let selectionFeedbackGenerator = await UISelectionFeedbackGenerator()
await selectionFeedbackGenerator.selectionChanged()
_ = try await provider.context.apiService.favorite(

View File

@ -7,6 +7,9 @@
import UIKit
import CoreDataStack
import class CoreDataStack.Notification
import MastodonSDK
import MastodonLocalization
extension DataSourceFacade {
static func responseToUserFollowAction(
@ -14,7 +17,7 @@ extension DataSourceFacade {
user: ManagedObjectRecord<MastodonUser>,
authenticationBox: MastodonAuthenticationBox
) async throws {
let selectionFeedbackGenerator = UISelectionFeedbackGenerator()
let selectionFeedbackGenerator = await UISelectionFeedbackGenerator()
await selectionFeedbackGenerator.selectionChanged()
_ = try await dependency.context.apiService.toggleFollow(
@ -23,3 +26,104 @@ extension DataSourceFacade {
)
} // end func
}
extension DataSourceFacade {
static func responseToUserFollowRequestAction(
dependency: NeedsDependency,
notification: ManagedObjectRecord<Notification>,
query: Mastodon.API.Account.FollowReqeustQuery,
authenticationBox: MastodonAuthenticationBox
) async throws {
let selectionFeedbackGenerator = await UISelectionFeedbackGenerator()
await selectionFeedbackGenerator.selectionChanged()
let managedObjectContext = dependency.context.managedObjectContext
let _userID: MastodonUser.ID? = try await managedObjectContext.perform {
guard let notification = notification.object(in: managedObjectContext) else { return nil }
return notification.account.id
}
guard let userID = _userID else {
assertionFailure()
throw APIService.APIError.implicit(.badRequest)
}
let state: MastodonFollowRequestState = try await managedObjectContext.perform {
guard let notification = notification.object(in: managedObjectContext) else { return .init(state: .none) }
return notification.followRequestState
}
guard state.state == .none else {
return
}
try? await managedObjectContext.performChanges {
guard let notification = notification.object(in: managedObjectContext) else { return }
switch query {
case .accept:
notification.transientFollowRequestState = .init(state: .isAccepting)
case .reject:
notification.transientFollowRequestState = .init(state: .isRejecting)
}
}
do {
_ = try await dependency.context.apiService.followRequest(
userID: userID,
query: query,
authenticationBox: authenticationBox
)
} catch {
try? await managedObjectContext.performChanges {
guard let notification = notification.object(in: managedObjectContext) else { return }
notification.transientFollowRequestState = .init(state: .none)
}
if let error = error as? Mastodon.API.Error {
switch error.httpResponseStatus {
case .notFound:
let backgroundManagedObjectContext = dependency.context.backgroundManagedObjectContext
try await backgroundManagedObjectContext.performChanges {
guard let notification = notification.object(in: backgroundManagedObjectContext) else { return }
for feed in notification.feeds {
backgroundManagedObjectContext.delete(feed)
}
backgroundManagedObjectContext.delete(notification)
}
default:
let alertController = await UIAlertController(for: error, title: nil, preferredStyle: .alert)
let okAction = await UIAlertAction(title: L10n.Common.Controls.Actions.ok, style: .default)
await alertController.addAction(okAction)
await dependency.coordinator.present(
scene: .alertController(alertController: alertController),
from: nil,
transition: .alertController(animated: true, completion: nil)
)
}
}
return
}
try? await managedObjectContext.performChanges {
guard let notification = notification.object(in: managedObjectContext) else { return }
switch query {
case .accept:
notification.transientFollowRequestState = .init(state: .isAccept)
case .reject:
notification.transientFollowRequestState = .init(state: .isReject)
}
}
let backgroundManagedObjectContext = dependency.context.backgroundManagedObjectContext
try? await backgroundManagedObjectContext.performChanges {
guard let notification = notification.object(in: backgroundManagedObjectContext) else { return }
switch query {
case .accept:
notification.followRequestState = .init(state: .isAccept)
case .reject:
notification.followRequestState = .init(state: .isReject)
}
}
} // end func
}

View File

@ -14,7 +14,7 @@ extension DataSourceFacade {
user: ManagedObjectRecord<MastodonUser>,
authenticationBox: MastodonAuthenticationBox
) async throws {
let selectionFeedbackGenerator = UISelectionFeedbackGenerator()
let selectionFeedbackGenerator = await UISelectionFeedbackGenerator()
await selectionFeedbackGenerator.selectionChanged()
_ = try await dependency.context.apiService.toggleMute(

View File

@ -15,7 +15,7 @@ extension DataSourceFacade {
status: ManagedObjectRecord<Status>,
authenticationBox: MastodonAuthenticationBox
) async throws {
let selectionFeedbackGenerator = UISelectionFeedbackGenerator()
let selectionFeedbackGenerator = await UISelectionFeedbackGenerator()
await selectionFeedbackGenerator.selectionChanged()
_ = try await provider.context.apiService.reblog(

View File

@ -87,6 +87,69 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider {
}
}
// MARK: - Follow Request
extension NotificationTableViewCellDelegate where Self: DataSourceProvider {
func tableViewCell(
_ cell: UITableViewCell,
notificationView: NotificationView,
acceptFollowRequestButtonDidPressed button: UIButton
) {
Task {
let source = DataSourceItem.Source(tableViewCell: cell, indexPath: nil)
guard let item = await item(from: source) else {
assertionFailure()
return
}
guard case let .notification(notification) = item else {
assertionFailure("only works for status data provider")
return
}
guard let authenticationBox = context.authenticationService.activeMastodonAuthenticationBox.value else {
return
}
try await DataSourceFacade.responseToUserFollowRequestAction(
dependency: self,
notification: notification,
query: .accept,
authenticationBox: authenticationBox
)
} // end Task
}
func tableViewCell(
_ cell: UITableViewCell,
notificationView: NotificationView,
rejectFollowRequestButtonDidPressed button: UIButton
) {
Task {
let source = DataSourceItem.Source(tableViewCell: cell, indexPath: nil)
guard let item = await item(from: source) else {
assertionFailure()
return
}
guard case let .notification(notification) = item else {
assertionFailure("only works for status data provider")
return
}
guard let authenticationBox = context.authenticationService.activeMastodonAuthenticationBox.value else {
return
}
try await DataSourceFacade.responseToUserFollowRequestAction(
dependency: self,
notification: notification,
query: .reject,
authenticationBox: authenticationBox
)
} // end Task
}
}
// MARK: - Status Content
extension NotificationTableViewCellDelegate where Self: DataSourceProvider {
func tableViewCell(

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

View File

@ -1,112 +1,190 @@
{
"images" : [
{
"filename" : "icon_20pt@2x.png",
"filename" : "AppIcon~iPhone-20@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "icon_20pt@3x.png",
"filename" : "AppIcon~iPhone-20@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"filename" : "icon_29pt@2x.png",
"filename" : "AppIcon~iPhone-29@1x.png",
"idiom" : "iphone",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "AppIcon~iPhone-29@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "icon_29pt@3x.png",
"filename" : "AppIcon~iPhone-29@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"filename" : "icon_40pt@2x.png",
"filename" : "AppIcon~iPhone-40@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "icon_40pt@3x.png",
"filename" : "AppIcon~iPhone-40@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"filename" : "icon_60pt@2x.png",
"filename" : "AppIcon~iPhone-57@1x.png",
"idiom" : "iphone",
"scale" : "1x",
"size" : "57x57"
},
{
"filename" : "AppIcon~iPhone-57@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "57x57"
},
{
"filename" : "AppIcon~iPhone-60@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"filename" : "icon_60pt@3x.png",
"filename" : "AppIcon~iPhone-60@3x.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"filename" : "icon_20pt.png",
"filename" : "AppIcon~iPad-20@1x.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "20x20"
},
{
"filename" : "icon_20pt@2x-1.png",
"filename" : "AppIcon~iPad-20@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "icon_29pt.png",
"filename" : "AppIcon~iPad-29@1x.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "icon_29pt@2x-1.png",
"filename" : "AppIcon~iPad-29@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "icon_40pt.png",
"filename" : "AppIcon~iPad-40@1x.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "40x40"
},
{
"filename" : "icon_40pt@2x-1.png",
"filename" : "AppIcon~iPad-40@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "icon_76pt.png",
"filename" : "AppIcon~iPad-76@1x.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "76x76"
},
{
"filename" : "icon_76pt@2x.png",
"filename" : "AppIcon~iPad-76@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "76x76"
},
{
"filename" : "icon_83.5@2x.png",
"filename" : "AppIcon~iPad-83.5@2x.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
"filename" : "iTunesArtwork@2x.png",
"filename" : "AppIcon~iOS-Marketing-1024@1x.png",
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
},
{
"filename" : "AppIcon~macOS-16@1x.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "16x16"
},
{
"filename" : "AppIcon~macOS-16@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "16x16"
},
{
"filename" : "AppIcon~macOS-32@1x.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "32x32"
},
{
"filename" : "AppIcon~macOS-32@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "32x32"
},
{
"filename" : "AppIcon~macOS-128@1x.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "128x128"
},
{
"filename" : "AppIcon~macOS-128@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "128x128"
},
{
"filename" : "AppIcon~macOS-256@1x.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "256x256"
},
{
"filename" : "AppIcon~macOS-256@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "256x256"
},
{
"filename" : "AppIcon~macOS-512@1x.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "512x512"
},
{
"filename" : "AppIcon~macOS-512@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "512x512"
}
],
"info" : {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 798 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

View File

@ -25,7 +25,7 @@ final class ComposeStatusPollExpiresOptionCollectionViewCell: UICollectionViewCe
button.titleLabel?.font = UIFontMetrics(forTextStyle: .body).scaledFont(for: .systemFont(ofSize: 12))
button.expandEdgeInsets = UIEdgeInsets(top: 0, left: -10, bottom: -20, right: -20)
button.setTitle(L10n.Scene.Compose.Poll.durationTime(L10n.Scene.Compose.Poll.thirtyMinutes), for: .normal)
button.setTitleColor(Asset.Colors.brandBlue.color, for: .normal)
button.setTitleColor(Asset.Colors.brand.color, for: .normal)
return button
}()

Some files were not shown because too many files have changed in this diff Show More