From 76fbfb15ec939b2a3401d6fec79ee0c9fdcae932 Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on Debian Linux)" <rob@synchro.net>
Date: Sun, 10 Nov 2024 14:48:23 -0800
Subject: [PATCH] Use original RFC822-formatted subject, if available (e.g.
 recv'd via SMTP)

This solves issue #817 for TLDR messages imported into DOVE-Net Tech Talk,
because those messages are imported via SMTP originally and thus have the
original (MIME/Q-encoded subject) in the message header (as RFC822SUBJECT).

For other messages with UTF-8 characters in their header fields (e.g. subject),
we'll need a different solution (Q-encode header fields that contain
non-ASCII chars on the fly), and then this solution could maybe be reverted.
---
 exec/load/newsutil.js | 14 ++++++++++++--
 exec/nntpservice.js   |  4 ++--
 2 files changed, 14 insertions(+), 4 deletions(-)
 mode change 100644 => 100755 exec/load/newsutil.js

diff --git a/exec/load/newsutil.js b/exec/load/newsutil.js
old mode 100644
new mode 100755
index 129931c62a..ad34063e58
--- a/exec/load/newsutil.js
+++ b/exec/load/newsutil.js
@@ -4,11 +4,21 @@
 require("mailutil.js", 'mail_get_name');
 require("smbdefs.js", 'RFC822HEADER');
 
+function get_news_subject(hdr)
+{
+	if(hdr.field_list !== undefined)
+		for(var i in hdr.field_list) {
+			if(hdr.field_list[i].type == RFC822SUBJECT)
+				return hdr.field_list[i].data;
+		}
+	return hdr.subject;
+}
+
 function write_news_header(hdr,writeln)
 {
 	/* Required header fields */
 	writeln("To: " + hdr.to);
-	writeln("Subject: " + hdr.subject);
+	writeln("Subject: " + get_news_subject(hdr));
 	writeln("Message-ID: " + hdr.id);
 	writeln("Date: " + hdr.date);
 
@@ -48,7 +58,7 @@ function write_news_header(hdr,writeln)
 	var content_type;
 
 	if(hdr.field_list!=undefined) {
-		for(i in hdr.field_list) {
+		for(var i in hdr.field_list) {
 			if(hdr.field_list[i].type==RFC822HEADER) {
 				if(hdr.field_list[i].data.toLowerCase().indexOf("content-type:")==0)
 					content_type = hdr.field_list[i].data;
diff --git a/exec/nntpservice.js b/exec/nntpservice.js
index bbd47280f0..7e0801c59e 100644
--- a/exec/nntpservice.js
+++ b/exec/nntpservice.js
@@ -561,7 +561,7 @@ while(client.socket.is_connected && !quit) {
 					continue;
 				writeln(format("%u\t%s\t%s\t%s\t%s\t%s\t%u\t%u\tXref:%s"
 					,i
-					,hdr.subject
+					,get_news_subject(hdr)
 					,hdr.from
 					,hdr.date
 					,hdr.id								// message-id
@@ -615,7 +615,7 @@ while(client.socket.is_connected && !quit) {
 						field=hdr.to;
 						break;
 					case "subject":
-						field=hdr.subject;
+						field=get_news_subject(hdr);
 						break;
 					case "from":
 						field=hdr.from;
-- 
GitLab