From 475fe228af8fa90e9225e720c46412d7a778b31f Mon Sep 17 00:00:00 2001
From: Stefano Pigozzi <me@steffo.eu>
Date: Sun, 8 Sep 2024 00:06:18 +0200
Subject: [PATCH] Improve error messages

---
 src/components/compose.jsx |  15 +--
 src/locales/en.po          | 186 ++++++++++++++++++-------------------
 2 files changed, 102 insertions(+), 99 deletions(-)

diff --git a/src/components/compose.jsx b/src/components/compose.jsx
index 092c3afa..7e04f700 100644
--- a/src/components/compose.jsx
+++ b/src/components/compose.jsx
@@ -197,6 +197,7 @@ function highlightText(text, { maxCharacters = Infinity }) {
 
 // const rtf = new Intl.RelativeTimeFormat();
 const RTF = mem((locale) => new Intl.RelativeTimeFormat(locale || undefined));
+const LF = mem((locale) => new Intl.ListFormat(locale || undefined));
 
 const CUSTOM_EMOJIS_COUNT = 100;
 
@@ -210,6 +211,7 @@ function Compose({
 }) {
   const { i18n } = useLingui();
   const rtf = RTF(i18n.locale);
+  const lf = LF(i18n.locale);
 
   console.warn('RENDER COMPOSER');
   const { masto, instance } = api();
@@ -617,19 +619,20 @@ function Compose({
           }
         }
       }
+      console.error(unattachableFiles, unsupportedFiles)
       if (unattachableFiles.length > 0) {
         alert(
           plural(unattachableFiles.length, {
-            one: `Couldn't attach file ${unsupportedFiles[0]}.`,
-            other: `Couldn't attach files ${unsupportedFiles.join(", ")}.`,
-          })
-        )
+            one: `Couldn't attach file ${unattachableFiles[0].name}.`,
+            other: `Couldn't attach files ${lf.format(unattachableFiles.map(f => f.name))}.`,
+          }),
+        );
       }
       if (unsupportedFiles.length > 0) {
         alert(
           plural(unsupportedFiles.length, {
-            one: `File ${unsupportedFiles[0]} is not supported.`,
-            other: `Files ${unsupportedFiles.join(", ")} are not supported.`,
+            one: `File ${unsupportedFiles[0].name} is not supported.`,
+            other: `Files ${lf.format(unsupportedFiles.map(f => f.name))} are not supported.`,
           }),
         );
       }
diff --git a/src/locales/en.po b/src/locales/en.po
index 271d4111..82369239 100644
--- a/src/locales/en.po
+++ b/src/locales/en.po
@@ -105,7 +105,7 @@ msgstr ""
 
 #: src/components/account-info.jsx:427
 #: src/components/account-info.jsx:1115
-#: src/components/compose.jsx:2470
+#: src/components/compose.jsx:2481
 #: src/components/media-alt-modal.jsx:45
 #: src/components/media-modal.jsx:283
 #: src/components/status.jsx:1635
@@ -400,11 +400,11 @@ msgstr ""
 #: src/components/account-info.jsx:1986
 #: src/components/account-info.jsx:2086
 #: src/components/account-sheet.jsx:37
-#: src/components/compose.jsx:816
-#: src/components/compose.jsx:2426
-#: src/components/compose.jsx:2899
-#: src/components/compose.jsx:3107
-#: src/components/compose.jsx:3337
+#: src/components/compose.jsx:827
+#: src/components/compose.jsx:2437
+#: src/components/compose.jsx:2910
+#: src/components/compose.jsx:3118
+#: src/components/compose.jsx:3348
 #: src/components/drafts.jsx:58
 #: src/components/embed-modal.jsx:12
 #: src/components/generic-accounts.jsx:142
@@ -536,136 +536,136 @@ msgstr ""
 msgid "Compose"
 msgstr ""
 
-#: src/components/compose.jsx:392
+#: src/components/compose.jsx:394
 msgid "You have unsaved changes. Discard this post?"
 msgstr ""
 
-#: src/components/compose.jsx:609
-msgid "Unable to attach file."
-msgstr "Unable to attach file."
+#: src/components/compose.jsx:625
+msgid "{0, plural, one {Couldn't attach file {1}.} other {Couldn't attach files {2}.}}"
+msgstr "{0, plural, one {Couldn't attach file {1}.} other {Couldn't attach files {2}.}}"
 
-#: src/components/compose.jsx:622
-msgid "{0, plural, one {File {1} is not supported by your instance.} other {Files {2} are not supported by your instance.}}"
-msgstr "{0, plural, one {File {1} is not supported by your instance.} other {Files {2} are not supported by your instance.}}"
+#: src/components/compose.jsx:633
+msgid "{0, plural, one {File {1} is not supported.} other {Files {2} are not supported.}}"
+msgstr "{0, plural, one {File {1} is not supported.} other {Files {2} are not supported.}}"
 
-#: src/components/compose.jsx:630
-#: src/components/compose.jsx:648
-#: src/components/compose.jsx:1347
-#: src/components/compose.jsx:1608
+#: src/components/compose.jsx:641
+#: src/components/compose.jsx:659
+#: src/components/compose.jsx:1358
+#: src/components/compose.jsx:1619
 msgid "{maxMediaAttachments, plural, one {You can only attach up to 1 file.} other {You can only attach up to # files.}}"
 msgstr ""
 
-#: src/components/compose.jsx:797
+#: src/components/compose.jsx:808
 msgid "Pop out"
 msgstr ""
 
-#: src/components/compose.jsx:804
+#: src/components/compose.jsx:815
 msgid "Minimize"
 msgstr ""
 
-#: src/components/compose.jsx:840
+#: src/components/compose.jsx:851
 msgid "Looks like you closed the parent window."
 msgstr ""
 
-#: src/components/compose.jsx:847
+#: src/components/compose.jsx:858
 msgid "Looks like you already have a compose field open in the parent window and currently publishing. Please wait for it to be done and try again later."
 msgstr ""
 
-#: src/components/compose.jsx:852
+#: src/components/compose.jsx:863
 msgid "Looks like you already have a compose field open in the parent window. Popping in this window will discard the changes you made in the parent window. Continue?"
 msgstr ""
 
-#: src/components/compose.jsx:894
+#: src/components/compose.jsx:905
 msgid "Pop in"
 msgstr ""
 
-#: src/components/compose.jsx:904
+#: src/components/compose.jsx:915
 msgid "Replying to @{0}’s post (<0>{1}</0>)"
 msgstr ""
 
-#: src/components/compose.jsx:914
+#: src/components/compose.jsx:925
 msgid "Replying to @{0}’s post"
 msgstr ""
 
-#: src/components/compose.jsx:927
+#: src/components/compose.jsx:938
 msgid "Editing source post"
 msgstr ""
 
-#: src/components/compose.jsx:974
+#: src/components/compose.jsx:985
 msgid "Poll must have at least 2 options"
 msgstr ""
 
-#: src/components/compose.jsx:978
+#: src/components/compose.jsx:989
 msgid "Some poll choices are empty"
 msgstr ""
 
-#: src/components/compose.jsx:991
+#: src/components/compose.jsx:1002
 msgid "Some media have no descriptions. Continue?"
 msgstr ""
 
-#: src/components/compose.jsx:1043
+#: src/components/compose.jsx:1054
 msgid "Attachment #{i} failed"
 msgstr ""
 
-#: src/components/compose.jsx:1137
+#: src/components/compose.jsx:1148
 #: src/components/status.jsx:1961
 #: src/components/timeline.jsx:979
 msgid "Content warning"
 msgstr ""
 
-#: src/components/compose.jsx:1153
+#: src/components/compose.jsx:1164
 msgid "Content warning or sensitive media"
 msgstr ""
 
-#: src/components/compose.jsx:1189
+#: src/components/compose.jsx:1200
 #: src/components/status.jsx:93
 #: src/pages/settings.jsx:297
 msgid "Public"
 msgstr ""
 
-#: src/components/compose.jsx:1192
+#: src/components/compose.jsx:1203
 #: src/components/status.jsx:94
 #: src/pages/settings.jsx:300
 msgid "Unlisted"
 msgstr ""
 
-#: src/components/compose.jsx:1195
+#: src/components/compose.jsx:1206
 #: src/components/status.jsx:95
 #: src/pages/settings.jsx:303
 msgid "Followers only"
 msgstr ""
 
-#: src/components/compose.jsx:1198
+#: src/components/compose.jsx:1209
 #: src/components/status.jsx:96
 #: src/components/status.jsx:1839
 msgid "Private mention"
 msgstr ""
 
-#: src/components/compose.jsx:1207
+#: src/components/compose.jsx:1218
 msgid "Post your reply"
 msgstr ""
 
-#: src/components/compose.jsx:1209
+#: src/components/compose.jsx:1220
 msgid "Edit your post"
 msgstr ""
 
-#: src/components/compose.jsx:1210
+#: src/components/compose.jsx:1221
 msgid "What are you doing?"
 msgstr ""
 
-#: src/components/compose.jsx:1285
+#: src/components/compose.jsx:1296
 msgid "Mark media as sensitive"
 msgstr ""
 
-#: src/components/compose.jsx:1383
+#: src/components/compose.jsx:1394
 msgid "Add poll"
 msgstr ""
 
-#: src/components/compose.jsx:1405
+#: src/components/compose.jsx:1416
 msgid "Add custom emoji"
 msgstr ""
 
-#: src/components/compose.jsx:1489
+#: src/components/compose.jsx:1500
 #: src/components/keyboard-shortcuts-help.jsx:143
 #: src/components/status.jsx:830
 #: src/components/status.jsx:1615
@@ -674,195 +674,195 @@ msgstr ""
 msgid "Reply"
 msgstr ""
 
-#: src/components/compose.jsx:1491
+#: src/components/compose.jsx:1502
 msgid "Update"
 msgstr ""
 
-#: src/components/compose.jsx:1492
+#: src/components/compose.jsx:1503
 msgctxt "Submit button in composer"
 msgid "Post"
 msgstr ""
 
-#: src/components/compose.jsx:1620
+#: src/components/compose.jsx:1631
 msgid "Downloading GIF…"
 msgstr ""
 
-#: src/components/compose.jsx:1648
+#: src/components/compose.jsx:1659
 msgid "Failed to download GIF"
 msgstr ""
 
-#: src/components/compose.jsx:1759
-#: src/components/compose.jsx:1836
+#: src/components/compose.jsx:1770
+#: src/components/compose.jsx:1847
 #: src/components/nav-menu.jsx:287
 msgid "More…"
 msgstr ""
 
-#: src/components/compose.jsx:2239
+#: src/components/compose.jsx:2250
 msgid "Uploaded"
 msgstr ""
 
-#: src/components/compose.jsx:2252
+#: src/components/compose.jsx:2263
 msgid "Image description"
 msgstr ""
 
-#: src/components/compose.jsx:2253
+#: src/components/compose.jsx:2264
 msgid "Video description"
 msgstr ""
 
-#: src/components/compose.jsx:2254
+#: src/components/compose.jsx:2265
 msgid "Audio description"
 msgstr ""
 
-#: src/components/compose.jsx:2290
-#: src/components/compose.jsx:2310
+#: src/components/compose.jsx:2301
+#: src/components/compose.jsx:2321
 msgid "File size too large. Uploading might encounter issues. Try reduce the file size from {0} to {1} or lower."
 msgstr ""
 
-#: src/components/compose.jsx:2302
-#: src/components/compose.jsx:2322
+#: src/components/compose.jsx:2313
+#: src/components/compose.jsx:2333
 msgid "Dimension too large. Uploading might encounter issues. Try reduce dimension from {0}×{1}px to {2}×{3}px."
 msgstr ""
 
-#: src/components/compose.jsx:2330
+#: src/components/compose.jsx:2341
 msgid "Frame rate too high. Uploading might encounter issues."
 msgstr ""
 
-#: src/components/compose.jsx:2390
-#: src/components/compose.jsx:2640
+#: src/components/compose.jsx:2401
+#: src/components/compose.jsx:2651
 #: src/components/shortcuts-settings.jsx:723
 #: src/pages/catchup.jsx:1074
 #: src/pages/filters.jsx:412
 msgid "Remove"
 msgstr ""
 
-#: src/components/compose.jsx:2407
+#: src/components/compose.jsx:2418
 #: src/compose.jsx:83
 msgid "Error"
 msgstr ""
 
-#: src/components/compose.jsx:2432
+#: src/components/compose.jsx:2443
 msgid "Edit image description"
 msgstr ""
 
-#: src/components/compose.jsx:2433
+#: src/components/compose.jsx:2444
 msgid "Edit video description"
 msgstr ""
 
-#: src/components/compose.jsx:2434
+#: src/components/compose.jsx:2445
 msgid "Edit audio description"
 msgstr ""
 
-#: src/components/compose.jsx:2479
-#: src/components/compose.jsx:2528
+#: src/components/compose.jsx:2490
+#: src/components/compose.jsx:2539
 msgid "Generating description. Please wait…"
 msgstr ""
 
-#: src/components/compose.jsx:2499
+#: src/components/compose.jsx:2510
 msgid "Failed to generate description: {0}"
 msgstr ""
 
-#: src/components/compose.jsx:2500
+#: src/components/compose.jsx:2511
 msgid "Failed to generate description"
 msgstr ""
 
-#: src/components/compose.jsx:2512
-#: src/components/compose.jsx:2518
-#: src/components/compose.jsx:2564
+#: src/components/compose.jsx:2523
+#: src/components/compose.jsx:2529
+#: src/components/compose.jsx:2575
 msgid "Generate description…"
 msgstr ""
 
-#: src/components/compose.jsx:2551
+#: src/components/compose.jsx:2562
 msgid "Failed to generate description{0}"
 msgstr ""
 
-#: src/components/compose.jsx:2566
+#: src/components/compose.jsx:2577
 msgid "({0}) <0>— experimental</0>"
 msgstr ""
 
-#: src/components/compose.jsx:2585
+#: src/components/compose.jsx:2596
 msgid "Done"
 msgstr ""
 
-#: src/components/compose.jsx:2621
+#: src/components/compose.jsx:2632
 msgid "Choice {0}"
 msgstr ""
 
-#: src/components/compose.jsx:2668
+#: src/components/compose.jsx:2679
 msgid "Multiple choices"
 msgstr ""
 
-#: src/components/compose.jsx:2671
+#: src/components/compose.jsx:2682
 msgid "Duration"
 msgstr ""
 
-#: src/components/compose.jsx:2702
+#: src/components/compose.jsx:2713
 msgid "Remove poll"
 msgstr ""
 
-#: src/components/compose.jsx:2916
+#: src/components/compose.jsx:2927
 msgid "Search accounts"
 msgstr ""
 
-#: src/components/compose.jsx:2957
+#: src/components/compose.jsx:2968
 #: src/components/shortcuts-settings.jsx:712
 #: src/pages/list.jsx:359
 msgid "Add"
 msgstr ""
 
-#: src/components/compose.jsx:2970
+#: src/components/compose.jsx:2981
 #: src/components/generic-accounts.jsx:227
 msgid "Error loading accounts"
 msgstr ""
 
-#: src/components/compose.jsx:3113
+#: src/components/compose.jsx:3124
 msgid "Custom emojis"
 msgstr ""
 
-#: src/components/compose.jsx:3133
+#: src/components/compose.jsx:3144
 msgid "Search emoji"
 msgstr ""
 
-#: src/components/compose.jsx:3164
+#: src/components/compose.jsx:3175
 msgid "Error loading custom emojis"
 msgstr ""
 
-#: src/components/compose.jsx:3175
+#: src/components/compose.jsx:3186
 msgid "Recently used"
 msgstr ""
 
-#: src/components/compose.jsx:3176
+#: src/components/compose.jsx:3187
 msgid "Others"
 msgstr ""
 
-#: src/components/compose.jsx:3214
+#: src/components/compose.jsx:3225
 msgid "{0} more…"
 msgstr ""
 
-#: src/components/compose.jsx:3352
+#: src/components/compose.jsx:3363
 msgid "Search GIFs"
 msgstr ""
 
-#: src/components/compose.jsx:3367
+#: src/components/compose.jsx:3378
 msgid "Powered by GIPHY"
 msgstr ""
 
-#: src/components/compose.jsx:3375
+#: src/components/compose.jsx:3386
 msgid "Type to search GIFs"
 msgstr ""
 
-#: src/components/compose.jsx:3473
+#: src/components/compose.jsx:3484
 #: src/components/media-modal.jsx:387
 #: src/components/timeline.jsx:884
 msgid "Previous"
 msgstr ""
 
-#: src/components/compose.jsx:3491
+#: src/components/compose.jsx:3502
 #: src/components/media-modal.jsx:406
 #: src/components/timeline.jsx:901
 msgid "Next"
 msgstr ""
 
-#: src/components/compose.jsx:3508
+#: src/components/compose.jsx:3519
 msgid "Error loading GIFs"
 msgstr ""