aboutsummaryrefslogtreecommitdiff
path: root/news/lusernet
diff options
context:
space:
mode:
authorDirk Meyer <dinoex@FreeBSD.org>2006-12-18 10:32:20 +0000
committerDirk Meyer <dinoex@FreeBSD.org>2006-12-18 10:32:20 +0000
commita6238382d0e9d8c33ca54fec44c498c69ea5465f (patch)
tree64a4028e79c0c37a5e0544972d16e853c747f36f /news/lusernet
parentd148c69d7825a834719f74a886a93fbf2abb124b (diff)
downloadports-a6238382d0e9d8c33ca54fec44c498c69ea5465f.tar.gz
ports-a6238382d0e9d8c33ca54fec44c498c69ea5465f.zip
LuserNET is an NNTP-based news reader for GNUstep.
Notes
Notes: svn path=/head/; revision=180063
Diffstat (limited to 'news/lusernet')
-rw-r--r--news/lusernet/Makefile26
-rw-r--r--news/lusernet/distinfo3
-rw-r--r--news/lusernet/files/patch-pantomime_1_2649
-rw-r--r--news/lusernet/pkg-descr3
-rw-r--r--news/lusernet/pkg-plist18
5 files changed, 699 insertions, 0 deletions
diff --git a/news/lusernet/Makefile b/news/lusernet/Makefile
new file mode 100644
index 000000000000..69f0fb8add83
--- /dev/null
+++ b/news/lusernet/Makefile
@@ -0,0 +1,26 @@
+# New ports collection makefile for: lusernet
+# Date created: 17 Nov 2006
+# Whom: dirk.meyer@dinoex.sub.org
+#
+# $FreeBSD$
+#
+
+PORTNAME= lusernet
+PORTVERSION= 0.4.2
+CATEGORIES= news
+MASTER_SITES= http://web.telia.com/~u42308495/alex/LuserNET/
+DISTNAME= LuserNET-${PORTVERSION}
+
+MAINTAINER= dinoex@FreeBSD.org
+COMMENT= GNUstep news reader
+
+USE_GNUSTEP= yes
+USE_GNUSTEP_PREFIX= yes
+USE_GNUSTEP_BACK= yes
+USE_GNUSTEP_BUILD= yes
+USE_GNUSTEP_INSTALL= yes
+USE_GNUSTEP_LOCAL_LIBS+= Pantomime:${PANTOMIME_PORT}
+
+PANTOMIME_PORT?= mail/pantomime
+
+.include <bsd.port.mk>
diff --git a/news/lusernet/distinfo b/news/lusernet/distinfo
new file mode 100644
index 000000000000..8f7c278ee95d
--- /dev/null
+++ b/news/lusernet/distinfo
@@ -0,0 +1,3 @@
+MD5 (LuserNET-0.4.2.tar.gz) = 3d17d7462a3aba295246362a90db3ea1
+SHA256 (LuserNET-0.4.2.tar.gz) = 7a3c2b3e16388338cc3c775e6a8e746091aabe94b4707c6203a81f2420d2ac50
+SIZE (LuserNET-0.4.2.tar.gz) = 74040
diff --git a/news/lusernet/files/patch-pantomime_1_2 b/news/lusernet/files/patch-pantomime_1_2
new file mode 100644
index 000000000000..5fc1f9b3e64d
--- /dev/null
+++ b/news/lusernet/files/patch-pantomime_1_2
@@ -0,0 +1,649 @@
+## 05_pantomime1.2.dpatch by Sergey Golovin <svgol@mail.ru>
+##
+## DP: Convert to Pantomime 1.2.
+
+@DPATCH@
+diff -urNad lusernet.app-0.4.2~/ChangeLog ChangeLog
+--- lusernet.app-0.4.2~/ChangeLog 1970-01-01 02:00:00.000000000 +0200
++++ ChangeLog 2006-09-27 00:13:21.000000000 +0300
+@@ -0,0 +1,41 @@
++2006-09-19 Sergey V. Golovin <svgol@mail.ru>
++
++ * main.m ([AppDelegate -changeEncoding:]): post
++ DefaultEncodingChangedNotification when done
++
++ * main.m: new notification DefaultEncodingChangedNotification
++
++ * ComposeWindowController.m: "DefaultEncoding" now influences all
++ messages that going to be posted (Yavor Doganov <yavor@doganov.org>)
++
++ * NNTPSourceGUI.m ([NNTPSourcePropertiesController
++ -initWithNNTPSource:]): the NNTPSourcePropertiesController is
++ responsible for releasing its window ([win release] removed from
++ end of -initWithNNTPSource:)
++
++ * MessageViewController.m ([MessageViewController -getData]):
++ - The "DefaultEncoding" should influence only such messages that
++ have no the content type header
++ - All normal messages are displayed with their charsets
++
++ * MessageViewController.m ([MessageViewController -encodingChanged:]): added
++ ([MessageViewController -initWithMsgDB:textView:scrollView:]): now it
++ waits for DefaultEncodingChangedNotification to redisplay
++ immediately a message if it is needed.
++
++2006-09-04 Sergey Golovin <svgol@mail.ru>
++
++ * Pref_MessageViewing.m ([Pref_MessageViewing -willShow]): added
++ a pop-up button for charset selection
++ ([Pref_MessageViewing -changeEncoding:]): added
++
++2006-09-02 Sergey Golovin <svgol@mail.ru>
++
++ * MessageViewController.m ([MessageViewController -getData]):
++ - added from user defaults a charset header when a raw message has
++ no one
++ - added from user defaults a content type header when a raw
++ message has no one
++
++ * synchronized with Pantomime 1.2
++
+diff -urNad lusernet.app-0.4.2~/ComposeWindowController.h ComposeWindowController.h
+--- lusernet.app-0.4.2~/ComposeWindowController.h 2004-03-03 01:58:37.000000000 +0200
++++ ComposeWindowController.h 2006-09-27 00:13:21.000000000 +0300
+@@ -6,7 +6,7 @@
+ #define ComposeWindowController_h
+
+ @class NSString,NSDictionary;
+-@class Message;
++@class CWMessage;
+ @class NSTextView,NSTextField,NSButton;
+
+ @interface ComposeWindowController : NSWindowController
+@@ -25,7 +25,7 @@
+
+ - initWithHeaders: (NSDictionary *)headers quoteContent: (NSString *)content;
+ - initWithHeaders: (NSDictionary *)headers;
+-- initWithFollowupToMessage: (Message *)msg;
++- initWithFollowupToMessage: (CWMessage *)msg;
+
+ @end
+
+diff -urNad lusernet.app-0.4.2~/ComposeWindowController.m ComposeWindowController.m
+--- lusernet.app-0.4.2~/ComposeWindowController.m 2004-03-03 01:58:37.000000000 +0200
++++ ComposeWindowController.m 2006-09-27 00:13:21.000000000 +0300
+@@ -21,11 +21,12 @@
+ #include "main.h"
+ #include "KeyWindow.h"
+ #include "Pref_Posting.h"
++#include "Pref_MessageViewing.h"
+
+-#include <Pantomime/Constants.h>
+-#include <Pantomime/Message.h>
+-#include <Pantomime/MimeUtility.h>
+-#include <Pantomime/InternetAddress.h>
++#include <Pantomime/CWConstants.h>
++#include <Pantomime/CWMessage.h>
++#include <Pantomime/CWMIMEUtility.h>
++#include <Pantomime/CWInternetAddress.h>
+
+
+ @implementation ComposeWindowController
+@@ -33,7 +34,7 @@
+
+ -(void) post: (id)sender
+ {
+- Message *m=[[Message alloc] init];
++ CWMessage *m=[[CWMessage alloc] init];
+ NSMutableDictionary *md;
+ NSEnumerator *e;
+ NSString *header,*value;
+@@ -64,7 +65,7 @@
+
+ if ([header isEqualToString: @"From"])
+ {
+- InternetAddress *ia=[[InternetAddress alloc] initWithString: value];
++ CWInternetAddress *ia=[[CWInternetAddress alloc] initWithString: value];
+ [m setFrom: ia];
+ DESTROY(ia);
+ }
+@@ -81,7 +82,14 @@
+ [m setFormat: PantomimeFormatFlowed];
+ [m setContent: [text string]];
+
+- [m setCharset: [MimeUtility charsetForString: [text string]]];
++ if(![Pref_MessageViewing defaultEncoding])
++ {
++ [m setCharset: @"utf-8"];
++ }
++ else
++ {
++ [m setCharset: [Pref_MessageViewing defaultEncoding]];
++ }
+
+ state=1;
+ d=[m dataValue];
+@@ -386,7 +394,7 @@
+ }
+
+ /* TODO: handle attributation, followup to sender, followup, etc. */
+-- initWithFollowupToMessage: (Message *)msg
++- initWithFollowupToMessage: (CWMessage *)msg
+ {
+ NSDictionary *headers;
+ NSString *subject,*references;
+diff -urNad lusernet.app-0.4.2~/FolderThreader.m FolderThreader.m
+--- lusernet.app-0.4.2~/FolderThreader.m 2004-03-03 01:58:37.000000000 +0200
++++ FolderThreader.m 2006-09-27 00:13:21.000000000 +0300
+@@ -9,7 +9,7 @@
+
+ #include "FolderThreader.h"
+
+-#include <Pantomime/MimeUtility.h>
++#include <Pantomime/CWMIMEUtility.h>
+
+
+ static NSDate *parse_date(const char *date_header)
+@@ -544,7 +544,7 @@
+ return @"";
+
+ d=[[NSData alloc] initWithBytes: c length: strlen(c)];
+- s2=[MimeUtility decodeHeader: d charset: nil];
++ s2=[CWMIMEUtility decodeHeader: d charset: nil];
+ [d release];
+ return s2;
+ }
+@@ -586,7 +586,7 @@
+ else
+ {
+ d=[[NSData alloc] initWithBytes: c length: strlen(c)];
+- s2=[MimeUtility decodeHeader: d charset: nil];
++ s2=[CWMIMEUtility decodeHeader: d charset: nil];
+ [d release];
+ h->subject=[s2 retain];
+ }
+@@ -595,7 +595,7 @@
+ if (c)
+ {
+ d=[[NSData alloc] initWithBytes: c length: strlen(c)];
+- s2=[MimeUtility decodeHeader: d charset: nil];
++ s2=[CWMIMEUtility decodeHeader: d charset: nil];
+ [d release];
+ h->from=[s2 retain];
+ }
+diff -urNad lusernet.app-0.4.2~/FolderWindowController.m FolderWindowController.m
+--- lusernet.app-0.4.2~/FolderWindowController.m 2004-03-03 01:58:37.000000000 +0200
++++ FolderWindowController.m 2006-09-27 00:13:21.000000000 +0300
+@@ -20,7 +20,7 @@
+ #include <AppKit/NSCell.h>
+ #include <AppKit/NSFont.h>
+
+-#include <Pantomime/MimeUtility.h>
++#include <Pantomime/CWMIMEUtility.h>
+
+ #include "MsgDB.h"
+
+diff -urNad lusernet.app-0.4.2~/MessageViewController.h MessageViewController.h
+--- lusernet.app-0.4.2~/MessageViewController.h 2002-03-08 02:39:34.000000000 +0200
++++ MessageViewController.h 2006-09-27 00:13:21.000000000 +0300
+@@ -6,7 +6,7 @@
+ #define MessageViewController_h
+
+ @class NSTextView,NSScrollView,NSMutableDictionary;
+-@class Message;
++@class CWMessage;
+
+ #include "MsgDB.h"
+
+@@ -17,7 +17,7 @@
+
+ MsgDB *mdb;
+ msg_id_t mid;
+- Message *cur_message;
++ CWMessage *cur_message;
+
+ /* actually an NSMapTable */
+ void *cur_options;
+@@ -48,6 +48,8 @@
+
+ -(void) messageSave;
+
++-(void) encodingChanged: (NSNotification *)n;
++
+ @end
+
+ #endif
+diff -urNad lusernet.app-0.4.2~/MessageViewController.m MessageViewController.m
+--- lusernet.app-0.4.2~/MessageViewController.m 2004-03-03 01:58:37.000000000 +0200
++++ MessageViewController.m 2006-09-27 00:13:21.000000000 +0300
+@@ -21,11 +21,11 @@
+
+ #include "GUISource.h"
+
+-#include <Pantomime/Message.h>
+-#include <Pantomime/MimeMultipart.h>
+-#include <Pantomime/MimeUtility.h>
+-#include <Pantomime/InternetAddress.h>
+-#include <Pantomime/UUFile.h>
++#include <Pantomime/CWMessage.h>
++#include <Pantomime/CWMIMEMultipart.h>
++#include <Pantomime/CWMIMEUtility.h>
++#include <Pantomime/CWInternetAddress.h>
++#include <Pantomime/CWUUFile.h>
+
+ //#define USE_MIME_STUFF
+
+@@ -89,7 +89,7 @@
+
+
+ @interface MessageViewController (private)
+--(void) _renderContent:(id)p parent:(Part *)parent to:(NSMutableAttributedString *)str;
++-(void) _renderContent:(id)p parent:(CWPart *)parent to:(NSMutableAttributedString *)str;
+ -(void) _renderPart:(id)p to:(NSMutableAttributedString *)str;
+
+ -(void) displayMessage;
+@@ -212,10 +212,10 @@
+ }
+
+
+--(void) _render_multipart: (MimeMultipart *)mp type: (NSString *)ct
++-(void) _render_multipart: (CWMIMEMultipart *)mp type: (NSString *)ct
+ to: (NSMutableAttributedString *)str
+ {
+- Part *bp;
++ CWPart *bp;
+ int i;
+
+ if ([ct isEqual: @"multipart/alternative"])
+@@ -227,14 +227,14 @@
+ else
+ disp=[mp count]-1;
+
+- bp=[mp bodyPartAtIndex: disp];
++ bp=[mp partAtIndex: disp];
+ append(str,header_bold_dict,_(@"Currently shown:"));
+ append(str,header_dict,@" %@\n",[bp contentType]);
+ append(str,header_bold_dict,_(@"Alternatives:"));
+ for (i=0;i<[mp count];i++)
+ {
+ appendLink(str,LINK_MULTIPART_ALTERNATIVE,mp,i+1,@" %@",
+- [[mp bodyPartAtIndex: i] contentType]);
++ [[mp partAtIndex: i] contentType]);
+ }
+ append(str,nil,@"\n");
+
+@@ -249,7 +249,7 @@
+
+ for (i=0;i<[mp count];i++)
+ {
+- bp=[mp bodyPartAtIndex: i];
++ bp=[mp partAtIndex: i];
+ append(str,header_bold_dict,_(@"\nPart:"));
+ append(str,header_dict,@" %i %@\n",i,[bp contentType]);
+ [self _renderPart:bp to:str];
+@@ -264,7 +264,7 @@
+ NSDictionary *fd;
+ NSFont *f;
+
+- NSRange r;
++ // NSRange r;
+
+ if (cur_font)
+ f=[Pref_MessageViewing font2];
+@@ -276,7 +276,7 @@
+
+ #if 0 /* TODO: need to update with new Pantomime interface */
+ /* TODO: this should probably be optional */
+- r=[MimeUtility rangeOfUUEncodedStringFromString: text
++ r=[CWMIMEUtility rangeOfUUEncodedStringFromString: text
+ range: NSMakeRange(0,[text length])];
+
+ if (r.location==NSNotFound)
+@@ -291,7 +291,7 @@
+ appendPlainText(str,fd,[text substringWithRange: NSMakeRange(0,r.location)]);
+
+ /* TODO: this is inefficient */
+- fw=[MimeUtility fileWrapperFromUUEncodedString: [text substringWithRange: r]];
++ fw=[CWMIMEUtility fileWrapperFromUUEncodedString: [text substringWithRange: r]];
+
+ append(str,header_bold_dict,_(@"UUEncoded file:"));
+ append(str,header_dict,@" %@ ",[fw preferredFilename]);
+@@ -312,7 +312,7 @@
+ }
+
+
+--(void) _renderContent:(id)p parent:(Part *)parent
++-(void) _renderContent:(id)p parent:(CWPart *)parent
+ to:(NSMutableAttributedString *)str
+ {
+ NSString *ct=[parent contentType];
+@@ -340,9 +340,9 @@
+
+
+ /* Some content classes/types we handle internally. */
+- if ([p isKindOfClass: [MimeMultipart class]])
++ if ([p isKindOfClass: [CWMIMEMultipart class]])
+ {
+- [self _render_multipart: (MimeMultipart *)p type: ct to: str];
++ [self _render_multipart: (CWMIMEMultipart *)p type: ct to: str];
+ return;
+ }
+
+@@ -352,7 +352,7 @@
+ return;
+ }
+
+- if ([p isKindOfClass: [Part class]])
++ if ([p isKindOfClass: [CWPart class]])
+ {
+ [self _renderPart: p to: str];
+ return;
+@@ -553,13 +553,13 @@
+
+ -(void) _renderPart:(id)p to:(NSMutableAttributedString *)str
+ {
+- if ([p isKindOfClass: [Message class]])
++ if ([p isKindOfClass: [CWMessage class]])
+ {
+- Message *m=(Message *)p;
++ CWMessage *m=(CWMessage *)p;
+ append(str,header_bold_dict,_(@"Subject:"));
+ append(str,header_dict,@" %@\n",[m subject]);
+ append(str,header_bold_dict,_(@"From:"));
+- append(str,header_dict,@" %@\n",[[m from] unicodeStringValue]);
++ append(str,header_dict,@" %@\n",[[m from] stringValue]);
+ append(str,header_bold_dict,_(@"Newsgroups:"));
+ append(str,header_dict,@" %@\n",[m headerValueForName: @"Newsgroups"]);
+ append(str,header_bold_dict,_(@"Date:"));
+@@ -569,9 +569,9 @@
+ append(str,nil,@"\n");
+ [self _renderContent:[m content] parent: m to:str];
+ }
+- else if ([p isKindOfClass: [Part class]])
++ else if ([p isKindOfClass: [CWPart class]])
+ { /* handles MimeBodyPart and any extensions */
+- [self _renderContent:[(Part *)p content] parent: (Part *)p to:str];
++ [self _renderContent:[(CWPart *)p content] parent: (CWPart *)p to:str];
+ }
+ else
+ {
+@@ -655,7 +655,27 @@
+ NSData *d;
+
+ d=[[NSData alloc] initWithBytes: data length: length];
+- cur_message=[(Message *)[Message alloc] initWithData: d];
++ if([mdb msg_getHeader: "ContentType" : mid])
++ {
++ cur_message=[(CWMessage *)[CWMessage alloc] initWithData: d];
++ }
++ else
++ {
++ cur_message=[(CWMessage *)[CWMessage alloc] initWithData: d
++ charset:[Pref_MessageViewing defaultEncoding]];
++ }
++ if(![cur_message contentType])
++ {
++ [cur_message setContentType:@"text/plain"];
++ }
++ else
++ {
++ ASSIGN(
++ cur_message,
++ [(CWMessage *)[CWMessage alloc] initWithData: d
++ charset:[cur_message charset]]
++ );
++ }
+ [d release];
+ {
+ const char *c;
+@@ -819,17 +839,17 @@
+ {
+ NSString *s=(NSString *)l->object;
+ NSRange r;
+- UUFile *fw;
+- r=[MimeUtility rangeOfUUEncodedStringFromString: s
++ CWUUFile *fw;
++ r=[CWUUFile rangeOfUUEncodedStringFromString: s
+ range: NSMakeRange(0,[s length])];
+
+- fw=[MimeUtility fileFromUUEncodedString: [s substringWithRange: r]];
++ fw=[CWUUFile fileFromUUEncodedString: [s substringWithRange: r]];
+ filename=AUTORELEASE(RETAIN([fw name]));
+ d=AUTORELEASE(RETAIN([fw data]));
+ }
+ else
+ {
+- Part *p=(Part *)l->object;
++ CWPart *p=(CWPart *)l->object;
+ d=(NSData *)[p content];
+ filename=[p filename];
+ }
+@@ -926,6 +946,12 @@
+
+ mid=0;
+
++ [[NSNotificationCenter defaultCenter]
++ addObserver: self
++ selector: @selector(encodingChanged:)
++ name: DefaultEncodingChangedNotification
++ object: nil];
++
+ return self;
+ }
+
+@@ -1154,6 +1180,11 @@
+ [app_delegate composeFollowupToMessage: cur_message];
+ }
+
++-(void) encodingChanged: (NSNotification *)n
++{
++ [self getData];
++ [self displayMessage];
++}
+
+ @end
+
+diff -urNad lusernet.app-0.4.2~/NNTPSourceGUI.m NNTPSourceGUI.m
+--- lusernet.app-0.4.2~/NNTPSourceGUI.m 2004-03-03 01:58:37.000000000 +0200
++++ NNTPSourceGUI.m 2006-09-27 00:13:21.000000000 +0300
+@@ -347,7 +347,6 @@
+ [win setTitle: _(@"NNTPSource properties")];
+ [win setDelegate: self];
+ [win autoSetupKeyViewChain];
+- [win release];
+
+ return self;
+ }
+diff -urNad lusernet.app-0.4.2~/Pref_MessageViewing.h Pref_MessageViewing.h
+--- lusernet.app-0.4.2~/Pref_MessageViewing.h 2002-03-11 02:06:46.000000000 +0200
++++ Pref_MessageViewing.h 2006-09-27 00:13:21.000000000 +0300
+@@ -27,6 +27,7 @@
+
+ +(NSFont *) font1;
+ +(NSFont *) font2;
+++(NSString *) defaultEncoding;
+
+ @end
+
+diff -urNad lusernet.app-0.4.2~/Pref_MessageViewing.m Pref_MessageViewing.m
+--- lusernet.app-0.4.2~/Pref_MessageViewing.m 2004-03-03 01:58:37.000000000 +0200
++++ Pref_MessageViewing.m 2006-09-27 00:13:21.000000000 +0300
+@@ -8,11 +8,14 @@
+ #include <Foundation/NSBundle.h>
+
+ #include <AppKit/NSButton.h>
++#include <AppKit/NSPopUpButton.h>
+ #include <AppKit/NSTextField.h>
+ #include <GNUstepGUI/GSVbox.h>
+ #include <GNUstepGUI/GSHbox.h>
+ #include <AppKit/NSFont.h>
+
++#include <Pantomime/CWCharset.h>
++
+ #include "Pref_MessageViewing.h"
+
+
+@@ -192,6 +195,7 @@
+ {
+ NSTextField *f;
+ NSButton *b;
++ NSPopUpButton *pop;
+ GSHbox *hb;
+
+ hb=[[GSHbox alloc] init];
+@@ -289,6 +293,49 @@
+
+ [top addView: hb enablingYResizing: NO];
+ DESTROY(hb);
++
++ [top addSeparator];
++
++ hb=[[GSHbox alloc] init];
++ [hb setDefaultMinXMargin: 4];
++ [hb setAutoresizingMask: NSViewWidthSizable];
++
++ f=[[NSTextField alloc] init];
++ [f setStringValue: _(@"Default encoding ")];
++ [f setEditable: NO];
++ [f setDrawsBackground: NO];
++ [f setBordered: NO];
++ [f setBezeled: NO];
++ [f setSelectable: NO];
++ [f sizeToFit];
++ [f setAutoresizingMask: 0];
++ [hb addView: f enablingXResizing: NO];
++ DESTROY(f);
++
++ pop = [[NSPopUpButton alloc] init];
++ [pop setPullsDown:NO];
++ NSDictionary *charsets = [CWCharset allCharsets];
++ NSEnumerator *en = [[charsets allValues] objectEnumerator];
++ NSString *encoding;
++ while((encoding = [en nextObject]))
++ {
++ [pop addItemWithTitle:encoding];
++ }
++ [pop selectItemWithTitle:
++ [charsets
++ objectForKey:
++ [sd objectForKey:@"DefaultEncoding"]]];
++ [pop synchronizeTitleAndSelectedItem];
++ [pop setTarget: self];
++ [pop setAction: @selector(changeEncoding:)];
++ [pop sizeToFit];
++ [hb addView: pop enablingXResizing: NO];
++ DESTROY(pop);
++
++
++ [top addView: hb enablingYResizing: NO];
++ DESTROY(hb);
++
+ }
+
+ [self revert];
+@@ -334,5 +381,23 @@
+ [f_cur setFont: f];
+ }
+
++-(void) changeEncoding:(id)sender
++{
++ NSDictionary *charsets = [CWCharset allCharsets];
++ sd=[NSUserDefaults standardUserDefaults];
++
++ [sender selectItemWithTitle:[sender titleOfSelectedItem]];
++ [sender synchronizeTitleAndSelectedItem];
++
++ [sd setObject:
++ [[charsets allKeysForObject:[sender titleOfSelectedItem]] objectAtIndex:0]
++ forKey:@"DefaultEncoding"];
++}
++
+++(NSString *) defaultEncoding
++{
++ return [sd stringForKey:@"DefaultEncoding"];
++}
++
+ @end
+
+diff -urNad lusernet.app-0.4.2~/main.h main.h
+--- lusernet.app-0.4.2~/main.h 2004-03-03 01:58:37.000000000 +0200
++++ main.h 2006-09-27 00:13:21.000000000 +0300
+@@ -11,6 +11,8 @@
+ @class FolderListController,LogWindowController,PreferencesWindowController;
+ @class Message;
+
++extern NSString *DefaultEncodingChangedNotification;
++
+ @interface AppDelegate : NSObject
+ {
+ NSApplication *app;
+@@ -37,7 +39,7 @@
+ @interface AppDelegate (prefs)
+ -(void) openPreferences: (id)sender;
+ @end
+-
++
+
+ extern AppDelegate *app_delegate;
+
+diff -urNad lusernet.app-0.4.2~/main.m main.m
+--- lusernet.app-0.4.2~/main.m 2004-03-03 01:58:37.000000000 +0200
++++ main.m 2006-09-27 00:13:21.000000000 +0300
+@@ -11,6 +11,8 @@
+ #include <AppKit/NSMenu.h>
+ #include <AppKit/NSWindow.h>
+
++#include <Pantomime/CWCharset.h>
++
+ #include "MsgDB.h"
+
+ #include "LogWindowController.h"
+@@ -36,6 +38,7 @@
+
+ #define LocationKey @"MessageDatabaseLocation"
+
++NSString *DefaultEncodingChangedNotification = @"DefaultEncodingChangedNotification";
+
+ @interface NSMenu (im_lazy)
+ -(id <NSMenuItem>) addItemWithTitle: (NSString *)s;
+@@ -209,6 +212,21 @@
+ #endif
+ }
+
++-(void) changeEncoding:(id)sender
++{
++ NSDictionary *charsets = [CWCharset allCharsets];
++
++ // [sender selectItemWithTitle:[sender title]];
++ // [sender synchronizeTitleAndSelectedItem];
++
++ [[NSUserDefaults standardUserDefaults] setObject:
++ [[charsets allKeysForObject:[sender title]] objectAtIndex:0]
++ forKey:@"DefaultEncoding"];
++
++ [[NSNotificationCenter defaultCenter]
++ postNotificationName: DefaultEncodingChangedNotification
++ object: nil];
++}
+
+ -(void) applicationWillFinishLaunching: (NSNotification *)n
+ {
+@@ -307,6 +325,18 @@
+ m=[[NSMenu alloc] init];
+ /* [m addItemWithTitle: _(@"Open")
+ action: @selector(openMessage:)];*/
++ m2=[[NSMenu alloc] init];
++
++ NSDictionary *charsets = [CWCharset allCharsets];
++ NSEnumerator *en = [[charsets allValues] objectEnumerator];
++ NSString *encoding;
++ while((encoding = [en nextObject]))
++ {
++ [m2 addItemWithTitle: encoding
++ action: @selector(changeEncoding:)];
++ }
++
++ [m setSubmenu: m2 forItem: [m addItemWithTitle: _(@"Change encoding...")]];
+ [m addItemWithTitle: _(@"Toggle read/unread")
+ action: @selector(messageToggleRead:)
+ keyEquivalent: @"m"];
diff --git a/news/lusernet/pkg-descr b/news/lusernet/pkg-descr
new file mode 100644
index 000000000000..b0f5f229afb3
--- /dev/null
+++ b/news/lusernet/pkg-descr
@@ -0,0 +1,3 @@
+LuserNET is an NNTP-based news reader for GNUstep.
+
+WWW: http://web.telia.com/~u42308495/alex/LuserNET/LuserNET.html
diff --git a/news/lusernet/pkg-plist b/news/lusernet/pkg-plist
new file mode 100644
index 000000000000..4d92aeee139f
--- /dev/null
+++ b/news/lusernet/pkg-plist
@@ -0,0 +1,18 @@
+Local/Applications/LuserNET.app/LuserNET
+Local/Applications/LuserNET.app/Resources/English.lproj/Localizable.strings
+Local/Applications/LuserNET.app/Resources/French.lproj/Localizable.strings
+Local/Applications/LuserNET.app/Resources/German.lproj/Localizable.strings
+Local/Applications/LuserNET.app/Resources/Info-gnustep.plist
+Local/Applications/LuserNET.app/Resources/LuserNET.desktop
+Local/Applications/LuserNET.app/Resources/News.app.tiff
+Local/Applications/LuserNET.app/Resources/Spanish.lproj/Localizable.strings
+Local/Applications/LuserNET.app/Resources/Swedish.lproj/Localizable.strings
+Local/Applications/LuserNET.app/library_paths.openapp
+Local/Applications/LuserNET.app/stamp.make
+@dirrm Local/Applications/LuserNET.app/Resources/Swedish.lproj
+@dirrm Local/Applications/LuserNET.app/Resources/Spanish.lproj
+@dirrm Local/Applications/LuserNET.app/Resources/German.lproj
+@dirrm Local/Applications/LuserNET.app/Resources/French.lproj
+@dirrm Local/Applications/LuserNET.app/Resources/English.lproj
+@dirrm Local/Applications/LuserNET.app/Resources
+@dirrm Local/Applications/LuserNET.app