diff --git a/AppShared/Info.plist b/AppShared/Info.plist
index 094d6d538..3d06762c8 100644
--- a/AppShared/Info.plist
+++ b/AppShared/Info.plist
@@ -15,8 +15,8 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 1.4.3
+ 1.4.4
CFBundleVersion
- 138
+ 140
diff --git a/Localization/StringsConvertor/input/ar.lproj/app.json b/Localization/StringsConvertor/input/ar.lproj/app.json
index 6fce051fb..ab8eba9dc 100644
--- a/Localization/StringsConvertor/input/ar.lproj/app.json
+++ b/Localization/StringsConvertor/input/ar.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "يُتابِعُك"
+ },
"dashboard": {
"posts": "مَنشورات",
"following": "مُتابَع",
diff --git a/Localization/StringsConvertor/input/ca.lproj/app.json b/Localization/StringsConvertor/input/ca.lproj/app.json
index 2f300fd3d..d42d470b5 100644
--- a/Localization/StringsConvertor/input/ca.lproj/app.json
+++ b/Localization/StringsConvertor/input/ca.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Et segueix"
+ },
"dashboard": {
"posts": "publicacions",
"following": "seguint",
diff --git a/Localization/StringsConvertor/input/ckb.lproj/app.json b/Localization/StringsConvertor/input/ckb.lproj/app.json
index 7b6596235..9f60b2cb0 100644
--- a/Localization/StringsConvertor/input/ckb.lproj/app.json
+++ b/Localization/StringsConvertor/input/ckb.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "پۆستەکان",
"following": "شوێنکەوتن",
diff --git a/Localization/StringsConvertor/input/cy.lproj/app.json b/Localization/StringsConvertor/input/cy.lproj/app.json
index 99eb2784a..d1c4f7d98 100644
--- a/Localization/StringsConvertor/input/cy.lproj/app.json
+++ b/Localization/StringsConvertor/input/cy.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "postiadau",
"following": "following",
diff --git a/Localization/StringsConvertor/input/da.lproj/app.json b/Localization/StringsConvertor/input/da.lproj/app.json
index 2a8634a67..93c3f9955 100644
--- a/Localization/StringsConvertor/input/da.lproj/app.json
+++ b/Localization/StringsConvertor/input/da.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "posts",
"following": "following",
diff --git a/Localization/StringsConvertor/input/de.lproj/app.json b/Localization/StringsConvertor/input/de.lproj/app.json
index d0c61847c..ebcab3d18 100644
--- a/Localization/StringsConvertor/input/de.lproj/app.json
+++ b/Localization/StringsConvertor/input/de.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "Beiträge",
"following": "Gefolgte",
diff --git a/Localization/StringsConvertor/input/en-US.lproj/app.json b/Localization/StringsConvertor/input/en-US.lproj/app.json
index 2a8634a67..93c3f9955 100644
--- a/Localization/StringsConvertor/input/en-US.lproj/app.json
+++ b/Localization/StringsConvertor/input/en-US.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "posts",
"following": "following",
diff --git a/Localization/StringsConvertor/input/en.lproj/app.json b/Localization/StringsConvertor/input/en.lproj/app.json
index 2a8634a67..93c3f9955 100644
--- a/Localization/StringsConvertor/input/en.lproj/app.json
+++ b/Localization/StringsConvertor/input/en.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "posts",
"following": "following",
diff --git a/Localization/StringsConvertor/input/es-AR.lproj/app.json b/Localization/StringsConvertor/input/es-AR.lproj/app.json
index 9ccf1f998..b218aeb86 100644
--- a/Localization/StringsConvertor/input/es-AR.lproj/app.json
+++ b/Localization/StringsConvertor/input/es-AR.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Te sigue"
+ },
"dashboard": {
"posts": "mensajes",
"following": "siguiendo",
@@ -500,7 +503,7 @@
},
"searching": {
"segment": {
- "all": "Todas",
+ "all": "Todo",
"people": "Cuentas",
"hashtags": "Etiquetas",
"posts": "Mensajes"
@@ -565,10 +568,10 @@
},
"notifications": {
"title": "Notificaciones",
- "favorites": "Marcó como favorito mi mensaje",
+ "favorites": "Marca mi mensaje como favorito",
"follows": "Me sigue",
- "boosts": "Adhirió a mi mensaje",
- "mentions": "Me mencionó",
+ "boosts": "Adhiere a mi mensaje",
+ "mentions": "Me menciona",
"trigger": {
"anyone": "cualquiera",
"follower": "un seguidor",
@@ -582,7 +585,7 @@
"true_black_dark_mode": "Modo negro oscuro real",
"disable_avatar_animation": "Deshabilitar avatares animados",
"disable_emoji_animation": "Deshabilitar emojis animados",
- "using_default_browser": "Usar navegador web predeterminado para abrir enlaces",
+ "using_default_browser": "Usar navegador web predet. para abrir enlaces",
"open_links_in_mastodon": "Abrir enlaces en Mastodon"
},
"boring_zone": {
diff --git a/Localization/StringsConvertor/input/es.lproj/app.json b/Localization/StringsConvertor/input/es.lproj/app.json
index 9c11e365d..3f4666685 100644
--- a/Localization/StringsConvertor/input/es.lproj/app.json
+++ b/Localization/StringsConvertor/input/es.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "publicaciones",
"following": "siguiendo",
diff --git a/Localization/StringsConvertor/input/eu.lproj/app.json b/Localization/StringsConvertor/input/eu.lproj/app.json
index 96978f3d4..930aedabd 100644
--- a/Localization/StringsConvertor/input/eu.lproj/app.json
+++ b/Localization/StringsConvertor/input/eu.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "bidalketa",
"following": "jarraitzen",
diff --git a/Localization/StringsConvertor/input/fi.lproj/app.json b/Localization/StringsConvertor/input/fi.lproj/app.json
index 7dc8f17c4..9400a93f8 100644
--- a/Localization/StringsConvertor/input/fi.lproj/app.json
+++ b/Localization/StringsConvertor/input/fi.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "julkaisut",
"following": "seurataan",
diff --git a/Localization/StringsConvertor/input/fr.lproj/app.json b/Localization/StringsConvertor/input/fr.lproj/app.json
index f481d156b..dc148cbfa 100644
--- a/Localization/StringsConvertor/input/fr.lproj/app.json
+++ b/Localization/StringsConvertor/input/fr.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "publications",
"following": "abonnements",
diff --git a/Localization/StringsConvertor/input/gd.lproj/app.json b/Localization/StringsConvertor/input/gd.lproj/app.json
index c3364c6e9..49fa60549 100644
--- a/Localization/StringsConvertor/input/gd.lproj/app.json
+++ b/Localization/StringsConvertor/input/gd.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "postaichean",
"following": "a’ leantainn",
diff --git a/Localization/StringsConvertor/input/gl.lproj/app.json b/Localization/StringsConvertor/input/gl.lproj/app.json
index 02c33f321..d6349cf01 100644
--- a/Localization/StringsConvertor/input/gl.lproj/app.json
+++ b/Localization/StringsConvertor/input/gl.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Séguete"
+ },
"dashboard": {
"posts": "publicacións",
"following": "seguindo",
diff --git a/Localization/StringsConvertor/input/hi.lproj/app.json b/Localization/StringsConvertor/input/hi.lproj/app.json
index 04b8fa021..69d03f003 100644
--- a/Localization/StringsConvertor/input/hi.lproj/app.json
+++ b/Localization/StringsConvertor/input/hi.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "posts",
"following": "following",
diff --git a/Localization/StringsConvertor/input/id.lproj/app.json b/Localization/StringsConvertor/input/id.lproj/app.json
index c3f987d98..675b53539 100644
--- a/Localization/StringsConvertor/input/id.lproj/app.json
+++ b/Localization/StringsConvertor/input/id.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "postingan",
"following": "mengikuti",
diff --git a/Localization/StringsConvertor/input/it.lproj/app.json b/Localization/StringsConvertor/input/it.lproj/app.json
index 57ed4f46b..d61560c66 100644
--- a/Localization/StringsConvertor/input/it.lproj/app.json
+++ b/Localization/StringsConvertor/input/it.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Ti segue"
+ },
"dashboard": {
"posts": "post",
"following": "seguendo",
@@ -531,7 +534,7 @@
"Mentions": "Menzioni"
},
"notification_description": {
- "followed_you": "ti ha seguito",
+ "followed_you": "ha iniziato a seguirti",
"favorited_your_post": "ha apprezzato il tuo post",
"reblogged_your_post": "ha condiviso il tuo post",
"mentioned_you": "ti ha menzionato",
diff --git a/Localization/StringsConvertor/input/ja.lproj/app.json b/Localization/StringsConvertor/input/ja.lproj/app.json
index e61b09753..4c7c9af89 100644
--- a/Localization/StringsConvertor/input/ja.lproj/app.json
+++ b/Localization/StringsConvertor/input/ja.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "投稿",
"following": "フォロー",
diff --git a/Localization/StringsConvertor/input/kab.lproj/Localizable.stringsdict b/Localization/StringsConvertor/input/kab.lproj/Localizable.stringsdict
index 09e3645f3..7fc6a50bb 100644
--- a/Localization/StringsConvertor/input/kab.lproj/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/kab.lproj/Localizable.stringsdict
@@ -72,9 +72,9 @@
NSStringFormatValueTypeKey
ld
one
- Followed by %1$@, and another mutual
+ Yeṭṭafar-it %1$@, akked wayeḍ d ucrik
other
- Followed by %1$@, and %ld mutuals
+ Yeṭṭafar-it %1$@, akked %ld d ucriken
plural.count.metric_formatted.post
@@ -104,9 +104,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 media
+ 1 umidyat
other
- %ld media
+ %ld yimidyaten
plural.count.post
diff --git a/Localization/StringsConvertor/input/kab.lproj/app.json b/Localization/StringsConvertor/input/kab.lproj/app.json
index fa2cac641..674cd220d 100644
--- a/Localization/StringsConvertor/input/kab.lproj/app.json
+++ b/Localization/StringsConvertor/input/kab.lproj/app.json
@@ -348,7 +348,7 @@
"Publishing": "Asuffeɣ tasuffeɣt...",
"accessibility": {
"logo_label": "Taqeffalt n ulugu",
- "logo_hint": "Tap to scroll to top and tap again to previous location"
+ "logo_hint": "Sit i wakken ad tɛeddiḍ i usawen, sit tikkelt-nniḍen i wakken ad tɛeddiḍ ɣer wadig yezrin"
}
}
},
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Yeṭṭafaṛ-ik•im"
+ },
"dashboard": {
"posts": "tisuffaɣ",
"following": "iṭafaṛ",
@@ -470,14 +473,14 @@
"footer": "Ineḍfaren seg yiqeddacen-nniḍen ur d-ttwaskanen ara."
},
"familiarFollowers": {
- "title": "Followers you familiar",
- "followed_by_names": "Followed by %s"
+ "title": "Ineḍfaren i tessneḍ",
+ "followed_by_names": "Yeṭṭafar-it %s"
},
"favorited_by": {
- "title": "Favorited By"
+ "title": "Ismenyaf-it"
},
"reblogged_by": {
- "title": "Reblogged By"
+ "title": "Tettwasuffeɣ-d sɣur"
},
"search": {
"title": "Nadi",
@@ -619,7 +622,7 @@
"step_one": {
"step_1_of_4": "Aḥric 1 seg 4",
"whats_wrong_with_this_post": "Acu n wugur yellan d tsuffeɣt-a?",
- "whats_wrong_with_this_account": "What's wrong with this account?",
+ "whats_wrong_with_this_account": "Acu n wugur yellan deg umiḍan-a?",
"whats_wrong_with_this_username": "Acu n wugur yellan d %s?",
"select_the_best_match": "Fren amṣada akk igerrzen",
"i_dont_like_it": "Ur ḥemmleɣ ara aya",
diff --git a/Localization/StringsConvertor/input/kmr.lproj/app.json b/Localization/StringsConvertor/input/kmr.lproj/app.json
index cc4fc8947..442c1e4fd 100644
--- a/Localization/StringsConvertor/input/kmr.lproj/app.json
+++ b/Localization/StringsConvertor/input/kmr.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Te dişopîne"
+ },
"dashboard": {
"posts": "şandî",
"following": "dişopîne",
diff --git a/Localization/StringsConvertor/input/ko.lproj/app.json b/Localization/StringsConvertor/input/ko.lproj/app.json
index ea42eaa71..c2377420c 100644
--- a/Localization/StringsConvertor/input/ko.lproj/app.json
+++ b/Localization/StringsConvertor/input/ko.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "게시물",
"following": "팔로잉",
diff --git a/Localization/StringsConvertor/input/nl.lproj/app.json b/Localization/StringsConvertor/input/nl.lproj/app.json
index 883b6a0ed..26ba573e1 100644
--- a/Localization/StringsConvertor/input/nl.lproj/app.json
+++ b/Localization/StringsConvertor/input/nl.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "berichten",
"following": "volgend",
diff --git a/Localization/StringsConvertor/input/pt-BR.lproj/app.json b/Localization/StringsConvertor/input/pt-BR.lproj/app.json
index cbb5b319e..f4793d56e 100644
--- a/Localization/StringsConvertor/input/pt-BR.lproj/app.json
+++ b/Localization/StringsConvertor/input/pt-BR.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "posts",
"following": "following",
diff --git a/Localization/StringsConvertor/input/pt.lproj/app.json b/Localization/StringsConvertor/input/pt.lproj/app.json
index 2a8634a67..93c3f9955 100644
--- a/Localization/StringsConvertor/input/pt.lproj/app.json
+++ b/Localization/StringsConvertor/input/pt.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "posts",
"following": "following",
diff --git a/Localization/StringsConvertor/input/ro.lproj/app.json b/Localization/StringsConvertor/input/ro.lproj/app.json
index 20fe425df..2c1f77d42 100644
--- a/Localization/StringsConvertor/input/ro.lproj/app.json
+++ b/Localization/StringsConvertor/input/ro.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "posts",
"following": "following",
diff --git a/Localization/StringsConvertor/input/ru.lproj/app.json b/Localization/StringsConvertor/input/ru.lproj/app.json
index 8a26f718d..082bced1c 100644
--- a/Localization/StringsConvertor/input/ru.lproj/app.json
+++ b/Localization/StringsConvertor/input/ru.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Подписан(а) на вас"
+ },
"dashboard": {
"posts": "посты",
"following": "подписки",
diff --git a/Localization/StringsConvertor/input/sv.lproj/app.json b/Localization/StringsConvertor/input/sv.lproj/app.json
index 802c731ce..224d466f3 100644
--- a/Localization/StringsConvertor/input/sv.lproj/app.json
+++ b/Localization/StringsConvertor/input/sv.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "inlägg",
"following": "följer",
diff --git a/Localization/StringsConvertor/input/th.lproj/app.json b/Localization/StringsConvertor/input/th.lproj/app.json
index dbd6153b0..94b43845d 100644
--- a/Localization/StringsConvertor/input/th.lproj/app.json
+++ b/Localization/StringsConvertor/input/th.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "โพสต์",
"following": "กำลังติดตาม",
diff --git a/Localization/StringsConvertor/input/tr.lproj/app.json b/Localization/StringsConvertor/input/tr.lproj/app.json
index d377b5da1..4e7b41942 100644
--- a/Localization/StringsConvertor/input/tr.lproj/app.json
+++ b/Localization/StringsConvertor/input/tr.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "gönderiler",
"following": "takip ediliyor",
diff --git a/Localization/StringsConvertor/input/vi.lproj/app.json b/Localization/StringsConvertor/input/vi.lproj/app.json
index 62c1d240c..60c13ca63 100644
--- a/Localization/StringsConvertor/input/vi.lproj/app.json
+++ b/Localization/StringsConvertor/input/vi.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Đang theo dõi bạn"
+ },
"dashboard": {
"posts": "tút",
"following": "theo dõi",
diff --git a/Localization/StringsConvertor/input/zh-Hans.lproj/app.json b/Localization/StringsConvertor/input/zh-Hans.lproj/app.json
index 3bc65e32c..c80c1ec83 100644
--- a/Localization/StringsConvertor/input/zh-Hans.lproj/app.json
+++ b/Localization/StringsConvertor/input/zh-Hans.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "关注了你"
+ },
"dashboard": {
"posts": "帖子",
"following": "正在关注",
diff --git a/Localization/StringsConvertor/input/zh-Hant.lproj/app.json b/Localization/StringsConvertor/input/zh-Hant.lproj/app.json
index cf910c43a..8dd672020 100644
--- a/Localization/StringsConvertor/input/zh-Hant.lproj/app.json
+++ b/Localization/StringsConvertor/input/zh-Hant.lproj/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "跟隨了您"
+ },
"dashboard": {
"posts": "嘟文",
"following": "跟隨中",
diff --git a/Localization/app.json b/Localization/app.json
index 2a8634a67..93c3f9955 100644
--- a/Localization/app.json
+++ b/Localization/app.json
@@ -417,6 +417,9 @@
}
},
"profile": {
+ "header": {
+ "follows_you": "Follows You"
+ },
"dashboard": {
"posts": "posts",
"following": "following",
diff --git a/Mastodon.xcodeproj/project.pbxproj b/Mastodon.xcodeproj/project.pbxproj
index efe519f74..4cf245769 100644
--- a/Mastodon.xcodeproj/project.pbxproj
+++ b/Mastodon.xcodeproj/project.pbxproj
@@ -108,7 +108,7 @@
5E0DEC05797A7E6933788DDB /* Pods_MastodonTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 452147B2903DF38070FE56A2 /* Pods_MastodonTests.framework */; };
5E44BF88AD33646E64727BCF /* Pods_MastodonTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD92E0F10BDE4FE7C4B999F2 /* Pods_MastodonTests.framework */; };
87FFDA5D898A5C42ADCB35E7 /* Pods_Mastodon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4ABE34829701A4496C5BB64 /* Pods_Mastodon.framework */; };
- DB0009A626AEE5DC009B9D2D /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = DB0009A926AEE5DC009B9D2D /* Intents.intentdefinition */; settings = {ATTRIBUTES = (no_codegen, ); }; };
+ DB0009A626AEE5DC009B9D2D /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = DB0009A926AEE5DC009B9D2D /* Intents.intentdefinition */; settings = {ATTRIBUTES = (codegen, ); }; };
DB0009A726AEE5DC009B9D2D /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = DB0009A926AEE5DC009B9D2D /* Intents.intentdefinition */; };
DB0140CF25C42AEE00F9F3CF /* OSLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0140CE25C42AEE00F9F3CF /* OSLog.swift */; };
DB023D26279FFB0A005AC798 /* ShareActivityProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB023D25279FFB0A005AC798 /* ShareActivityProvider.swift */; };
@@ -346,6 +346,8 @@
DB63F779279ABF9C00455B82 /* DataSourceFacade+Reblog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F778279ABF9C00455B82 /* DataSourceFacade+Reblog.swift */; };
DB63F77B279ACAE500455B82 /* DataSourceFacade+Favorite.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F77A279ACAE500455B82 /* DataSourceFacade+Favorite.swift */; };
DB647C5926F1EA2700F7F82C /* WizardPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB647C5826F1EA2700F7F82C /* WizardPreference.swift */; };
+ DB64BA452851F23000ADF1B7 /* MastodonAuthentication+Fetch.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB64BA442851F23000ADF1B7 /* MastodonAuthentication+Fetch.swift */; };
+ DB64BA482851F29300ADF1B7 /* Account+Fetch.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB64BA472851F29300ADF1B7 /* Account+Fetch.swift */; };
DB65C63727A2AF6C008BAC2E /* ReportItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB65C63627A2AF6C008BAC2E /* ReportItem.swift */; };
DB66728C25F9F8DC00D60309 /* ComposeViewModel+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB66728B25F9F8DC00D60309 /* ComposeViewModel+DataSource.swift */; };
DB66729625F9F91600D60309 /* ComposeStatusSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB66729525F9F91600D60309 /* ComposeStatusSection.swift */; };
@@ -649,13 +651,6 @@
remoteGlobalIDString = DB68047E2637CD4C00430867;
remoteInfo = AppShared;
};
- DB6804C92637CE3000430867 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = DB427DCA25BAA00100D1B89D /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = DB68047E2637CD4C00430867;
- remoteInfo = AppShared;
- };
DB8FABCC26AEC7B2008E5AF4 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = DB427DCA25BAA00100D1B89D /* Project object */;
@@ -1112,6 +1107,8 @@
DB63F778279ABF9C00455B82 /* DataSourceFacade+Reblog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceFacade+Reblog.swift"; sourceTree = ""; };
DB63F77A279ACAE500455B82 /* DataSourceFacade+Favorite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceFacade+Favorite.swift"; sourceTree = ""; };
DB647C5826F1EA2700F7F82C /* WizardPreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WizardPreference.swift; sourceTree = ""; };
+ DB64BA442851F23000ADF1B7 /* MastodonAuthentication+Fetch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MastodonAuthentication+Fetch.swift"; sourceTree = ""; };
+ DB64BA472851F29300ADF1B7 /* Account+Fetch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Account+Fetch.swift"; sourceTree = ""; };
DB65C63627A2AF6C008BAC2E /* ReportItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportItem.swift; sourceTree = ""; };
DB66728B25F9F8DC00D60309 /* ComposeViewModel+DataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ComposeViewModel+DataSource.swift"; sourceTree = ""; };
DB66729525F9F91600D60309 /* ComposeStatusSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeStatusSection.swift; sourceTree = ""; };
@@ -2601,6 +2598,23 @@
path = NotificationTimeline;
sourceTree = "";
};
+ DB64BA462851F23300ADF1B7 /* Model */ = {
+ isa = PBXGroup;
+ children = (
+ DB64BA442851F23000ADF1B7 /* MastodonAuthentication+Fetch.swift */,
+ DB64BA472851F29300ADF1B7 /* Account+Fetch.swift */,
+ );
+ path = Model;
+ sourceTree = "";
+ };
+ DB64BA492851F65F00ADF1B7 /* Handler */ = {
+ isa = PBXGroup;
+ children = (
+ DBB8AB4526AECDE200F6D281 /* SendPostIntentHandler.swift */,
+ );
+ path = Handler;
+ sourceTree = "";
+ };
DB65C63527A2AF52008BAC2E /* Report */ = {
isa = PBXGroup;
children = (
@@ -2892,7 +2906,8 @@
DBA4B0F926C269880077136E /* Intents.stringsdict */,
DB8FABD626AEC864008E5AF4 /* MastodonIntent.entitlements */,
DB8FABC926AEC7B2008E5AF4 /* IntentHandler.swift */,
- DBB8AB4526AECDE200F6D281 /* SendPostIntentHandler.swift */,
+ DB64BA462851F23300ADF1B7 /* Model */,
+ DB64BA492851F65F00ADF1B7 /* Handler */,
DBB8AB4B26AED0B800F6D281 /* Service */,
DB8FABCB26AEC7B2008E5AF4 /* Info.plist */,
);
@@ -3413,13 +3428,13 @@
buildConfigurationList = DB427DFC25BAA00100D1B89D /* Build configuration list for PBXNativeTarget "Mastodon" */;
buildPhases = (
7A04933A2AB1D5B758D4F908 /* [CP] Check Pods Manifest.lock */,
- DB3D100425BAA71500EAA174 /* ShellScript */,
+ 5532CB85BBE168B25B20720B /* [CP] Embed Pods Frameworks */,
+ DB427DD025BAA00100D1B89D /* Resources */,
DB427DCE25BAA00100D1B89D /* Sources */,
DB427DCF25BAA00100D1B89D /* Frameworks */,
- DB427DD025BAA00100D1B89D /* Resources */,
- 5532CB85BBE168B25B20720B /* [CP] Embed Pods Frameworks */,
DB89BA0825C10FD0008580ED /* Embed Frameworks */,
DBF8AE1B263293E400C9C23C /* Embed App Extensions */,
+ DB3D100425BAA71500EAA174 /* ShellScript */,
DB025B8E278D6448002F581E /* ShellScript */,
DB697DD2278F48D5004EF2F7 /* ShellScript */,
);
@@ -3428,7 +3443,6 @@
dependencies = (
DBF8AE19263293E400C9C23C /* PBXTargetDependency */,
DB6804852637CD4C00430867 /* PBXTargetDependency */,
- DB6804CA2637CE3000430867 /* PBXTargetDependency */,
DBC6461B26A170AB00B0E31B /* PBXTargetDependency */,
DB8FABCD26AEC7B2008E5AF4 /* PBXTargetDependency */,
);
@@ -4487,6 +4501,8 @@
DBB8AB4626AECDE200F6D281 /* SendPostIntentHandler.swift in Sources */,
DBB8AB4A26AED0B500F6D281 /* APIService.swift in Sources */,
DBB8AB4C26AED11300F6D281 /* APIService+APIError.swift in Sources */,
+ DB64BA452851F23000ADF1B7 /* MastodonAuthentication+Fetch.swift in Sources */,
+ DB64BA482851F29300ADF1B7 /* Account+Fetch.swift in Sources */,
DB6746E9278ED63F008A6B94 /* MastodonAuthenticationBox.swift in Sources */,
DBB8AB5226AED1B300F6D281 /* APIService+Status+Publish.swift in Sources */,
DB8FABCA26AEC7B2008E5AF4 /* IntentHandler.swift in Sources */,
@@ -4555,11 +4571,6 @@
target = DB68047E2637CD4C00430867 /* AppShared */;
targetProxy = DB6804A72637CDCC00430867 /* PBXContainerItemProxy */;
};
- DB6804CA2637CE3000430867 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = DB68047E2637CD4C00430867 /* AppShared */;
- targetProxy = DB6804C92637CE3000430867 /* PBXContainerItemProxy */;
- };
DB8FABCD26AEC7B2008E5AF4 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = DB8FABC526AEC7B2008E5AF4 /* MastodonIntent */;
@@ -4839,7 +4850,7 @@
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@@ -4869,7 +4880,7 @@
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@@ -4977,11 +4988,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 138;
+ DYLIB_CURRENT_VERSION = 140;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -5008,11 +5019,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 138;
+ DYLIB_CURRENT_VERSION = 140;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -5103,7 +5114,7 @@
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@@ -5171,11 +5182,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 138;
+ DYLIB_CURRENT_VERSION = 140;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -5200,7 +5211,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5223,7 +5234,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5247,7 +5258,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5271,7 +5282,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5295,7 +5306,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5319,7 +5330,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5343,7 +5354,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5430,7 +5441,7 @@
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@@ -5497,11 +5508,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 138;
+ DYLIB_CURRENT_VERSION = 140;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -5525,7 +5536,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5548,7 +5559,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5572,7 +5583,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5596,7 +5607,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -5619,7 +5630,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 138;
+ CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
diff --git a/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist b/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist
index 1c922a0b5..02dc81778 100644
--- a/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -24,17 +24,17 @@
Mastodon - RTL.xcscheme_^#shared#^_
orderHint
- 11
+ 12
Mastodon - Release.xcscheme_^#shared#^_
orderHint
- 4
+ 5
Mastodon - Snapshot.xcscheme_^#shared#^_
orderHint
- 6
+ 7
Mastodon - ar.xcscheme
@@ -114,7 +114,7 @@
MastodonIntent.xcscheme_^#shared#^_
orderHint
- 30
+ 34
MastodonIntents.xcscheme_^#shared#^_
@@ -129,12 +129,12 @@
NotificationService.xcscheme_^#shared#^_
orderHint
- 29
+ 32
ShareActionExtension.xcscheme_^#shared#^_
orderHint
- 31
+ 33
SuppressBuildableAutocreation
diff --git a/Mastodon/Info.plist b/Mastodon/Info.plist
index 0407f6502..1909cfab4 100644
--- a/Mastodon/Info.plist
+++ b/Mastodon/Info.plist
@@ -2,19 +2,6 @@
- NSAppTransportSecurity
-
- NSExceptionDomains
-
- onion
-
- NSExceptionAllowsInsecureHTTPLoads
-
- NSIncludesSubdomains
-
-
-
-
CADisableMinimumFrameDurationOnPhone
CFBundleDevelopmentRegion
@@ -30,7 +17,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 1.4.3
+ 1.4.4
CFBundleURLTypes
@@ -43,7 +30,7 @@
CFBundleVersion
- 138
+ 140
ITSAppUsesNonExemptEncryption
LSApplicationQueriesSchemes
@@ -59,6 +46,19 @@
LSRequiresIPhoneOS
+ NSAppTransportSecurity
+
+ NSExceptionDomains
+
+ onion
+
+ NSExceptionAllowsInsecureHTTPLoads
+
+ NSIncludesSubdomains
+
+
+
+
NSUserActivityTypes
SendPostIntent
diff --git a/Mastodon/Scene/Profile/About/ProfileAboutViewModel.swift b/Mastodon/Scene/Profile/About/ProfileAboutViewModel.swift
index 8498c6866..ff1e261a2 100644
--- a/Mastodon/Scene/Profile/About/ProfileAboutViewModel.swift
+++ b/Mastodon/Scene/Profile/About/ProfileAboutViewModel.swift
@@ -63,14 +63,9 @@ final class ProfileAboutViewModel {
.sink { [weak self] account, emojiMeta in
guard let self = self else { return }
guard let account = account else { return }
-
- self.profileInfo.fields = account.source?.fields?.compactMap { field in
- ProfileFieldItem.FieldValue(
- name: field.name,
- value: field.value,
- emojiMeta: emojiMeta
- )
- } ?? []
+
+ // update profileInfo will occurs race condition issue
+ // bind user.fields to profileInfo to avoid it
self.profileInfoEditing.fields = account.source?.fields?.compactMap { field in
ProfileFieldItem.FieldValue(
diff --git a/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift b/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift
index 808e1d7ba..b57bf95a5 100644
--- a/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift
+++ b/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift
@@ -88,6 +88,13 @@ extension ProfileHeaderView.ViewModel {
)
}
.store(in: &disposeBag)
+ // follows you
+ $relationshipActionOptionSet
+ .map { $0.contains(.followingBy) && !$0.contains(.isMyself) }
+ .sink { isFollowingBy in
+ view.followsYouBlurEffectView.isHidden = !isFollowingBy
+ }
+ .store(in: &disposeBag)
// avatar
Publishers.CombineLatest4(
$avatarImageURL,
@@ -102,7 +109,7 @@ extension ProfileHeaderView.ViewModel {
))
}
.store(in: &disposeBag)
- // blur
+ // blur for blocking & blockingBy
$relationshipActionOptionSet
.map { $0.contains(.blocking) || $0.contains(.blockingBy) }
.sink { needsImageOverlayBlurred in
diff --git a/Mastodon/Scene/Profile/Header/View/ProfileHeaderView.swift b/Mastodon/Scene/Profile/Header/View/ProfileHeaderView.swift
index 7257333d0..d99b90bc4 100644
--- a/Mastodon/Scene/Profile/Header/View/ProfileHeaderView.swift
+++ b/Mastodon/Scene/Profile/Header/View/ProfileHeaderView.swift
@@ -71,6 +71,16 @@ final class ProfileHeaderView: UIView {
}()
var bannerImageViewTopLayoutConstraint: NSLayoutConstraint!
var bannerImageViewBottomLayoutConstraint: NSLayoutConstraint!
+
+ let followsYouBlurEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .regular))
+ let followsYouVibrantEffectView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: UIBlurEffect(style: .regular), style: .label))
+ let followsYouLabel: UILabel = {
+ let label = UILabel()
+ label.font = UIFont.systemFont(ofSize: 15, weight: .regular)
+ label.text = "Follows You" // TODO: i18n
+ return label
+ }()
+ let followsYouMaskView = UIView()
let avatarImageViewBackgroundView: UIView = {
let view = UIView()
@@ -173,9 +183,6 @@ final class ProfileHeaderView: UIView {
button.titleLabel?.minimumScaleFactor = 0.5
return button
}()
-
- // let bioContainerView = UIView()
- // let fieldContainerStackView = UIStackView()
let bioMetaText: MetaText = {
let metaText = MetaText()
@@ -262,7 +269,41 @@ extension ProfileHeaderView {
bannerImageViewOverlayVisualEffectView.trailingAnchor.constraint(equalTo: bannerImageView.trailingAnchor),
bannerImageViewOverlayVisualEffectView.bottomAnchor.constraint(equalTo: bannerImageView.bottomAnchor),
])
+
+ // follows you
+ followsYouBlurEffectView.translatesAutoresizingMaskIntoConstraints = false
+ addSubview(followsYouBlurEffectView)
+ NSLayoutConstraint.activate([
+ layoutMarginsGuide.trailingAnchor.constraint(equalTo: followsYouBlurEffectView.trailingAnchor),
+ bannerContainerView.bottomAnchor.constraint(equalTo: followsYouBlurEffectView.bottomAnchor, constant: 16),
+ ])
+ followsYouBlurEffectView.layer.masksToBounds = true
+ followsYouBlurEffectView.layer.cornerRadius = 8
+ followsYouBlurEffectView.layer.cornerCurve = .continuous
+ followsYouBlurEffectView.isHidden = true
+ followsYouVibrantEffectView.translatesAutoresizingMaskIntoConstraints = false
+ followsYouBlurEffectView.contentView.addSubview(followsYouVibrantEffectView)
+ NSLayoutConstraint.activate([
+ followsYouVibrantEffectView.topAnchor.constraint(equalTo: followsYouBlurEffectView.topAnchor),
+ followsYouVibrantEffectView.leadingAnchor.constraint(equalTo: followsYouBlurEffectView.leadingAnchor),
+ followsYouVibrantEffectView.trailingAnchor.constraint(equalTo: followsYouBlurEffectView.trailingAnchor),
+ followsYouVibrantEffectView.bottomAnchor.constraint(equalTo: followsYouBlurEffectView.bottomAnchor),
+ ])
+
+ followsYouLabel.translatesAutoresizingMaskIntoConstraints = false
+ followsYouVibrantEffectView.contentView.addSubview(followsYouLabel)
+ NSLayoutConstraint.activate([
+ followsYouLabel.topAnchor.constraint(equalTo: followsYouVibrantEffectView.topAnchor, constant: 4),
+ followsYouLabel.leadingAnchor.constraint(equalTo: followsYouVibrantEffectView.leadingAnchor, constant: 6),
+ followsYouVibrantEffectView.trailingAnchor.constraint(equalTo: followsYouLabel.trailingAnchor, constant: 6),
+ followsYouVibrantEffectView.bottomAnchor.constraint(equalTo: followsYouLabel.bottomAnchor, constant: 4),
+ ])
+
+ followsYouMaskView.frame = CGRect(x: 0, y: 0, width: 1000, height: 1000)
+ followsYouMaskView.backgroundColor = .red
+ followsYouBlurEffectView.mask = followsYouMaskView
+
// avatar
avatarImageViewBackgroundView.translatesAutoresizingMaskIntoConstraints = false
addSubview(avatarImageViewBackgroundView)
@@ -406,6 +447,7 @@ extension ProfileHeaderView {
container.addArrangedSubview(bioMetaText.textView)
bringSubviewToFront(bannerContainerView)
+ bringSubviewToFront(followsYouBlurEffectView)
bringSubviewToFront(avatarImageViewBackgroundView)
statusDashboardView.delegate = self
diff --git a/Mastodon/Scene/Profile/ProfileViewController.swift b/Mastodon/Scene/Profile/ProfileViewController.swift
index 6a51ff599..96af86026 100644
--- a/Mastodon/Scene/Profile/ProfileViewController.swift
+++ b/Mastodon/Scene/Profile/ProfileViewController.swift
@@ -305,7 +305,10 @@ extension ProfileViewController {
}
// about
- let aboutViewModel = profilePagingViewController.viewModel.profileAboutViewController.viewModel!
+ let aboutViewModel = viewModel.profileAboutViewModel
+ viewModel.$user
+ .assign(to: \.user, on: aboutViewModel)
+ .store(in: &disposeBag)
viewModel.$isEditing
.assign(to: \.isEditing, on: aboutViewModel)
.store(in: &disposeBag)
@@ -584,6 +587,22 @@ extension ProfileViewController: TabBarPagerDelegate {
progress = 0
}
+ // setup follows you mask
+ // 1. set mask size
+ profileHeaderViewController.profileHeaderView.followsYouMaskView.frame = profileHeaderViewController.profileHeaderView.followsYouBlurEffectView.bounds
+ // 2. check follows you view overflow navigation bar or not
+ let followsYouBlurEffectViewInWindow = profileHeaderViewController.profileHeaderView.convert(
+ profileHeaderViewController.profileHeaderView.followsYouBlurEffectView.frame,
+ to: nil
+ )
+ if followsYouBlurEffectViewInWindow.minY < tabBarPagerController.containerScrollView.safeAreaInsets.top {
+ let offestY = tabBarPagerController.containerScrollView.safeAreaInsets.top - followsYouBlurEffectViewInWindow.minY
+ let height = profileHeaderViewController.profileHeaderView.followsYouMaskView.frame.height
+ profileHeaderViewController.profileHeaderView.followsYouMaskView.frame.origin.y = min(offestY, height)
+ } else {
+ profileHeaderViewController.profileHeaderView.followsYouMaskView.frame.origin.y = .zero
+ }
+
// setup titleView offset and fade avatar
profileHeaderViewController.updateHeaderScrollProgress(progress, throttle: throttle)
diff --git a/Mastodon/Scene/Profile/ProfileViewModel.swift b/Mastodon/Scene/Profile/ProfileViewModel.swift
index 91866b851..79bfe8986 100644
--- a/Mastodon/Scene/Profile/ProfileViewModel.swift
+++ b/Mastodon/Scene/Profile/ProfileViewModel.swift
@@ -163,7 +163,7 @@ class ProfileViewModel: NSObject {
} // end Task
}
.store(in: &disposeBag)
-//
+
let isBlockingOrBlocked = Publishers.CombineLatest(
relationshipViewModel.$isBlocking,
relationshipViewModel.$isBlockingBy
diff --git a/Mastodon/Service/APIService/APIService+Notification.swift b/Mastodon/Service/APIService/APIService+Notification.swift
index 921f75d01..88c69847b 100644
--- a/Mastodon/Service/APIService/APIService+Notification.swift
+++ b/Mastodon/Service/APIService/APIService+Notification.swift
@@ -37,11 +37,8 @@ extension APIService {
]
case .mentions:
return [
- .follow,
- .followRequest,
- .reblog,
- .favourite,
- .poll
+ .mention,
+ .status,
]
}
}(),
diff --git a/MastodonIntent/Base.lproj/Intents.intentdefinition b/MastodonIntent/Base.lproj/Intents.intentdefinition
index 6ccb0318c..509591d5c 100644
--- a/MastodonIntent/Base.lproj/Intents.intentdefinition
+++ b/MastodonIntent/Base.lproj/Intents.intentdefinition
@@ -53,11 +53,11 @@
INIntentDefinitionNamespace
BvMBE4
INIntentDefinitionSystemVersion
- 20G80
+ 21F79
INIntentDefinitionToolsBuildVersion
- 12E507
+ 13F100
INIntentDefinitionToolsVersion
- 12.5.1
+ 13.4.1
INIntents
@@ -74,10 +74,10 @@
INIntentKeyParameter
content
INIntentLastParameterTag
- 3
+ 6
INIntentManagedParameterCombinations
- content,visibility
+ content,visibility,accounts
INIntentParameterCombinationSupportsBackgroundExecution
@@ -91,6 +91,19 @@
SendPost
INIntentParameterCombinations
+ accounts,visibility,content
+
+ INIntentParameterCombinationSubtitle
+ ${content}. Post via ${accounts}. (${visibility})
+ INIntentParameterCombinationSubtitleID
+ YMuITB
+ INIntentParameterCombinationSupportsBackgroundExecution
+
+ INIntentParameterCombinationTitle
+ Post on Mastodon
+ INIntentParameterCombinationTitleID
+ D2h76g
+
content
INIntentParameterCombinationSubtitle
@@ -109,7 +122,7 @@
INIntentParameterCombinationIsPrimary
INIntentParameterCombinationSubtitle
- ${content}, ${visibility}
+ ${content}. (${visibility})
INIntentParameterCombinationSubtitleID
ayoYEb
INIntentParameterCombinationSupportsBackgroundExecution
@@ -170,6 +183,69 @@
INIntentParameterType
String
+
+ INIntentParameterConfigurable
+
+ INIntentParameterCustomDisambiguation
+
+ INIntentParameterDisplayName
+ Accounts
+ INIntentParameterDisplayNameID
+ nQtHsT
+ INIntentParameterDisplayPriority
+ 2
+ INIntentParameterName
+ accounts
+ INIntentParameterObjectType
+ Account
+ INIntentParameterObjectTypeNamespace
+ BvMBE4
+ INIntentParameterPromptDialogs
+
+
+ INIntentParameterPromptDialogCustom
+
+ INIntentParameterPromptDialogType
+ Configuration
+
+
+ INIntentParameterPromptDialogCustom
+
+ INIntentParameterPromptDialogType
+ Primary
+
+
+ INIntentParameterPromptDialogCustom
+
+ INIntentParameterPromptDialogFormatString
+ There are ${count} options matching ‘${accounts}’.
+ INIntentParameterPromptDialogFormatStringID
+ ciITyC
+ INIntentParameterPromptDialogType
+ DisambiguationIntroduction
+
+
+ INIntentParameterPromptDialogCustom
+
+ INIntentParameterPromptDialogFormatString
+ Just to confirm, you wanted ‘${accounts}’?
+ INIntentParameterPromptDialogFormatStringID
+ 4kVQfr
+ INIntentParameterPromptDialogType
+ Confirmation
+
+
+ INIntentParameterSupportsDynamicEnumeration
+
+ INIntentParameterSupportsMultipleValues
+
+ INIntentParameterSupportsResolution
+
+ INIntentParameterTag
+ 6
+ INIntentParameterType
+ Object
+
INIntentParameterConfigurable
@@ -180,7 +256,7 @@
INIntentParameterDisplayNameID
ZbSjzC
INIntentParameterDisplayPriority
- 2
+ 3
INIntentParameterEnumType
PostVisibility
INIntentParameterEnumTypeNamespace
@@ -267,26 +343,28 @@
INIntentResponseLastParameterTag
- 7
+ 8
INIntentResponseOutput
- post
+ posts
INIntentResponseParameters
INIntentResponseParameterDisplayName
- Post
+ Posts
INIntentResponseParameterDisplayNameID
ZKJSNu
INIntentResponseParameterDisplayPriority
1
INIntentResponseParameterName
- post
+ posts
INIntentResponseParameterObjectType
Post
INIntentResponseParameterObjectTypeNamespace
BvMBE4
+ INIntentResponseParameterSupportsMultipleValues
+
INIntentResponseParameterTag
- 6
+ 8
INIntentResponseParameterType
Object
@@ -395,6 +473,97 @@
+
+ INTypeDisplayName
+ Account
+ INTypeDisplayNameID
+ Gcmnot
+ INTypeLastPropertyTag
+ 101
+ INTypeName
+ Account
+ INTypeProperties
+
+
+ INTypePropertyDefault
+
+ INTypePropertyDisplayPriority
+ 1
+ INTypePropertyName
+ identifier
+ INTypePropertyTag
+ 1
+ INTypePropertyType
+ String
+
+
+ INTypePropertyDefault
+
+ INTypePropertyDisplayPriority
+ 2
+ INTypePropertyName
+ displayString
+ INTypePropertyTag
+ 2
+ INTypePropertyType
+ String
+
+
+ INTypePropertyDefault
+
+ INTypePropertyDisplayPriority
+ 3
+ INTypePropertyName
+ pronunciationHint
+ INTypePropertyTag
+ 3
+ INTypePropertyType
+ String
+
+
+ INTypePropertyDefault
+
+ INTypePropertyDisplayPriority
+ 4
+ INTypePropertyName
+ alternativeSpeakableMatches
+ INTypePropertySupportsMultipleValues
+
+ INTypePropertyTag
+ 4
+ INTypePropertyType
+ SpeakableString
+
+
+ INTypePropertyDisplayName
+ Name
+ INTypePropertyDisplayNameID
+ Zim0Js
+ INTypePropertyDisplayPriority
+ 5
+ INTypePropertyName
+ name
+ INTypePropertyTag
+ 100
+ INTypePropertyType
+ String
+
+
+ INTypePropertyDisplayName
+ Username
+ INTypePropertyDisplayNameID
+ 3sNRTG
+ INTypePropertyDisplayPriority
+ 6
+ INTypePropertyName
+ username
+ INTypePropertyTag
+ 101
+ INTypePropertyType
+ String
+
+
+
diff --git a/MastodonIntent/Handler/SendPostIntentHandler.swift b/MastodonIntent/Handler/SendPostIntentHandler.swift
new file mode 100644
index 000000000..0da4e113b
--- /dev/null
+++ b/MastodonIntent/Handler/SendPostIntentHandler.swift
@@ -0,0 +1,152 @@
+//
+// SendPostIntentHandler.swift
+// MastodonIntent
+//
+// Created by Cirno MainasuK on 2021-7-26.
+//
+
+import Foundation
+import Intents
+import Combine
+import CoreData
+import CoreDataStack
+import MastodonSDK
+
+final class SendPostIntentHandler: NSObject {
+
+ var disposeBag = Set()
+
+ let coreDataStack = CoreDataStack()
+ lazy var managedObjectContext = coreDataStack.persistentContainer.viewContext
+ lazy var api = APIService.shared
+
+}
+
+// MARK: - SendPostIntentHandling
+extension SendPostIntentHandler: SendPostIntentHandling {
+
+ func handle(intent: SendPostIntent) async -> SendPostIntentResponse {
+ guard let content = intent.content else {
+ return SendPostIntentResponse(code: .failure, userActivity: nil)
+ }
+
+ let visibility: Mastodon.Entity.Status.Visibility = {
+ switch intent.visibility {
+ case .unknown: return .public
+ case .public: return .public
+ case .followersOnly: return .private
+ }
+ }()
+
+ do {
+ // fetch authentications from
+ // user pick accounts
+ // or fallback to active account
+ let mastodonAuthentications: [MastodonAuthentication]
+ let accounts = intent.accounts ?? []
+ if accounts.isEmpty {
+ let request = MastodonAuthentication.sortedFetchRequest
+ let authentications = try managedObjectContext.fetch(request)
+ let _authentication = authentications.sorted(by: { $0.activedAt > $1.activedAt }).first
+
+ guard let authentication = _authentication else {
+ let failureReason = APIService.APIError.implicit(.authenticationMissing).errorDescription ?? "Fail to Send Post"
+ return SendPostIntentResponse.failure(failureReason: failureReason)
+ }
+ mastodonAuthentications = [authentication]
+ } else {
+ mastodonAuthentications = try accounts.mastodonAuthentication(in: managedObjectContext)
+ }
+
+ let authenticationBoxes = mastodonAuthentications.map { authentication in
+ MastodonAuthenticationBox(
+ authenticationRecord: .init(objectID: authentication.objectID),
+ domain: authentication.domain,
+ userID: authentication.userID,
+ appAuthorization: .init(accessToken: authentication.appAccessToken),
+ userAuthorization: .init(accessToken: authentication.userAccessToken)
+ )
+ }
+
+ var posts: [Post] = []
+ for authenticationBox in authenticationBoxes {
+ let idempotencyKey = UUID().uuidString
+ let response = try await api.publishStatus(
+ domain: authenticationBox.domain,
+ idempotencyKey: idempotencyKey,
+ query: .init(
+ status: content,
+ mediaIDs: nil,
+ pollOptions: nil,
+ pollExpiresIn: nil,
+ inReplyToID: nil,
+ sensitive: nil,
+ spoilerText: nil,
+ visibility: visibility
+ ),
+ authenticationBox: authenticationBox
+ )
+ let post = Post(
+ identifier: response.value.id,
+ display: response.value.account.acct,
+ subtitle: content,
+ image: response.value.account.avatarImageURL().flatMap { INImage(url: $0) }
+ )
+ posts.append(post)
+ } // end for in
+
+ let intentResponse = SendPostIntentResponse(code: .success, userActivity: nil)
+ intentResponse.posts = posts
+
+ return intentResponse
+ } catch {
+ let intentResponse = SendPostIntentResponse(code: .failure, userActivity: nil)
+ if let error = error as? LocalizedError {
+ intentResponse.failureReason = [
+ error.errorDescription,
+ error.failureReason,
+ error.recoverySuggestion
+ ]
+ .compactMap { $0 }
+ .joined(separator: ", ")
+ } else {
+ intentResponse.failureReason = error.localizedDescription
+ }
+ return intentResponse
+ }
+ } // end func
+
+ // content
+ func resolveContent(for intent: SendPostIntent, with completion: @escaping (INStringResolutionResult) -> Void) {
+ guard let content = intent.content, !content.isEmpty else {
+ completion(.needsValue())
+ return
+ }
+
+ completion(.success(with: content))
+ }
+
+ // accounts
+ func resolveAccounts(for intent: SendPostIntent) async -> [AccountResolutionResult] {
+ guard let accounts = intent.accounts, !accounts.isEmpty else {
+ return [AccountResolutionResult.needsValue()]
+ }
+
+ let results = accounts.map { account in
+ AccountResolutionResult.success(with: account)
+ }
+
+ return results
+ }
+
+ func provideAccountsOptionsCollection(for intent: SendPostIntent) async throws -> INObjectCollection {
+ let accounts = try await Account.fetch(in: managedObjectContext)
+ return .init(items: accounts)
+ }
+
+ // visibility
+ func resolveVisibility(for intent: SendPostIntent, with completion: @escaping (PostVisibilityResolutionResult) -> Void) {
+ completion(.success(with: intent.visibility))
+ }
+
+}
diff --git a/MastodonIntent/Info.plist b/MastodonIntent/Info.plist
index 2f2b230f0..cf6041f3c 100644
--- a/MastodonIntent/Info.plist
+++ b/MastodonIntent/Info.plist
@@ -17,9 +17,9 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 1.4.3
+ 1.4.4
CFBundleVersion
- 138
+ 140
NSExtension
NSExtensionAttributes
diff --git a/MastodonIntent/Model/Account+Fetch.swift b/MastodonIntent/Model/Account+Fetch.swift
new file mode 100644
index 000000000..065ccac12
--- /dev/null
+++ b/MastodonIntent/Model/Account+Fetch.swift
@@ -0,0 +1,51 @@
+//
+// Account.swift
+// MastodonIntent
+//
+// Created by MainasuK on 2022-6-9.
+//
+
+import Foundation
+import CoreData
+import CoreDataStack
+import Intents
+
+extension Account {
+
+ @MainActor
+ static func fetch(in managedObjectContext: NSManagedObjectContext) async throws -> [Account] {
+ // get accounts
+ let accounts: [Account] = try await managedObjectContext.perform {
+ let results = try MastodonAuthentication.fetch(in: managedObjectContext)
+ let accounts = results.compactMap { mastodonAuthentication -> Account? in
+ let user = mastodonAuthentication.user
+ let account = Account(
+ identifier: mastodonAuthentication.identifier.uuidString,
+ display: user.displayNameWithFallback,
+ subtitle: user.acctWithDomain,
+ image: user.avatarImageURL().flatMap { INImage(url: $0) }
+ )
+ account.name = user.displayNameWithFallback
+ account.username = user.acctWithDomain
+ return account
+ }
+ return accounts
+ } // end managedObjectContext.perform
+
+ return accounts
+ }
+
+}
+
+extension Array where Element == Account {
+ func mastodonAuthentication(in managedObjectContext: NSManagedObjectContext) throws -> [MastodonAuthentication] {
+ let identifiers = self
+ .compactMap { $0.identifier }
+ .compactMap { UUID(uuidString: $0) }
+ let request = MastodonAuthentication.sortedFetchRequest
+ request.predicate = MastodonAuthentication.predicate(identifiers: identifiers)
+ let results = try managedObjectContext.fetch(request)
+ return results
+ }
+
+}
diff --git a/MastodonIntent/Model/MastodonAuthentication+Fetch.swift b/MastodonIntent/Model/MastodonAuthentication+Fetch.swift
new file mode 100644
index 000000000..9d1201000
--- /dev/null
+++ b/MastodonIntent/Model/MastodonAuthentication+Fetch.swift
@@ -0,0 +1,20 @@
+//
+// MastodonAuthentication.swift
+// MastodonIntent
+//
+// Created by MainasuK on 2022-6-9.
+//
+
+import Foundation
+import CoreData
+import CoreDataStack
+
+extension MastodonAuthentication {
+
+ static func fetch(in managedObjectContext: NSManagedObjectContext) throws -> [MastodonAuthentication] {
+ let request = MastodonAuthentication.sortedFetchRequest
+ let results = try managedObjectContext.fetch(request)
+ return results
+ }
+
+}
diff --git a/MastodonIntent/SendPostIntentHandler.swift b/MastodonIntent/SendPostIntentHandler.swift
deleted file mode 100644
index 1ad843088..000000000
--- a/MastodonIntent/SendPostIntentHandler.swift
+++ /dev/null
@@ -1,106 +0,0 @@
-//
-// SendPostIntentHandler.swift
-// MastodonIntent
-//
-// Created by Cirno MainasuK on 2021-7-26.
-//
-
-import Foundation
-import Intents
-import Combine
-import CoreData
-import CoreDataStack
-import MastodonSDK
-
-final class SendPostIntentHandler: NSObject, SendPostIntentHandling {
-
- var disposeBag = Set()
-
- lazy var coreDataStack = CoreDataStack()
- lazy var managedObjectContext = coreDataStack.persistentContainer.viewContext
-
- func handle(intent: SendPostIntent, completion: @escaping (SendPostIntentResponse) -> Void) {
- managedObjectContext.performAndWait {
- let request = MastodonAuthentication.sortedFetchRequest
- let authentications = (try? self.managedObjectContext.fetch(request)) ?? []
- let _authentication = authentications.sorted(by: { $0.activedAt > $1.activedAt }).first
-
- guard let authentication = _authentication else {
- let failureReason = APIService.APIError.implicit(.authenticationMissing).errorDescription ?? "Fail to Send Post"
- completion(SendPostIntentResponse.failure(failureReason: failureReason))
- return
- }
-
- let box = MastodonAuthenticationBox(
- authenticationRecord: .init(objectID: authentication.objectID),
- domain: authentication.domain,
- userID: authentication.userID,
- appAuthorization: .init(accessToken: authentication.appAccessToken),
- userAuthorization: .init(accessToken: authentication.userAccessToken)
- )
-
- let visibility: Mastodon.Entity.Status.Visibility = {
- switch intent.visibility {
- case .unknown: return .public
- case .public: return .public
- case .followersOnly: return .private
- }
- }()
- let query = Mastodon.API.Statuses.PublishStatusQuery(
- status: intent.content,
- mediaIDs: nil,
- pollOptions: nil,
- pollExpiresIn: nil,
- inReplyToID: nil,
- sensitive: nil,
- spoilerText: nil,
- visibility: visibility
- )
-
- let idempotencyKey = UUID().uuidString
-
- Just(Void())
- .asyncMap {
- try await APIService.shared.publishStatus(
- domain: box.domain,
- idempotencyKey: idempotencyKey,
- query: query,
- authenticationBox: box
- )
- }
- .sink { _completion in
- switch _completion {
- case .failure(let error):
- let failureReason = error.localizedDescription
- completion(SendPostIntentResponse.failure(failureReason: failureReason))
- case .finished:
- break
- }
- } receiveValue: { response in
- let post = Post(identifier: response.value.id, display: intent.content ?? "")
- post.url = URL(string: response.value.url ?? response.value.uri)
- let result = SendPostIntentResponse(code: .success, userActivity: nil)
- result.post = post
- completion(result)
- }
- .store(in: &disposeBag)
- }
-
- }
-
- func resolveContent(for intent: SendPostIntent, with completion: @escaping (INStringResolutionResult) -> Void) {
- guard let content = intent.content, !content.isEmpty else {
- completion(.needsValue())
- return
- }
-
- completion(.success(with: content))
- }
-
- func resolveVisibility(for intent: SendPostIntent, with completion: @escaping (PostVisibilityResolutionResult) -> Void) {
- completion(.success(with: intent.visibility))
- }
-
-
-
-}
diff --git a/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/MastodonAuthentication.swift b/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/MastodonAuthentication.swift
index 7aafd65a4..1c5c40851 100644
--- a/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/MastodonAuthentication.swift
+++ b/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/MastodonAuthentication.swift
@@ -171,4 +171,12 @@ extension MastodonAuthentication {
return NSPredicate(format: "%K == %@", #keyPath(MastodonAuthentication.userAccessToken), userAccessToken)
}
+ public static func predicate(identifier: UUID) -> NSPredicate {
+ return NSPredicate(format: "%K == %@", #keyPath(MastodonAuthentication.identifier), identifier as NSUUID)
+ }
+
+ public static func predicate(identifiers: [UUID]) -> NSPredicate {
+ return NSPredicate(format: "%K IN %@", #keyPath(MastodonAuthentication.identifier), identifiers as [NSUUID])
+ }
+
}
diff --git a/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/MastodonUser.swift b/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/MastodonUser.swift
index 4b16b7c7b..85e844b09 100644
--- a/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/MastodonUser.swift
+++ b/MastodonSDK/Sources/CoreDataStack/Entity/Mastodon/MastodonUser.swift
@@ -362,82 +362,6 @@ extension MastodonUser: AutoGenerateProperty {
}
// sourcery:end
}
-
-//extension MastodonUser {
-// public struct Property {
-// public let identifier: String
-// public let domain: String
-//
-// public let id: String
-// public let acct: String
-// public let username: String
-// public let displayName: String
-// public let avatar: String
-// public let avatarStatic: String?
-// public let header: String
-// public let headerStatic: String?
-// public let note: String?
-// public let url: String?
-// public let emojisData: Data?
-// public let fieldsData: Data?
-// public let statusesCount: Int
-// public let followingCount: Int
-// public let followersCount: Int
-// public let locked: Bool
-// public let bot: Bool?
-// public let suspended: Bool?
-//
-// public let createdAt: Date
-// public let networkDate: Date
-//
-// public init(
-// id: String,
-// domain: String,
-// acct: String,
-// username: String,
-// displayName: String,
-// avatar: String,
-// avatarStatic: String?,
-// header: String,
-// headerStatic: String?,
-// note: String?,
-// url: String?,
-// emojisData: Data?,
-// fieldsData: Data?,
-// statusesCount: Int,
-// followingCount: Int,
-// followersCount: Int,
-// locked: Bool,
-// bot: Bool?,
-// suspended: Bool?,
-// createdAt: Date,
-// networkDate: Date
-// ) {
-// self.identifier = id + "@" + domain
-// self.domain = domain
-// self.id = id
-// self.acct = acct
-// self.username = username
-// self.displayName = displayName
-// self.avatar = avatar
-// self.avatarStatic = avatarStatic
-// self.header = header
-// self.headerStatic = headerStatic
-// self.note = note
-// self.url = url
-// self.emojisData = emojisData
-// self.fieldsData = fieldsData
-// self.statusesCount = statusesCount
-// self.followingCount = followingCount
-// self.followersCount = followersCount
-// self.locked = locked
-// self.bot = bot
-// self.suspended = suspended
-// self.createdAt = createdAt
-// self.networkDate = networkDate
-// }
-// }
-//}
// MARK: - AutoUpdatableObject
extension MastodonUser: AutoUpdatableObject {
diff --git a/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift b/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift
index 957071a21..904f43a35 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift
+++ b/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift
@@ -678,6 +678,10 @@ public enum L10n {
public static let label = L10n.tr("Localizable", "Scene.Profile.Fields.Placeholder.Label")
}
}
+ public enum Header {
+ /// Follows You
+ public static let followsYou = L10n.tr("Localizable", "Scene.Profile.Header.FollowsYou")
+ }
public enum RelationshipActionAlert {
public enum ConfirmBlockUser {
/// Confirm to block %@
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings
index 6cf6275b5..d93d06d5e 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ar.lproj/Localizable.strings
@@ -246,6 +246,7 @@
"Scene.Profile.Fields.AddRow" = "إضافة صف";
"Scene.Profile.Fields.Placeholder.Content" = "المُحتَوى";
"Scene.Profile.Fields.Placeholder.Label" = "التسمية";
+"Scene.Profile.Header.FollowsYou" = "يُتابِعُك";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "تأكيدُ حَظر %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "حَظرُ الحِساب";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "تأكيدُ كَتم %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings
index 578e60d34..e6a706391 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ca.lproj/Localizable.strings
@@ -246,6 +246,7 @@ carregat a Mastodon.";
"Scene.Profile.Fields.AddRow" = "Afegeix fila";
"Scene.Profile.Fields.Placeholder.Content" = "Contingut";
"Scene.Profile.Fields.Placeholder.Label" = "Etiqueta";
+"Scene.Profile.Header.FollowsYou" = "Et segueix";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirma per a bloquejar %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Bloqueja el Compte";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Confirma per a silenciar %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings
index 628059868..f87c284d9 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ckb.lproj/Localizable.strings
@@ -245,6 +245,7 @@
"Scene.Profile.Fields.AddRow" = "ڕیز زیاد بکە";
"Scene.Profile.Fields.Placeholder.Content" = "ناوەڕۆک";
"Scene.Profile.Fields.Placeholder.Label" = "ناونیشان";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "دڵنیا ببەوە بۆ ئاستەنگکردنی %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "ئاستەنگی بکە";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "دڵیا ببەوە بۆ بێدەنگکردنی %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings
index d5e8be0a2..92e9fb074 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/de.lproj/Localizable.strings
@@ -246,6 +246,7 @@ kann nicht auf Mastodon hochgeladen werden.";
"Scene.Profile.Fields.AddRow" = "Zeile hinzufügen";
"Scene.Profile.Fields.Placeholder.Content" = "Inhalt";
"Scene.Profile.Fields.Placeholder.Label" = "Bezeichnung";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Bestätige %@ zu blockieren";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Konto blockieren";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Bestätige %@ stumm zu schalten";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings
index 4ce7015d7..6c6dcc72b 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings
@@ -246,6 +246,7 @@ uploaded to Mastodon.";
"Scene.Profile.Fields.AddRow" = "Add Row";
"Scene.Profile.Fields.Placeholder.Content" = "Content";
"Scene.Profile.Fields.Placeholder.Label" = "Label";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirm to block %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Block Account";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Confirm to mute %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings
index 4a883ff45..4fe1c35c3 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/es.lproj/Localizable.strings
@@ -247,6 +247,7 @@ pulsa en el enlace para confirmar tu cuenta.";
"Scene.Profile.Fields.AddRow" = "Añadir Fila";
"Scene.Profile.Fields.Placeholder.Content" = "Contenido";
"Scene.Profile.Fields.Placeholder.Label" = "Nombre para el campo";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirmar para bloquear a %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Bloquear cuenta";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Confirmar para silenciar %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings
index 67e1966c9..3d25819cf 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/eu.lproj/Localizable.strings
@@ -246,6 +246,7 @@ Mastodonera igo.";
"Scene.Profile.Fields.AddRow" = "Gehitu errenkada";
"Scene.Profile.Fields.Placeholder.Content" = "Edukia";
"Scene.Profile.Fields.Placeholder.Label" = "Etiketa";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Berretsi %@ blokeatzea";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Blokeatu kontua";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Berretsi %@ mututzea";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings
index 1fb8fbc46..546048595 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/fi.lproj/Localizable.strings
@@ -246,6 +246,7 @@ uploaded to Mastodon.";
"Scene.Profile.Fields.AddRow" = "Lisää rivi";
"Scene.Profile.Fields.Placeholder.Content" = "Sisältö";
"Scene.Profile.Fields.Placeholder.Label" = "Nimi";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirm to block %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Block Account";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Confirm to mute %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings
index b7a5071dd..2136ca90a 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/fr.lproj/Localizable.strings
@@ -246,6 +246,7 @@ téléversé sur Mastodon.";
"Scene.Profile.Fields.AddRow" = "Ajouter une rangée";
"Scene.Profile.Fields.Placeholder.Content" = "Contenu";
"Scene.Profile.Fields.Placeholder.Label" = "Étiquette";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirmer le blocage de %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Bloquer le compte";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Êtes-vous sûr de vouloir mettre en sourdine %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings
index 9638d561a..4f8479bda 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/gd.lproj/Localizable.strings
@@ -247,6 +247,7 @@ thoir gnogag air a’ chunntas a dhearbhadh a’ chunntais agad.";
"Scene.Profile.Fields.AddRow" = "Cuir ràgh ris";
"Scene.Profile.Fields.Placeholder.Content" = "Susbaint";
"Scene.Profile.Fields.Placeholder.Label" = "Leubail";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Dearbh bacadh %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Bac an cunntas";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Dearbh mùchadh %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings
index a34df4ae8..aa4bea028 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/gl.lproj/Localizable.strings
@@ -246,6 +246,7 @@ ser subido a Mastodon.";
"Scene.Profile.Fields.AddRow" = "Engadir fila";
"Scene.Profile.Fields.Placeholder.Content" = "Contido";
"Scene.Profile.Fields.Placeholder.Label" = "Etiqueta";
+"Scene.Profile.Header.FollowsYou" = "Séguete";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirma o bloqueo de %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Bloquear Conta";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Confirma Acalar a %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings
index 19e098e0f..fad6c654e 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/it.lproj/Localizable.strings
@@ -226,7 +226,7 @@ caricato su Mastodon.";
"Scene.Notification.Keyobard.ShowEverything" = "Mostra Tutto";
"Scene.Notification.Keyobard.ShowMentions" = "Mostra Menzioni";
"Scene.Notification.NotificationDescription.FavoritedYourPost" = "ha apprezzato il tuo post";
-"Scene.Notification.NotificationDescription.FollowedYou" = "ti ha seguito";
+"Scene.Notification.NotificationDescription.FollowedYou" = "ha iniziato a seguirti";
"Scene.Notification.NotificationDescription.MentionedYou" = "ti ha menzionato";
"Scene.Notification.NotificationDescription.PollHasEnded" = "sondaggio terminato";
"Scene.Notification.NotificationDescription.RebloggedYourPost" = "ha condiviso il tuo post";
@@ -246,6 +246,7 @@ caricato su Mastodon.";
"Scene.Profile.Fields.AddRow" = "Aggiungi riga";
"Scene.Profile.Fields.Placeholder.Content" = "Contenuto";
"Scene.Profile.Fields.Placeholder.Label" = "Etichetta";
+"Scene.Profile.Header.FollowsYou" = "Ti segue";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confermi di bloccare %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Blocca account";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Confermi di silenziare %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings
index fb4f5d9d6..b8fcca439 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ja.lproj/Localizable.strings
@@ -241,6 +241,7 @@
"Scene.Profile.Fields.AddRow" = "行追加";
"Scene.Profile.Fields.Placeholder.Content" = "コンテンツ";
"Scene.Profile.Fields.Placeholder.Label" = "ラベル";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirm to block %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Block Account";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Confirm to mute %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings
index d9dc29100..d382a5d57 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.strings
@@ -208,15 +208,15 @@ Ad d-yettwasali ɣef Mastodon.";
"Scene.Discovery.Tabs.Hashtags" = "Ihacṭagen";
"Scene.Discovery.Tabs.News" = "Isallen";
"Scene.Discovery.Tabs.Posts" = "Tisuffaɣ";
-"Scene.Familiarfollowers.FollowedByNames" = "Followed by %@";
-"Scene.Familiarfollowers.Title" = "Followers you familiar";
+"Scene.Familiarfollowers.FollowedByNames" = "Yeṭṭafar-it %@";
+"Scene.Familiarfollowers.Title" = "Ineḍfaren i tessneḍ";
"Scene.Favorite.Title" = "Ismenyifen-ik·im";
-"Scene.FavoritedBy.Title" = "Favorited By";
+"Scene.FavoritedBy.Title" = "Ismenyaf-it";
"Scene.Follower.Footer" = "Ineḍfaren seg yiqeddacen-nniḍen ur d-ttwaskanen ara.";
"Scene.Follower.Title" = "aneḍfar";
"Scene.Following.Footer" = "Ineḍfaren seg yiqeddacen-nniḍen ur d-ttwaskanen ara.";
"Scene.Following.Title" = "yeṭṭafar";
-"Scene.HomeTimeline.NavigationBarState.Accessibility.LogoHint" = "Tap to scroll to top and tap again to previous location";
+"Scene.HomeTimeline.NavigationBarState.Accessibility.LogoHint" = "Sit i wakken ad tɛeddiḍ i usawen, sit tikkelt-nniḍen i wakken ad tɛeddiḍ ɣer wadig yezrin";
"Scene.HomeTimeline.NavigationBarState.Accessibility.LogoLabel" = "Taqeffalt n ulugu";
"Scene.HomeTimeline.NavigationBarState.NewPosts" = "Tissufaɣ timaynutin";
"Scene.HomeTimeline.NavigationBarState.Offline" = "Beṛṛa n tuqqna";
@@ -246,6 +246,7 @@ Ad d-yettwasali ɣef Mastodon.";
"Scene.Profile.Fields.AddRow" = "Rnu izirig";
"Scene.Profile.Fields.Placeholder.Content" = "Agbur";
"Scene.Profile.Fields.Placeholder.Label" = "Tabzimt";
+"Scene.Profile.Header.FollowsYou" = "Yeṭṭafaṛ-ik•im";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Sentem asewḥel n %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Sewḥel amiḍan";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Sentem asgugem i %@";
@@ -259,7 +260,7 @@ Ad d-yettwasali ɣef Mastodon.";
"Scene.Profile.SegmentedControl.Posts" = "Imagraden";
"Scene.Profile.SegmentedControl.PostsAndReplies" = "Tisuffaɣ d tririyin";
"Scene.Profile.SegmentedControl.Replies" = "Tiririyin";
-"Scene.RebloggedBy.Title" = "Reblogged By";
+"Scene.RebloggedBy.Title" = "Tettwasuffeɣ-d sɣur";
"Scene.Register.Error.Item.Agreement" = "Amtawa";
"Scene.Register.Error.Item.Email" = "Imayl";
"Scene.Register.Error.Item.Locale" = "Tadigant";
@@ -323,7 +324,7 @@ Ad d-yettwasali ɣef Mastodon.";
"Scene.Report.StepOne.SelectTheBestMatch" = "Fren amṣada akk igerrzen";
"Scene.Report.StepOne.Step1Of4" = "Aḥric 1 seg 4";
"Scene.Report.StepOne.TheIssueDoesNotFitIntoOtherCategories" = "Ugur ur yemṣada ara akk d taggayin-nniḍen";
-"Scene.Report.StepOne.WhatsWrongWithThisAccount" = "What's wrong with this account?";
+"Scene.Report.StepOne.WhatsWrongWithThisAccount" = "Acu n wugur yellan deg umiḍan-a?";
"Scene.Report.StepOne.WhatsWrongWithThisPost" = "Acu n wugur yellan d tsuffeɣt-a?";
"Scene.Report.StepOne.WhatsWrongWithThisUsername" = "Acu n wugur yellan d %@?";
"Scene.Report.StepOne.YouAreAwareThatItBreaksSpecificRules" = "Teẓriḍ y•tettruẓu kra n yilugan";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.stringsdict b/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.stringsdict
index 09e3645f3..7fc6a50bb 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.stringsdict
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/kab.lproj/Localizable.stringsdict
@@ -72,9 +72,9 @@
NSStringFormatValueTypeKey
ld
one
- Followed by %1$@, and another mutual
+ Yeṭṭafar-it %1$@, akked wayeḍ d ucrik
other
- Followed by %1$@, and %ld mutuals
+ Yeṭṭafar-it %1$@, akked %ld d ucriken
plural.count.metric_formatted.post
@@ -104,9 +104,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 media
+ 1 umidyat
other
- %ld media
+ %ld yimidyaten
plural.count.post
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings
index 08f531c7e..b626f017b 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ku.lproj/Localizable.strings
@@ -247,6 +247,7 @@ girêdanê bitikne da ku ajimêra xwe bidî piştrastkirin.";
"Scene.Profile.Fields.AddRow" = "Rêzê tevlî bike";
"Scene.Profile.Fields.Placeholder.Content" = "Naverok";
"Scene.Profile.Fields.Placeholder.Label" = "Nîşan";
+"Scene.Profile.Header.FollowsYou" = "Te dişopîne";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Ji bo rakirina astengkirinê %@ bipejirîne";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Ajimêr asteng bike";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Ji bo bêdengkirina %@ bipejirîne";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings
index cddb4be04..e149c42e8 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/nl.lproj/Localizable.strings
@@ -241,6 +241,7 @@ klik op de link om uw account te bevestigen.";
"Scene.Profile.Fields.AddRow" = "Rij Toevoegen";
"Scene.Profile.Fields.Placeholder.Content" = "Inhoud";
"Scene.Profile.Fields.Placeholder.Label" = "Etiket";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Bevestig om %@ te blokkeren";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Blokkeer account";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Bevestig om %@ te negeren";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings
index a9438e23d..80f8eaf8d 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/ru.lproj/Localizable.strings
@@ -257,6 +257,7 @@
"Scene.Profile.Fields.AddRow" = "Добавить строку";
"Scene.Profile.Fields.Placeholder.Content" = "Содержимое";
"Scene.Profile.Fields.Placeholder.Label" = "Ярлык";
+"Scene.Profile.Header.FollowsYou" = "Подписан(а) на вас";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Confirm to block %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Block Account";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Confirm to mute %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings
index 7c9f2890f..7c13cdcc2 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/sv.lproj/Localizable.strings
@@ -246,6 +246,7 @@ laddas upp till Mastodon.";
"Scene.Profile.Fields.AddRow" = "Lägg till rad";
"Scene.Profile.Fields.Placeholder.Content" = "Innehåll";
"Scene.Profile.Fields.Placeholder.Label" = "Etikett";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Bekräfta för att blockera %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Blockera konto";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Bekräfta för att tysta %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings
index 89c05abb6..4b52b7e3c 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/th.lproj/Localizable.strings
@@ -246,6 +246,7 @@
"Scene.Profile.Fields.AddRow" = "เพิ่มแถว";
"Scene.Profile.Fields.Placeholder.Content" = "เนื้อหา";
"Scene.Profile.Fields.Placeholder.Label" = "ป้ายชื่อ";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "ยืนยันเพื่อปิดกั้น %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "ปิดกั้นบัญชี";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "ยืนยันเพื่อซ่อน %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings
index a9fb6935e..b53558d37 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/tr.lproj/Localizable.strings
@@ -245,6 +245,7 @@ yüklenemiyor.";
"Scene.Profile.Fields.AddRow" = "Satır Ekle";
"Scene.Profile.Fields.Placeholder.Content" = "İçerik";
"Scene.Profile.Fields.Placeholder.Label" = "Etiket";
+"Scene.Profile.Header.FollowsYou" = "Follows You";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "%@ engellemeyi onayla";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Hesabı Engelle";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "%@ susturmak için onaylayın";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings
index 25b63dd88..d54155ca2 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/vi.lproj/Localizable.strings
@@ -246,6 +246,7 @@ tải lên Mastodon.";
"Scene.Profile.Fields.AddRow" = "Thêm hàng";
"Scene.Profile.Fields.Placeholder.Content" = "Nội dung";
"Scene.Profile.Fields.Placeholder.Label" = "Nhãn";
+"Scene.Profile.Header.FollowsYou" = "Đang theo dõi bạn";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "Xác nhận chặn %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "Chặn người dùng";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "Xác nhận ẩn %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings
index bd45a50c8..e011ce72b 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hans.lproj/Localizable.strings
@@ -246,6 +246,7 @@
"Scene.Profile.Fields.AddRow" = "添加";
"Scene.Profile.Fields.Placeholder.Content" = "内容";
"Scene.Profile.Fields.Placeholder.Label" = "标签";
+"Scene.Profile.Header.FollowsYou" = "关注了你";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "确认屏蔽 %@";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "屏蔽帐户";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "确认静音 %@";
diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings
index 479dded34..470c7d7f4 100644
--- a/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings
+++ b/MastodonSDK/Sources/MastodonLocalization/Resources/zh-Hant.lproj/Localizable.strings
@@ -241,6 +241,7 @@
"Scene.Profile.Fields.AddRow" = "新增列";
"Scene.Profile.Fields.Placeholder.Content" = "內容";
"Scene.Profile.Fields.Placeholder.Label" = "標籤";
+"Scene.Profile.Header.FollowsYou" = "跟隨了您";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Message" = "確認將 %@ 封鎖";
"Scene.Profile.RelationshipActionAlert.ConfirmBlockUser.Title" = "封鎖";
"Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.Message" = "確認將 %@ 靜音";
diff --git a/MastodonTests/Info.plist b/MastodonTests/Info.plist
index 094d6d538..3d06762c8 100644
--- a/MastodonTests/Info.plist
+++ b/MastodonTests/Info.plist
@@ -15,8 +15,8 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 1.4.3
+ 1.4.4
CFBundleVersion
- 138
+ 140
diff --git a/MastodonUITests/Info.plist b/MastodonUITests/Info.plist
index 094d6d538..3d06762c8 100644
--- a/MastodonUITests/Info.plist
+++ b/MastodonUITests/Info.plist
@@ -15,8 +15,8 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 1.4.3
+ 1.4.4
CFBundleVersion
- 138
+ 140
diff --git a/NotificationService/Info.plist b/NotificationService/Info.plist
index ffeca43f4..a2e1ea1c2 100644
--- a/NotificationService/Info.plist
+++ b/NotificationService/Info.plist
@@ -17,9 +17,9 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 1.4.3
+ 1.4.4
CFBundleVersion
- 138
+ 140
NSExtension
NSExtensionPointIdentifier
diff --git a/ShareActionExtension/Info.plist b/ShareActionExtension/Info.plist
index 77557d6b7..599d44f9f 100644
--- a/ShareActionExtension/Info.plist
+++ b/ShareActionExtension/Info.plist
@@ -17,9 +17,9 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 1.4.3
+ 1.4.4
CFBundleVersion
- 138
+ 140
NSExtension
NSExtensionAttributes