aboutsummaryrefslogtreecommitdiffstats
path: root/translations/qtmaildir_it_IT.ts
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-22 11:19:22 +0200
committerDanilo M. <danix@danix.xyz>2026-08-22 12:00:32 +0200
commita9d1cf73a91b5eef79a9722ec9921c97b9ec5c81 (patch)
tree91f45693edc9098dfd9c35d17eedd1ff8ab7066e /translations/qtmaildir_it_IT.ts
parent141bc9b98213b9c4ba9f3bcba041c3e3108c12a3 (diff)
downloadqtmaildir-compose-and-send.tar.gz
qtmaildir-compose-and-send.zip
feat(compose): wire the composer into the main window, item 123compose-and-send
The reply family is disabled on mail that arrived at an account with no send_command, behind a ribbon in MessageView naming the account and the key to add. save_message is deliberately never disabled: it is the escape hatch for exactly that case. The ribbon is a WIDGET in the pane's layout, never markup inside the web view. Composing HTML from configuration into the one document that renders input from strangers is the wrong direction, and the header row is already a widget for the same reason. Compose itself is disabled only when NO account can send, and that state is not warned about at startup: an installation with no send_command anywhere is a valid read-only installation. Every reply resolves through messageScopeFor(), not threadFor(): a thread row means the one message its card shows. Replying to a thread is meaningless; a reply answers a message. The context is built from the DATABASE rather than the model, the rule Restore already follows, because a row whose state has not been re-queried carries stale values and a reply built from one would carry the wrong recipients. The mail root crosses from the worker as its own signal. There was no route for it at all: mailRootOf() is file-static in notmuchworker.cpp, and item 124 records that composing a destination from database.path writes into the Xapian tree under a split index. The test uses NotmuchFixture::splitIndex(), the only layout where the two accessors disagree. A thread row's path is RELATIVE to the mail root while a message row's is absolute, so the account lookup matched nothing and the reply family was dead on mail from an account that could send. Found by the positive guard test rather than the negative one, which passed throughout for the wrong reason. The quit path checks the failed-save case FIRST. In the ordinary case nothing is lost by saving; there, saving is what is already not working, so the dialog says plainly that quitting loses that text rather than offering a save that will fail again. Both dialogs name the composers, and the ordinary one asks once whatever the count, because three modals in a row is worse than a coarse answer. Its wording says drafts already saved stay in the folder, so Discard cannot read as 'delete my three messages'. The Save loop holds QPointers, not raw pointers. A deleteLater() posted while a nested exec() runs IS processed by that nested loop, measured in a standalone program: the guard nulls before the modal returns. Closing a composer while the quit dialog is up therefore freed a window the loop then called saveDraftNow() on, crashing at the exact moment the application promised to preserve that text. A compose request that matches nothing clears itself and says so. It was cleared only on a match, so a message deleted between selection and Reply left the request armed for the session: Reply did nothing, and the next ordinary click on that message opened a composer nobody asked for while the pane stayed blank. Forward carries the original's attachments, which the context has always had a field for and nothing ever filled, and seeds its HTML toggle from [compose] send_html. Only Reply seeds that from the original. save_message keeps its filename inside the chosen directory and no longer overwrites a file already there. The check was correct and untested: the test asserted through Attachment's helpers rather than through the function production calls, so deleting the containment check outright left it green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TvwDptMWxjqhbCmjxwcSZ2
Diffstat (limited to 'translations/qtmaildir_it_IT.ts')
-rw-r--r--translations/qtmaildir_it_IT.ts66
1 files changed, 66 insertions, 0 deletions
diff --git a/translations/qtmaildir_it_IT.ts b/translations/qtmaildir_it_IT.ts
index b2d96eb..f8a2b03 100644
--- a/translations/qtmaildir_it_IT.ts
+++ b/translations/qtmaildir_it_IT.ts
@@ -571,6 +571,68 @@ Il messaggio È stato inviato. Non inviarlo di nuovo.</translation>
<translation>Segna conversazione come &amp;spam</translation>
</message>
<message>
+ <source>A draft could not be saved</source>
+ <translation>Impossibile salvare una bozza</translation>
+ </message>
+ <message numerus="yes">
+ <source>%n message(s) could not be saved to the drafts folder. Quitting now loses that text.</source>
+ <translation>
+ <numerusform>Impossibile salvare %n messaggio nella cartella delle bozze. Uscendo ora quel testo va perso.</numerusform>
+ <numerusform>Impossibile salvare %n messaggi nella cartella delle bozze. Uscendo ora quel testo va perso.</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Messages still being composed</source>
+ <translation>Messaggi ancora in composizione</translation>
+ </message>
+ <message numerus="yes">
+ <source>%n message(s) are still being composed. Drafts already saved stay in the drafts folder either way.</source>
+ <translation>
+ <numerusform>%n messaggio è ancora in composizione. Le bozze già salvate restano comunque nella cartella delle bozze.</numerusform>
+ <numerusform>%n messaggi sono ancora in composizione. Le bozze già salvate restano comunque nella cartella delle bozze.</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>No account is configured to send mail</source>
+ <translation>Nessun account configurato per inviare posta</translation>
+ </message>
+ <message>
+ <source>No message is selected</source>
+ <translation>Nessun messaggio selezionato</translation>
+ </message>
+ <message>
+ <source>That message could not be read</source>
+ <translation>Impossibile leggere quel messaggio</translation>
+ </message>
+ <message>
+ <source>That message arrived at an account that cannot send</source>
+ <translation>Quel messaggio è arrivato a un account che non può inviare</translation>
+ </message>
+ <message>
+ <source>The Maildir root is not known yet</source>
+ <translation>La radice della Maildir non è ancora nota</translation>
+ </message>
+ <message>
+ <source>That message&apos;s file could not be found</source>
+ <translation>Impossibile trovare il file di quel messaggio</translation>
+ </message>
+ <message>
+ <source>Save message to</source>
+ <translation>Salva il messaggio in</translation>
+ </message>
+ <message>
+ <source>Refusing to write outside %1</source>
+ <translation>Rifiuto di scrivere fuori da %1</translation>
+ </message>
+ <message>
+ <source>Could not write %1</source>
+ <translation>Impossibile scrivere %1</translation>
+ </message>
+ <message>
+ <source>Saved %1</source>
+ <translation>Salvato %1</translation>
+ </message>
+ <message>
<source>&amp;Restore from trash</source>
<translation>&amp;Ripristina dal cestino</translation>
</message>
@@ -1362,6 +1424,10 @@ Il messaggio È stato inviato. Non inviarlo di nuovo.</translation>
<translation>Salvato %1</translation>
</message>
<message>
+ <source>This account is receive-only. Add send_command to [account.%1] to send from it.</source>
+ <translation>Questo account è di sola ricezione. Aggiungi send_command a [account.%1] per inviare da esso.</translation>
+ </message>
+ <message>
<source>No message in this thread has an HTML part</source>
<translation>Nessun messaggio di questa conversazione ha una parte HTML</translation>
</message>