debian/0000755000000000000000000000000012377671037007203 5ustar debian/watch0000644000000000000000000000011012356570515010220 0ustar version=3 http://download.gna.org/gnustep-nonfsf/LuserNET-(.*)\.tar\.gz debian/LuserNET.10000644000000000000000000000134112356570515010721 0ustar .TH LUSERNET 1 "December 30, 2003" .SH NAME LuserNET \- News Reader for GNUstep .SH SYNOPSIS .B LuserNET .SH DESCRIPTION This manual page documents briefly the .B LuserNET command. This manual page was written for the Debian distribution because the original program does not have a manual page. .PP \fBLuserNET\fP is an NNTP-based news reader for GNUstep. It features good MIME conformance and handling, an ability to handle multiple servers, intelligent scrolling, complete asynchronicity, background read-ahead, and coloring of messages based on quoting depth. .SH SEE ALSO .BR GNUstep (7). .SH AUTHOR This manual page was written by G\[:u]rkan Seng\[:u]n , for the Debian project (but may be used by others). debian/rules0000755000000000000000000000401712356572773010271 0ustar #!/usr/bin/make -f # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 include /usr/share/GNUstep/debian/config.mk include /usr/share/dpkg/buildflags.mk export GNUSTEP_MAKEFILES := $(GS_MAKE_DIR) d_app := $(CURDIR)/debian/lusernet.app LDFLAGS += -Wl,-z,defs -Wl,--as-needed TIFFICON = News.app.tiff XPMICON = $(TIFFICON:.tiff=.xpm) ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) optim := debug=yes endif build: build-arch build-indep build-arch: build-stamp build-stamp: dh_testdir $(MAKE) $(optim) CPPFLAGS="$(CPPFLAGS)" OBJCFLAGS="$(CFLAGS)" \ LDFLAGS="$(LDFLAGS)" messages=yes convert $(TIFFICON) -resize 32x32 xpm:$(XPMICON) touch build-stamp build-indep: ; clean: dh_testdir dh_testroot $(RM) $(XPMICON) $(MAKE) distclean dh_clean install: build dh_testdir dh_testroot dh_prep $(MAKE) install DESTDIR=$(d_app) GNUSTEP_INSTALLATION_DOMAIN=SYSTEM rm $(CURDIR)/debian/*.app/usr/lib/GNUstep/Applications/*.app/Resources/*.desktop install -D -m 644 debian/LuserNET.desktop \ $(d_app)/usr/share/applications/LuserNET.desktop # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installchangelogs ChangeLog dh_installdocs mv $(d_app)/usr/share/doc/lusernet.app/Changes \ $(d_app)/usr/share/doc/lusernet.app/changelog.old gsdh_gnustep dh_install $(XPMICON) /usr/share/pixmaps dh_installmenu dh_installman ifeq ($(GS_USE_FHS),yes) dh_installdirs usr/share/GNUstep mv $(d_app)$(GNUSTEP_SYSTEM_APPS)/LuserNET.app/Resources \ $(d_app)/usr/share/GNUstep/LuserNET.app dh_link usr/share/GNUstep/LuserNET.app \ $(GNUSTEP_SYSTEM_APPS)/LuserNET.app/Resources endif dh_strip dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install debian/menu0000644000000000000000000000033012356570515010062 0ustar ?package(lusernet.app):needs="X11" \ section="Applications/Network/Communication" \ title="LuserNET" command="/usr/bin/LuserNET" \ icon="/usr/share/pixmaps/News.app.xpm" \ longtitle="News reader for GNUstep" debian/copyright0000644000000000000000000000232712356574567011151 0ustar Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: LuserNET Source: http://w1.423.telia.com/~u42308495/alex/LuserNET/LuserNET.html (it is being moved at http://gna.org/projects/gnustep-nonfsf) Files: * Copyright: 2001-2002 Alexander Malmberg License: GPL-2+ Files: debian/* Copyright: 2003-2014 Debian GNUstep maintainers License: GPL-2+ License: GPL-2+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-2'. debian/docs0000644000000000000000000000001712356570515010050 0ustar Changes README debian/source/0000755000000000000000000000000012356570515010477 5ustar debian/source/format0000644000000000000000000000001412356570515011705 0ustar 3.0 (quilt) debian/patches/0000755000000000000000000000000012356570515010626 5ustar debian/patches/missing-includes.patch0000644000000000000000000000700512356570515015126 0ustar Description: Add missing #include's fixing FTBFS with current GNUstep. Author: Yavor Doganov Bug-Debian: http://bugs.debian.org/593048 Bug-Debian: http://bugs.debian.org/581956 Bug-Debian: http://bugs.debian.org/489696 Forwarded: no Last-Update: 2010-08-24 --- --- lusernet.app.orig/ComposeWindowController.m +++ lusernet.app/ComposeWindowController.m @@ -2,19 +2,9 @@ copyright 2002 Alexander Malmberg */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#import +#import +#import #include "ComposeWindowController.h" --- lusernet.app.orig/FolderListController.m +++ lusernet.app/FolderListController.m @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include --- lusernet.app.orig/FolderWindowController.m +++ lusernet.app/FolderWindowController.m @@ -19,6 +19,7 @@ #include #include #include +#include #include --- lusernet.app.orig/MessageViewController.m +++ lusernet.app/MessageViewController.m @@ -13,6 +13,8 @@ #include #include #include +#include +#include #include "MessageViewController.h" --- lusernet.app.orig/MsgDB.m +++ lusernet.app/MsgDB.m @@ -18,6 +18,8 @@ #include #include #include +#include +#include #include "MsgDB.h" --- lusernet.app.orig/NNTPSource.m +++ lusernet.app/NNTPSource.m @@ -9,7 +9,7 @@ #include #include #include - +#include #include #include "MsgDB.h" --- lusernet.app.orig/Pref_MessageViewing.m +++ lusernet.app/Pref_MessageViewing.m @@ -13,6 +13,7 @@ #include #include #include +#include #include --- lusernet.app.orig/Pref_Posting.m +++ lusernet.app/Pref_Posting.m @@ -2,9 +2,7 @@ copyright 2002 Alexander Malmberg */ -#include -#include -#include +#include #include #include #include --- lusernet.app.orig/main.m +++ lusernet.app/main.m @@ -7,9 +7,12 @@ #include #include #include +#include +#include #include #include #include +#include #include debian/patches/pantomime1.2.patch0000644000000000000000000004276512356570515014077 0ustar Description: Port to Pantomime 1.2. Author: Sergey Golovin Author: Yavor Doganov Bug-Debian: http://bugs.debian.org/489879 Forwarded: no Last-Update: 2008-07-09 --- --- /dev/null +++ lusernet.app/ChangeLog @@ -0,0 +1,41 @@ +2006-09-19 Sergey V. Golovin + + * 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 ) + + * 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 + + * Pref_MessageViewing.m ([Pref_MessageViewing -willShow]): added + a pop-up button for charset selection + ([Pref_MessageViewing -changeEncoding:]): added + +2006-09-02 Sergey Golovin + + * 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 + --- lusernet.app.orig/ComposeWindowController.h +++ lusernet.app/ComposeWindowController.h @@ -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 --- lusernet.app.orig/ComposeWindowController.m +++ lusernet.app/ComposeWindowController.m @@ -21,11 +21,12 @@ #include "main.h" #include "KeyWindow.h" #include "Pref_Posting.h" +#include "Pref_MessageViewing.h" -#include -#include -#include -#include +#include +#include +#include +#include @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); } @@ -79,9 +80,17 @@ [m setContentType: @"text/plain"]; [m setContentTransferEncoding: PantomimeEncoding8bit]; [m setFormat: PantomimeFormatFlowed]; - [m setContent: [text string]]; + NSData *td = [[text string] dataUsingEncoding: NSUTF8StringEncoding]; + [m setContent: td]; - [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 +395,7 @@ } /* TODO: handle attributation, followup to sender, followup, etc. */ -- initWithFollowupToMessage: (Message *)msg +- initWithFollowupToMessage: (CWMessage *)msg { NSDictionary *headers; NSString *subject,*references; @@ -431,9 +440,11 @@ else [str appendString: [NSString stringWithFormat: @"%@ wrote:\n",[[msg from] address]]]; - if ([[msg content] isKindOfClass: [NSString class]]) + if ([[msg content] isKindOfClass: [NSData class]]) { - NSString *content=(NSString *)[msg content]; + NSString *content = [[NSString alloc] + initWithData: (NSData *)[msg content] + encoding: NSUTF8StringEncoding]; str=[self _quoteString: content to: str]; } else --- lusernet.app.orig/FolderThreader.m +++ lusernet.app/FolderThreader.m @@ -9,7 +9,7 @@ #include "FolderThreader.h" -#include +#include 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]; } --- lusernet.app.orig/FolderWindowController.m +++ lusernet.app/FolderWindowController.m @@ -20,7 +20,7 @@ #include #include -#include +#include #include "MsgDB.h" --- lusernet.app.orig/MessageViewController.h +++ lusernet.app/MessageViewController.h @@ -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 --- lusernet.app.orig/MessageViewController.m +++ lusernet.app/MessageViewController.m @@ -21,11 +21,11 @@ #include "GUISource.h" -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include //#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,8 +264,6 @@ NSDictionary *fd; NSFont *f; - NSRange r; - if (cur_font) f=[Pref_MessageViewing font2]; else @@ -276,7 +274,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 +289,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 +310,7 @@ } --(void) _renderContent:(id)p parent:(Part *)parent +-(void) _renderContent:(id)p parent:(CWPart *)parent to:(NSMutableAttributedString *)str { NSString *ct=[parent contentType]; @@ -340,19 +338,21 @@ /* 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; } - if ([p isKindOfClass: [NSString class]] && [ct isEqual: @"text/plain"]) + if ([p isKindOfClass: [NSData class]] && [ct isEqual: @"text/plain"]) { - [self _render_article_text: (NSString *)p to: str]; - return; + NSString *pt = [[NSString alloc] initWithData: p + encoding: NSUTF8StringEncoding]; + [self _render_article_text: pt to: str]; + 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]; { @@ -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; } @@ -1151,9 +1177,14 @@ NSBeep(); return; } - [app_delegate composeFollowupToMessage: cur_message]; + [app_delegate composeFollowupToMessage: (Message *)cur_message]; } +-(void) encodingChanged: (NSNotification *)n +{ + [self getData]; + [self displayMessage]; +} @end --- lusernet.app.orig/NNTPSourceGUI.m +++ lusernet.app/NNTPSourceGUI.m @@ -347,7 +347,6 @@ [win setTitle: _(@"NNTPSource properties")]; [win setDelegate: self]; [win autoSetupKeyViewChain]; - [win release]; return self; } --- lusernet.app.orig/Pref_MessageViewing.h +++ lusernet.app/Pref_MessageViewing.h @@ -27,6 +27,7 @@ +(NSFont *) font1; +(NSFont *) font2; ++(NSString *) defaultEncoding; @end --- lusernet.app.orig/Pref_MessageViewing.m +++ lusernet.app/Pref_MessageViewing.m @@ -8,11 +8,14 @@ #include #include +#include #include #include #include #include +#include + #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 --- lusernet.app.orig/main.h +++ lusernet.app/main.h @@ -11,6 +11,8 @@ @class FolderListController,LogWindowController,PreferencesWindowController; @class Message; +extern NSString *DefaultEncodingChangedNotification; + @interface AppDelegate : NSObject { NSApplication *app; --- lusernet.app.orig/main.m +++ lusernet.app/main.m @@ -11,6 +11,8 @@ #include #include +#include + #include "MsgDB.h" #include "LogWindowController.h" @@ -36,6 +38,7 @@ #define LocationKey @"MessageDatabaseLocation" +NSString *DefaultEncodingChangedNotification = @"DefaultEncodingChangedNotification"; @interface NSMenu (im_lazy) -(id ) 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"]; debian/patches/modern-objc-api.patch0000644000000000000000000000113212356570515014612 0ustar Description: Use the modern GNU Objective-C API. Author: Colin Watson Bug-Debian: http://bugs.debian.org/633557 Forwarded: no Last-Update: 2013-06-03 --- --- lusernet.app.orig/MsgDB.m +++ lusernet.app/MsgDB.m @@ -342,7 +342,7 @@ // fprintf(stderr,"got '%s' type '%s'\n",buf,[self msg_getMetaHeader: "Type" : mid]); - c=objc_lookup_class([self msg_getMetaHeader: "Type" : mid]); + c=objc_lookUpClass([self msg_getMetaHeader: "Type" : mid]); n=[[NSNumber alloc] initWithInt: i]; src=[[c alloc] initWithMsg: mid db: self]; [sources setObject: src forKey: n]; debian/patches/gcc-warnings.patch0000644000000000000000000003173012356570515014235 0ustar Description: Fix some GCC warnings. cast to pointer from integer of different size cast from pointer to integer of different size pointer targets in assignment differ in signedness pointer targets in passing argument N of 'foo' differ in signedness conflicting types for '-foo' 'Foo' may not respond to '-bar' passing argument N of 'foo:' from distinct Objective-C type '-foo' not found in protocol(s) @interface of class 'Foo' not found no '-foo' method found format '%i' expects argument of type 'int', but argument N has type 'size_t' ignoring return value of 'foo', declared with attribute warn_unused_result Author: Yavor Doganov Bug-Debian: http://bugs.debian.org/749758 Forwarded: no Last-Update: 2014-06-11 --- --- lusernet.app.orig/NNTPServer.m +++ lusernet.app/NNTPServer.m @@ -589,9 +589,9 @@ int i,count=[runmodes count]; for (i=0;isock type: ET_RDESC watcher: self + [runloop addEvent: (void *)(intptr_t)c->sock type: ET_RDESC watcher: self forMode: [runmodes objectAtIndex: i]]; - [runloop addEvent: (void *)c->sock type: ET_EDESC watcher: self + [runloop addEvent: (void *)(intptr_t)c->sock type: ET_EDESC watcher: self forMode: [runmodes objectAtIndex: i]]; } } @@ -610,7 +610,7 @@ if (c->reg_write && !c->write_pending && c->sock>=0) { for (i=0;isock type: ET_WDESC + [runloop removeEvent: (void *)(intptr_t)c->sock type: ET_WDESC forMode: [runmodes objectAtIndex: i] all: YES]; c->reg_write=0; } @@ -618,7 +618,7 @@ if (!c->reg_write && c->write_pending && c->sock>=0) { for (i=0;isock type: ET_WDESC watcher: self + [runloop addEvent: (void *)(intptr_t)c->sock type: ET_WDESC watcher: self forMode: [runmodes objectAtIndex: i]]; c->reg_write=1; } @@ -683,11 +683,11 @@ int i,count=[runmodes count]; for (i=0;isock type: ET_RDESC + [runloop removeEvent: (void *)(intptr_t)c->sock type: ET_RDESC forMode: [runmodes objectAtIndex: i] all: YES]; - [runloop removeEvent: (void *)c->sock type: ET_WDESC + [runloop removeEvent: (void *)(intptr_t)c->sock type: ET_WDESC forMode: [runmodes objectAtIndex: i] all: YES]; - [runloop removeEvent: (void *)c->sock type: ET_EDESC + [runloop removeEvent: (void *)(intptr_t)c->sock type: ET_EDESC forMode: [runmodes objectAtIndex: i] all: YES]; } } @@ -740,7 +740,7 @@ memcpy(cn->resp_msg,b,c-b); cn->resp_msg[c-b]=0; } - cn->resp_code=atoi(cn->resp_buf); + cn->resp_code=atoi((char *)cn->resp_buf); c+=2; if (c==e) cn->resp_buf_len=0; @@ -828,7 +828,7 @@ { if (*b=='\n') { - list[num++]=d; + list[num++]=(char *)d; d=b+1; *b=0; } @@ -955,11 +955,11 @@ close(c->sock); for (i=0;isock type: ET_RDESC + [runloop removeEvent: (void *)(intptr_t)c->sock type: ET_RDESC forMode: [runmodes objectAtIndex: i] all: YES]; - [runloop removeEvent: (void *)c->sock type: ET_EDESC + [runloop removeEvent: (void *)(intptr_t)c->sock type: ET_EDESC forMode: [runmodes objectAtIndex: i] all: YES]; - [runloop removeEvent: (void *)c->sock type: ET_WDESC + [runloop removeEvent: (void *)(intptr_t)c->sock type: ET_WDESC forMode: [runmodes objectAtIndex: i] all: YES]; } c->sock=-1; @@ -1047,7 +1047,7 @@ c->write_pending=NULL; c->write_len=length; - c->write_pending=data; + c->write_pending=(char *)data; c->write_pending_ofs=0; #ifdef DEBUG_SOCKET @@ -1066,7 +1066,7 @@ con_t *c; int i,j; // printf("--- got event %i type %i extra %p\n",(int)data,type,extra); - j=(int)data; + j=(intptr_t)data; for (i=0,c=cons;isock==j) break; @@ -1253,7 +1253,7 @@ { char **list; int num; - char *b,*d,*e; + unsigned char *b,*d,*e; num=0; list=malloc(sizeof(char *)*(q->d.range.h-q->d.range.l+1)); @@ -1263,7 +1263,7 @@ { if (*b=='\n') { - list[num++]=d; + list[num++]=(char *)d; d=b+1; *b=0; } --- lusernet.app.orig/ComposeWindowController.h +++ lusernet.app/ComposeWindowController.h @@ -26,7 +26,7 @@ - initWithHeaders: (NSDictionary *)headers quoteContent: (NSString *)content; - initWithHeaders: (NSDictionary *)headers; - initWithFollowupToMessage: (CWMessage *)msg; - +- (void) postedArticle: (BOOL)success; @end #endif --- lusernet.app.orig/NNTPServer.h +++ lusernet.app/NNTPServer.h @@ -108,7 +108,7 @@ -(void) enableConnect: (int)should_connect; -(void) enableTimeout: (int)should_connect; --(void) setReceiver: (id)arec; +-(void) setReceiver: (id)arec; -(void) closeAllConnections; -(void) killAllConnections; --- lusernet.app.orig/NNTPSource.m +++ lusernet.app/NNTPSource.m @@ -11,6 +11,7 @@ #include #include #include +#import #include "MsgDB.h" @@ -19,6 +20,7 @@ #include "NNTPSourceGUI.h" #include "NNTPServer.h" +#import "ComposeWindowController.h" typedef struct nntpsource_group_s group_t; @@ -346,7 +348,7 @@ -(void) nntp_postArticle: (BOOL)success qid: (unsigned int)qid { NSNumber *n=[[NSNumber alloc] initWithInt: qid]; - NSObject *w; + id w; w=[request_map objectForKey: n]; if (!w) --- lusernet.app.orig/MsgDB.m +++ lusernet.app/MsgDB.m @@ -26,7 +26,14 @@ #define HASH_SIZE (1031*5) - +/* Convenience macro to print information if errors occur when parsing + the database. It is necessary to abort, otherwise a broken file is + going to be saved by -syncToDisk when the app exits normally. */ +#define READFAIL(function,what) \ + { \ + NSLog(@"%@ failed while reading %@", function, what); \ + abort(); \ + } NSString *MsgDB_MsgDStatusNotification=@"MsgDB_MsgDStatusNotification", @@ -139,7 +146,7 @@ msg_id_t hash_next; int dstatus; - char *data; + unsigned char *data; int data_length; unsigned int src_get_id; @@ -669,19 +676,19 @@ fprintf(f,"%i\n",num_meta_headers); for (i=0;inum_mhs,strlen(m->message_id)); + fprintf(f,"%i %zu ",m->num_mhs,strlen(m->message_id)); fwrite(m->message_id,1,strlen(m->message_id),f); fputc('\n',f); for (j=0;jnum_mhs;j++) { - fprintf(f,"%i %i ",m->mhs[j].mhid,strlen(m->mhs[j].value)); + fprintf(f,"%i %zu ",m->mhs[j].mhid,strlen(m->mhs[j].value)); fwrite(m->mhs[j].value,1,strlen(m->mhs[j].value),f); fputc('\n',f); } @@ -726,36 +733,43 @@ mhidx[i]=-1; for (i=0;inum_mhs,&l); + if (fscanf(f,"%i %i ",&m->num_mhs,&l) < 1) + READFAIL(@"fscanf", @"length of message-ids"); m->message_id=malloc(l+1); if (!m->message_id) abort(); - fread(m->message_id,1,l,f); + if (fread(m->message_id,1,l,f) < 1) + READFAIL(@"fread", @"message-ids"); m->message_id[l]=0; fgetc(f); m->mhs=malloc(sizeof(meta_header_t)*m->num_mhs); if (!m->mhs) abort(); for (j=0;jnum_mhs;j++) { - fscanf(f,"%i %i",&k,&l); + if (fscanf(f,"%i %i",&k,&l) < 1) + READFAIL(@"fscanf", @"length of all headers"); fgetc(f); if (mhidx[k]==-1) mhidx[k]=[self getMetaHeaderNum: mhname[k]]; m->mhs[j].mhid=mhidx[k]; m->mhs[j].value=malloc(l+1); if (!m->mhs[j].value) abort(); - fread(m->mhs[j].value,1,l,f); + if (fread(m->mhs[j].value,1,l,f) == 0) + NSLog(@"All headers read"); m->mhs[j].value[l]=0; fgetc(f); } --- lusernet.app.orig/MessageViewController.m +++ lusernet.app/MessageViewController.m @@ -224,7 +224,7 @@ { int disp; - if (cur_options && (disp=(int)NSMapGet(cur_options,mp))) + if (cur_options && (disp=(intptr_t)NSMapGet(cur_options,mp))) disp--; else disp=[mp count]-1; @@ -407,7 +407,7 @@ if (d) { append(str,nil,@" "); - if (cur_options && ((int)NSMapGet(cur_options,p))==1) + if (cur_options && ((intptr_t)NSMapGet(cur_options,p))==1) { appendLink(str,LINK_DATA_SHOW,p,0,_(@"Hide raw data")); dbytes=[d length]; @@ -422,7 +422,7 @@ append(str,nil,@" "); - if (cur_options && ((int)NSMapGet(cur_options,p))==2) + if (cur_options && ((intptr_t)NSMapGet(cur_options,p))==2) { appendLink(str,LINK_DATA_SHOW_TEXT,p,0,_(@"Hide text")); } @@ -467,7 +467,7 @@ append(str,fd,@".\n"); return; } - else if (((int)NSMapGet(cur_options,p))==2) + else if (((intptr_t)NSMapGet(cur_options,p))==2) { /* TODO: do this cleaner? automatically? */ if (d) { /* TODO? if it's data, pretend it's ASCII and try to handle again? */ @@ -802,7 +802,7 @@ { if (!cur_options) return YES; /* shouldn't happen */ - NSMapInsert(cur_options,l->object,(void *)l->value); + NSMapInsert(cur_options,l->object,(void *)(intptr_t)l->value); [self displayMessage]; return YES; } @@ -811,7 +811,7 @@ { if (!cur_options) return YES; - if (((int)NSMapGet(cur_options,l->object))==1) + if (((intptr_t)NSMapGet(cur_options,l->object))==1) NSMapRemove(cur_options,l->object); else NSMapInsert(cur_options,l->object,(void *)1); @@ -822,7 +822,7 @@ { if (!cur_options) return YES; - if (((int)NSMapGet(cur_options,l->object))==2) + if (((intptr_t)NSMapGet(cur_options,l->object))==2) NSMapRemove(cur_options,l->object); else NSMapInsert(cur_options,l->object,(void *)2); @@ -837,7 +837,7 @@ NSData *d; NSString *filename; - if ([l->object isKindOf: [NSString class]]) + if ([l->object isKindOfClass: [NSString class]]) { NSString *s=(NSString *)l->object; NSRange r; @@ -1179,7 +1179,7 @@ NSBeep(); return; } - [app_delegate composeFollowupToMessage: (Message *)cur_message]; + [app_delegate composeFollowupToMessage: (CWMessage *)cur_message]; } -(void) encodingChanged: (NSNotification *)n --- lusernet.app.orig/main.h +++ lusernet.app/main.h @@ -9,7 +9,7 @@ @class NSApplication,NSMutableDictionary; @class FolderListController,LogWindowController,PreferencesWindowController; -@class Message; +@class CWMessage; extern NSString *DefaultEncodingChangedNotification; @@ -29,7 +29,7 @@ -(void) openMessageWindow: (msg_id_t)mid; -(void) composeArticle: (NSDictionary *)headers; --(void) composeFollowupToMessage: (Message *)msg; +-(void) composeFollowupToMessage: (CWMessage *)msg; -(void) postArticleFrom: (id)sender : (const unsigned char *)data : (int)length; /* TODO */ --- lusernet.app.orig/main.m +++ lusernet.app/main.m @@ -22,6 +22,7 @@ #include "FolderWindowController.h" #include "FolderListController.h" #include "ComposeWindowController.h" +#import "NNTPSource.h" #include "main.h" @@ -71,7 +72,7 @@ [[[ComposeWindowController alloc] initWithHeaders: headers] showWindow: self]; } --(void) composeFollowupToMessage: (Message *)msg +-(void) composeFollowupToMessage: (CWMessage *)msg { [[[ComposeWindowController alloc] initWithFollowupToMessage: msg] showWindow: self]; } @@ -83,9 +84,9 @@ } --(void) postArticleFrom: (id)sender : (const unsigned char *)data : (int)length +-(void) postArticleFrom: (id)sender : (unsigned char *)data : (int)length { /* TODO */ - NSObject *src; + id src; // fprintf(stderr,"post article %@\n",sender); src=[[mdb sources] objectAtIndex: 0]; --- lusernet.app.orig/FolderListController.m +++ lusernet.app/FolderListController.m @@ -6,6 +6,7 @@ #include #include #include +#import #include #include #include --- lusernet.app.orig/FolderWindowController.m +++ lusernet.app/FolderWindowController.m @@ -20,6 +20,7 @@ #include #include #include +#import #include --- lusernet.app.orig/Pref_MessageViewing.m +++ lusernet.app/Pref_MessageViewing.m @@ -6,6 +6,7 @@ #include #include #include +#import #include #include debian/patches/link-order.patch0000644000000000000000000000112112356570515013710 0ustar Description: Fix build with 'ld --as-needed'. Put -lPantomime in LuserNET_GUI_LIBS rather than LuserNET_LDFLAGS. Author: Colin Watson Bug-Debian: http://bugs.debian.org/633556 Bug-Ubuntu: http://bugs.launchpad.net/ubuntu/+source/lusernet.app/+bug/771011 Forwarded: no Last-Update: 2013-06-03 --- --- lusernet.app.orig/GNUmakefile +++ lusernet.app/GNUmakefile @@ -44,7 +44,7 @@ MAKE_STRINGS_OPTIONS = --aggressive-match --aggressive-remove -LuserNET_LDFLAGS += -lPantomime +LuserNET_GUI_LIBS += -lPantomime #-lMime include $(GNUSTEP_MAKEFILES)/application.make debian/patches/mark-string-as-translatable.patch0000644000000000000000000000064312356570515017163 0ustar Description: Mark one string as translatable. Author: Yavor Doganov Forwarded: no Last-Update: 2006-11-21 --- --- lusernet.app.orig/Pref_ReadAhead.m +++ lusernet.app/Pref_ReadAhead.m @@ -172,7 +172,7 @@ GSVbox *vb; box=[[NSBox alloc] init]; - [box setTitle: @"Read ahead what?"]; + [box setTitle: _(@"Read ahead what?")]; vb=[[GSVbox alloc] init]; [vb setDefaultMinYMargin: 4]; debian/patches/bg-translation.patch0000644000000000000000000004230512356570515014577 0ustar Description: Add Bulgarian translation. Author: Yavor Doganov Forwarded: no Last-Update: 2006-11-21 --- --- /dev/null +++ lusernet.app/Bulgarian.lproj/Localizable.strings @@ -0,0 +1,415 @@ + +/* + Bulgarian translation of LuserNET. + Copyright (C) 2006 Free Software Foundation, Inc. + This file is distributed under the same license as LuserNET. + Translated by: Yavor Doganov , 2006. +*/ + +/*** +Bulgarian.lproj/Localizable.strings +updated by make_strings 2006-11-15 15:06:47 +0200 +add comments above this one +***/ + + +/*** Keys found in multiple places ***/ + +/* File: ComposeWindowController.m:220 */ +/* File: MessageViewController.m:559 */ +"Subject:" = "Тема:"; + +/* File: ComposeWindowController.m:272 */ +/* File: MessageViewController.m:561 */ +"From:" = "От:"; + +/* File: FolderListController.m:69 */ +/* File: main.m:253 */ +"Folder list" = "Списък с групи"; + +/* File: FolderListController.m:72 */ +/* File: Pref_Sources.m:104 */ +"Name" = "Име"; + +/* File: MessageViewController.m:727 */ +/* File: main.m:348 */ +"Download" = "Изтегляне"; + +/* File: MessageViewController.m:298 */ +/* File: MessageViewController.m:402 */ +/* File: main.m:350 */ +"Save..." = "Запазване..."; + +/* File: NNTPSourceGUI.m:228 */ +/* File: Pref_Sources.m:150 */ +"Add" = "Добавяне"; + +/* File: NNTPSourceGUI.m:237 */ +/* File: Pref_Sources.m:141 */ +"Remove" = "Премахванe"; + + +/*** Strings from ComposeWindowController.m ***/ +/* File: ComposeWindowController.m:246 */ +"Newsgroups (separate with commas):" += "Групи за новини (разделени със запетаи):"; +/* File: ComposeWindowController.m:291 */ +"Post" = "Изпращане"; + + +/*** Strings from FolderListController.m ***/ +/* File: FolderListController.m:78 */ +"Messages" = "Статии"; + + +/*** Strings from FolderWindowController.m ***/ +/* File: FolderWindowController.m:679 */ +"Date" = "Дата"; +/* File: FolderWindowController.m:673 */ +"From" = "От"; +/* File: FolderWindowController.m:661 */ +"Subject" = "Тема"; + + +/*** Strings from LogWindowController.m ***/ +/* File: LogWindowController.m:35 */ +"Log" = "Дневник"; + + +/*** Strings from MessageViewController.m ***/ +/* File: MessageViewController.m:723 */ +" unknown" = " непознато"; +/* File: MessageViewController.m:233 */ +"Alternatives:" = "Алтернативи:"; +/* File: MessageViewController.m:567 */ +"Content-type:" = "Тип съдържание:"; +/* File: MessageViewController.m:231 */ +"Currently shown:" = "В момента показани:"; +/* File: MessageViewController.m:741 */ +"Data cannot be downloaded for %s since it has no source." += "Данните за %s не могат да бъдат изтеглени, понеже няма изходен код."; +/* File: MessageViewController.m:736 */ +"Data for %s is currently being downloaded." += "Данните за %s се изтеглят в момента."; +/* File: MessageViewController.m:731 */ +"Data for %s is unavailable due to an error." += "Данните за %s не са налични заради грешка."; +/* File: MessageViewController.m:565 */ +"Date:" = "Дата:"; +/* File: MessageViewController.m:332 */ +"Description:" = "Описание:"; +/* File: MessageViewController.m:247 */ +"Displaying multipart with %i parts: %@\n" += "Показване на композитна статия с %i части: %@\n"; +/* File: MessageViewController.m:337 */ +"Filename:" = "Име на файл:"; +/* File: MessageViewController.m:410 */ +"Hide raw data" = "Скриване на изходните данни"; +/* File: MessageViewController.m:425 */ +"Hide text" = "Скриване на текста"; +/* File: MessageViewController.m:563 */ +"Newsgroups:" = "Групи за новини"; +/* File: MessageViewController.m:714 */ +"No data has been downloaded for %s." = "Не бяха изтеглени данни за %s."; +/* File: MessageViewController.m:551 */ +"No icon for part.\n" = "Няма икона за тази част.\n"; +/* File: MessageViewController.m:600 */ +"Raw source:\n\n" = "Изходни данни:\n\n"; +/* File: MessageViewController.m:858 */ +"Save data" = "Запазване на данните"; +/* File: MessageViewController.m:1146 */ +"Save message" = "Запазване на статията"; +/* File: MessageViewController.m:417 */ +"Show raw data" = "Показване на изходните данни"; +/* File: MessageViewController.m:719 */ +/* File: MessageViewController.m:398 */ +/* File: MessageViewController.m:301 */ +"Size:" = "Размер:"; +/* File: MessageViewController.m:429 */ +"Try to show as text" = "Опит за показване като текст"; +/* File: MessageViewController.m:393 */ +"Type:" = "Тип:"; +/* File: MessageViewController.m:296 */ +"UUEncoded file:" = "Файл, кодиран с „uuencode“:"; +/* File: MessageViewController.m:383 */ +"Unable to render content of class '%@' (type '%@'). Please report this as a bug.\n" += "Неуспех при изобразяването на съдържанието на клас „%@“ (тип „%@“). Моля, докладвайте това като грешка.\n"; +/* File: MessageViewController.m:579 */ +"Unable to render part of class '%@'. Please report this as a bug.\n" += "Неуспех при изобразяването на част от клас „%@“. Моля, докладвайте това като грешка.\n"; +/* File: MessageViewController.m:709 */ +"Unknown status %i for %s." = "Непознато състояние %i на %s."; +/* File: MessageViewController.m:253 */ +"\nPart:" = "\nЧаст:"; +/* File: MessageViewController.m:749 */ +"\n\nYou can set a source for this message by clicking on one of the sources:\n\n" += "\n\nМоже да настроите изходен код за тази статия, като натиснете някои от вариантите:\n\n"; + + +/*** Strings from NNTPServer.m ***/ +/* File: NNTPServer.m:563 */ +"Can't open connection: %s" += "Неуспех при осъществяването на свързването: %s"; +/* File: NNTPServer.m:1154 */ +"Closing connection: %i %s" = "Разпадане на свързването: %i %s"; +/* File: NNTPServer.m:542 */ +"Connecting to %i.%i.%i.%i:%i..." = "Свързване към %i.%i.%i.%i:%i..."; +/* File: NNTPServer.m:1161 */ +"New connection (%i total): %i %s" = "Ново свързване (общо %i): %i %s"; +/* File: NNTPServer.m:476 */ +"Resolved '%s' to %i.%i.%i.%i" = "„%s“ се разреши като %i.%i.%i.%i"; +/* File: NNTPServer.m:1178 */ +/* File: NNTPServer.m:1173 */ +"Unexpected response when connecting: %i %s" += "Неочакван отговор при свързване: %i %s"; +/* File: NNTPServer.m:554 */ +"can't create socket: %s" = "неуспех при създаването на гнездо: %s"; +/* File: NNTPServer.m:578 */ +"fcntl failed to set non-blocking mode: %s" += "fcntl не успя да определи неблокиращ режим: %s"; +/* File: NNTPServer.m:469 */ +"lookup of %s failed: %s" = "неуспех при откриването на %s: %s"; +/* File: NNTPServer.m:513 */ +/* File: NNTPServer.m:500 */ +"warning: can't find protocol, assuming 0" += "предупреждение: неуспех при намирането на протокола, счита се 0"; +/* File: NNTPServer.m:488 */ +"warning: can't find service 'nntp', assuming port 119" += "предупреждение: неуспех при намирането на услугата „nntp“, приема се порт 119"; + + +/*** Strings from NNTPSource.m ***/ +/* File: NNTPSource.m:221 */ +"%i new messages in '%s', retrieving headers..." += "%i нови статии в „%s“, изтегляне на заглавията..."; +/* File: NNTPSource.m:165 */ +"Downloaded %ikb for '%@'" = "Изтеглени са %i кБ от „%@“"; +/* File: NNTPSource.m:144 */ +"Failed to connect: %@" = "Неуспех при свързването: %@"; +/* File: NNTPSource.m:325 */ +"Got headers in '%s': %5i/%5i (%5i) ..." += "Изтеглени заглавията в %s“: %5i/%5i (%5i) ..."; +/* File: NNTPSource.m:338 */ +"Got headers in '%s': %5i/%5i (%5i) Done." += "Изтеглени заглавията в „%s“: %5i/%5i (%5i) Готово."; +/* File: NNTPSource.m:184 */ +"Group '%s' contains message %i - %i." += "Групата „%s“ съдържа статии %i - %i."; +/* File: NNTPSource.m:194 */ +"Group '%s' doesn't exist." = "Групата „%s“ не съществува."; +/* File: NNTPSource.m:209 */ +"No new messages in '%s'." = "Няма нови статии в „%s“."; + + +/*** Strings from NNTPSourceGUI.m ***/ +/* File: NNTPSourceGUI.m:101 */ +"" = "<Погледнете в дневника (alt-l)>"; +/* File: NNTPSourceGUI.m:385 */ +"" = "<неизвестно>"; +/* File: NNTPSourceGUI.m:148 */ +"Done" = "Готово"; +/* File: NNTPSourceGUI.m:273 */ +"Group" = "Група"; +/* File: NNTPSourceGUI.m:204 */ +"Group name:" = "Име на групата:"; +/* File: NNTPSourceGUI.m:332 */ +"Host:" = "Хост:"; +/* File: NNTPSourceGUI.m:185 */ +"Last message (use query):" = "Последна статия (използвайте „Търсене“):"; +/* File: NNTPSourceGUI.m:279 */ +"Last msg" = "Последна ст-я"; +/* File: NNTPSourceGUI.m:347 */ +"NNTPSource properties" = "Настройки на източника на NNTP"; +/* File: NNTPSourceGUI.m:313 */ +"Port:" = "Порт:"; +/* File: NNTPSourceGUI.m:246 */ +"Query" = "Търсене"; + + +/*** Strings from Pref_MessageViewing.m ***/ +/* File: Pref_MessageViewing.m:206 */ +"Automatically download messages smaller than:" += "Автоматично изтегляне на статии, по-малки от:"; +/* File: Pref_MessageViewing.m:179 */ +"Color lines in messages based on quoting depth." += "Цветни редове в статиите, на базата на цитирания текст."; +/* File: Pref_MessageViewing.m:304 */ +"Default encoding " = "Кодиране по подразбиране "; +/* File: Pref_MessageViewing.m:269 */ +"Message font #1:" = "Шрифт #1 за статии:"; +/* File: Pref_MessageViewing.m:235 */ +"Message font #2:" = "Шрифт #2 за статии:"; +/* File: Pref_MessageViewing.m:155 */ +"Message viewing" = "Четене на статии"; +/* File: Pref_MessageViewing.m:160 */ +"Message\nviewing" = "Четене\nна статии"; +/* File: Pref_MessageViewing.m:287 */ +/* File: Pref_MessageViewing.m:253 */ +"Pick font..." = "Избор на шрифт..."; +/* File: Pref_MessageViewing.m:186 */ +"Scroll intelligently (ie. skip quoted sections and signatures)." += "Интелигентно прелистване (пропускане на цитиран текст и подписи)."; + + +/*** Strings from Pref_Posting.m ***/ +/* File: Pref_Posting.m:230 */ +"Browse..." = "Разглеждане..."; +/* File: Pref_Posting.m:260 */ +"Contents of file" = "Съдържание на файл"; +/* File: Pref_Posting.m:282 */ +"From-address:" = "Адрес:"; +/* File: Pref_Posting.m:259 */ +"Literal" = "Текст"; +/* File: Pref_Posting.m:308 */ +"Name:" = "Име:"; +/* File: Pref_Posting.m:261 */ +"Output from program" = "Изход от програма"; +/* File: Pref_Posting.m:192 */ +"Post articles as quoted-printable" += "Изпращане на статиите като „quoted-printable“"; +/* File: Pref_Posting.m:151 */ +/* File: Pref_Posting.m:156 */ +"Posting" = "Изпращане"; +/* File: Pref_Posting.m:246 */ +"Signature type:" = "Тип на подписа:"; +/* File: Pref_Posting.m:212 */ +"Source:" = "Източник:"; +/* File: Pref_Posting.m:76 */ +"Unable to get signature by running '%@'.\n" += "Неуспех при получаването на подписа при изпълнение на „%@“.\n"; +/* File: Pref_Posting.m:65 */ +"Unable to read signature from '%@'.\n" += "Неуспех при четенето на подписа от „%@“.\n"; + + +/*** Strings from Pref_ReadAhead.m ***/ +/* File: Pref_ReadAhead.m:181 */ +"Next unread past the current thread." += "Следващата непрочетена след текущата нишка."; +/* File: Pref_ReadAhead.m:188 */ +"Next unread." = "Следващата непрочетена."; +/* File: Pref_ReadAhead.m:202 */ +"Next." = "Следващата."; +/* File: Pref_ReadAhead.m:195 */ +"Previous." = "Предходната."; +/* File: Pref_ReadAhead.m:216 */ +"Read ahead (ie. start downloading related messages\nwhen a message is selected)." += "Предварително изтегляне (изтегляне на съответните статии,\nкогато дадена статия е избрана)."; +/* File: Pref_ReadAhead.m:175 */ +"Read ahead what?" = "Предварително четене на какво?"; +/* File: Pref_ReadAhead.m:123 */ +"Read-\nahead" = "Предварително\nизтегляне"; +/* File: Pref_ReadAhead.m:118 */ +"Read-ahead" = "Предварително изтегляне"; +/* File: Pref_ReadAhead.m:147 */ +"Read-ahead downloads messages smaller than:" += "При тази опция се изтеглят статии, по-малки от:"; + + +/*** Strings from Pref_Sources.m ***/ +/* File: Pref_Sources.m:98 */ +"Id" = "И-р"; +/* File: Pref_Sources.m:236 */ +"Message sources" = "Източници за статии"; +/* File: Pref_Sources.m:219 */ +"Message\nsources" = "Източници\nза статии"; +/* File: Pref_Sources.m:159 */ +"Properties..." = "Настройки..."; +/* File: Pref_Sources.m:110 */ +"Type" = "Вид"; + + +/*** Strings from PreferencesWindowController.m ***/ +/* File: PreferencesWindowController.m:119 */ +"Preferences" = "Настройки"; +/* File: PreferencesWindowController.m:66 */ +"Revert" = "Връщане"; +/* File: PreferencesWindowController.m:74 */ +"Save" = "Запазване"; + + +/*** Strings from main.m ***/ +/* File: main.m:288 */ +"All" = "Всички"; +/* File: main.m:313 */ +"Arrival" = "Дата"; +/* File: main.m:282 */ +"Branch" = "Клон"; +/* File: main.m:339 */ +"Change encoding..." = "Смяна на кодирането..."; +/* File: main.m:393 */ +"Close" = "Затваряне"; +/* File: main.m:364 */ +"Compose" = "Съставяне"; +/* File: main.m:370 */ +"Copy" = "Копиране"; +/* File: main.m:373 */ +"Cut" = "Отрязване"; +/* File: main.m:379 */ +"Edit" = "Редактиране"; +/* File: main.m:320 */ +"Folder" = "Група"; +/* File: main.m:361 */ +"Followup to group" = "Отговор"; +/* File: main.m:405 */ +"Hide" = "Скриване"; +/* File: main.m:243 */ +"Info" = "Информация"; +/* File: main.m:241 */ +"Info..." = "Относно..."; +/* File: main.m:388 */ +"Log window" = "Дневник"; +/* File: main.m:291 */ +"Mark read" = "Отбелязване като прочетени"; +/* File: main.m:353 */ +"Message" = "Статия"; +/* File: main.m:277 */ +"Move to" = "Преход до"; +/* File: main.m:359 */ +"New article" = "Нова статия"; +/* File: main.m:271 */ +"Next branch" = "Следващ клон"; +/* File: main.m:274 */ +"Next thread" = "Следвща нишка"; +/* File: main.m:265 */ +"Next unread" = "Следваща непрочетена"; +/* File: main.m:251 */ +"Open folder" = "Отваряне на групата"; +/* File: main.m:248 */ +"Open list" = "Отваряне на списъка"; +/* File: main.m:262 */ +"Parent" = "Предходна"; +/* File: main.m:376 */ +"Paste" = "Поставяне"; +/* File: main.m:239 */ +"Preferences..." = "Настройки..."; +/* File: main.m:409 */ +"Quit" = "Изход"; +/* File: main.m:315 */ +"Reverse arrival" = "Дата в обратен ред"; +/* File: main.m:298 */ +"Reverse thread" = "Нишка в обратен ред"; +/* File: main.m:268 */ +"Scroll/next" = "Прелистване/следваща"; +/* File: main.m:401 */ +"Services" = "Услуги"; +/* File: main.m:346 */ +"Show source" = "Код на статията"; +/* File: main.m:317 */ +"Sort by" = "Подреждане по"; +/* File: main.m:343 */ +"Switch font" = "Смяна на шрифт"; +/* File: main.m:296 */ +/* File: main.m:285 */ +"Thread" = "Нишка"; +/* File: main.m:340 */ +"Toggle read/unread" = "Отбелязване като прочетена/непрочетена"; +/* File: main.m:384 */ +"Update" = "Обновяване"; +/* File: main.m:419 */ +"Welcome to LuserNET.app v%s" = "Добре дошли в LuserNET.app v%s"; +/* File: main.m:396 */ +"Windows" = "Прозорци"; +/* File: main.m:420 */ +"alt-f brings up the folder lists; alt-u checks for new messages" += "alt-f показва списъка с групи; alt-u проверява за нови статии"; --- lusernet.app.orig/GNUmakefile +++ lusernet.app/GNUmakefile @@ -40,7 +40,7 @@ LuserNET_RESOURCE_FILES = News.app.tiff LuserNET_LOCALIZED_RESOURCE_FILES = Localizable.strings -LuserNET_LANGUAGES = English Swedish Spanish French German +LuserNET_LANGUAGES = Bulgarian English Swedish Spanish French German MAKE_STRINGS_OPTIONS = --aggressive-match --aggressive-remove debian/patches/series0000644000000000000000000000023312356570515012041 0ustar pantomime1.2.patch missing-includes.patch mark-string-as-translatable.patch bg-translation.patch link-order.patch modern-objc-api.patch gcc-warnings.patch debian/compat0000644000000000000000000000000212356570515010375 0ustar 7 debian/control0000644000000000000000000000174012356570515010604 0ustar Source: lusernet.app Section: gnustep Priority: optional Maintainer: Debian GNUstep maintainers Uploaders: Yavor Doganov Build-Depends: debhelper (>= 7), libgnustep-gui-dev, libpantomime1.2-dev, imagemagick Standards-Version: 3.9.5 Vcs-Git: git://anonscm.debian.org/pkg-gnustep/lusernet.app.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-gnustep/lusernet.app.git Package: lusernet.app Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, ${gnustep:Depends} Provides: news-reader Description: News reader for GNUstep LuserNET is an NNTP based news reader for GNUstep. Although it's at an early version, it's already quite usable. The following features are available: . * Coloring of messages based on quoting depth. * Background read-ahead. * Intelligent scrolling. * Handles multiple servers. * Completely asynchronous. * Good MIME conformance and handling. debian/changelog0000644000000000000000000002234212377671037011060 0ustar lusernet.app (0.4.2-7build1) utopic; urgency=medium * Rebuild against libgnustep-gui0.24. -- Colin Watson Thu, 28 Aug 2014 11:17:03 -0700 lusernet.app (0.4.2-7) unstable; urgency=medium * Ack NMU, thanks Colin Watson. * debian/source/format: Switch to 3.0 (quilt). * debian/control (Build-Depends): Remove dpatch. (Vcs-Arch): Replace with Vcs-Git and Vcs-Browser. (Homepage): Remove; not accessible. (Standards-Version): Compliant with 3.9.5 as of this release. * debian/rules: Don't include dpatch.mk. Enable hardening. (clean): Merge the clean-patched recipe here. (build-arch, build-indep): New targets as required by Policy. * debian/patches/00list: * debian/patches/05_pantomime1.2.dpatch: * debian/patches/07_missing-includes.dpatch: * debian/patches/10_mark_string_as_translatable.dpatch: * debian/patches/20_bg_translation.dpatch: * debian/patches/30_link_order.dpatch: * debian/patches/40_modern_objc_api.dpatch: Rename/quiltify as... * debian/patches/series: * debian/patches/pantomime1.2.patch: * debian/patches/missing-includes.patch: * debian/patches/mark-string-as-translatable.patch: * debian/patches/bg-translation.patch: * debian/patches/link-order.patch: * debian/patches/modern-objc-api.patch: ...and add DEP-3 headers. * debian/patches/gcc-warnings.patch: New (Closes: #749758). * debian/README.source: Delete. * debian/watch: Update for the new upstream location, even though there's no release yet. * debian/LuserNET.desktop: Add Keywords field. * debian/copyright: Switch to format 1.0. -- Yavor Doganov Wed, 11 Jun 2014 03:38:26 +0300 lusernet.app (0.4.2-6.1) unstable; urgency=low * Non-maintainer upload. * debian/patches/30_link_order.dpatch: Fix link order with 'ld --as-needed' (closes: #633556, LP: #771011). * debian/patches/40_modern_objc_api.dpatch: Use the modern GNU Objective-C API (closes: #633557). -- Colin Watson Mon, 03 Jun 2013 18:22:12 +0100 lusernet.app (0.4.2-6) unstable; urgency=medium * debian/patches/07_missing-includes.dpatch: Update to fix FTBFS with gnustep-base/1.20.1 (Closes: #593048). * debian/control (Standards-Version): Set to 3.9.1 (no changes needed). -- Yavor Doganov Tue, 24 Aug 2010 18:39:30 +0300 lusernet.app (0.4.2-5) unstable; urgency=low * debian/patches/07_missing-includes.dpatch: Simplify a bit and fix FTBFS with gnustep-base/1.20.0 (Closes: #581956). * debian/compat: Set to 7. * debian/control (Build-Depends): Bump debhelper accordingly. Remove version requirement for libgnustep-gui-dev. (Section): Change to `gnustep'. (Depends): Add ${gnustep:Depends}. (Description): Extend. (Standards-Version): Compliant to 3.8.4 as of this release. (Vcs-Arch): New field. * debian/LuserNET.desktop: Set version to 1.0. * debian/rules: Export GNUSTEP_MAKEFILES and remove gs_make usage. (OBJCFLAGS): Do not define; use debug=yes conditionally. (install): Replace dh_clean -k with dh_prep. * debian/source/format: * debian/README.source: * debian/watch: New file. -- Yavor Doganov Wed, 19 May 2010 10:42:03 +0300 lusernet.app (0.4.2-4) unstable; urgency=low * debian/control (Section): Set to `news' to match the override file. (Maintainer): Adopt package; set to the GNUstep team (Closes: #454274). (Uploaders): Change my email address. (Build-Depends): Wrap all dependencies and bump libgnustep-gui-dev to >= 0.14. (Standards-Version): Package is compliant to 3.8.0 (no changes needed). (Conflicts, Replaces): Remove; not needed for the upgrade from Etch. * debian/rules: Do not indent the make conditional. (d_app): Define for convenience. (LDFLAGS): Define to -Wl,-z,defs -Wl,--as-needed. (build-stamp): Use gs_make and LDFLAGS. Pass ADDITIONAL_OBJCFLAGS instead of OBJCFLAGS to make `noopt' DTRT. (clean): Likewise. Move the commands to the `clean-patched' rule and reorder the prerequisites. (install): Use $(d_app) for DESTDIR and use gs_make directly. (binary-arch): Adjust the conditional to check for GS_USE_FHS. * debian/patches/07_missing-includes.dpatch: New, fixes FTBFS with the current core libraries (Closes: #489696). * debian/patches/05_pantomime1.2.dpach: Make viewing and posting articles work again following changes in the Pantomime decoding engine; previous NSString instances are always NSData instances now. (Closes: #489879). * debian/patches/00list: Update. -- Yavor Doganov Wed, 09 Jul 2008 20:20:58 +0300 lusernet.app (0.4.2-3) unstable; urgency=low * debian/control (Build-Depends): Use versioned dependency on libgnustep-gui-dev (>= 0.12.0). Removed gnustep-make; it is always pulled in by libgnustep-base-dev. (Section): Moved to `net' where it belongs. (Depends): Added ${misc:Depends}. (Description): Moved Homepage... (Homepage): ...to its own field, now supported by dpkg. * debian/rules (CFLAGS): Removed, upstream's flags are sane. (OBJCFLAGS): Set conditionally and pass optimization flag to $(MAKE). (build-stamp, clean, install): Do not source GNUstep.sh, use GNUSTEP_MAKEFILES instead. (clean): Invoke $(MAKE) distclean only when $(GS_MAKE_DIR) is defined. (install): Use the standard variable DESTDIR and GNUSTEP_INSTALLATION_DOMAIN instead of GNUSTEP_INSTALLATION_DIR. Remove the invalid .desktop file generated by pl2link and install our own in usr/share/applications. Also remove the unused dh_installdirs invocation. (binary-arch): Removed dh_link invocation; the app wrapper is no longer needed. Replaced GS_SYSTEM_ROOT with GNUSTEP_SYSTEM_APPS. * debian/LuserNET.desktop: New file. * debian/menu: Updated for the new policy -- changed from `Apps/Net' to `Applications/Network/Communication'. * debian/preinst: Deleted; upgrades from Etch should work flawlessly. -- Yavor Doganov Sat, 20 Oct 2007 17:15:19 +0300 lusernet.app (0.4.2-2) unstable; urgency=low * To properly move the Resources dir to /usr/share, include a preinst script which Hubert Chan wrote originally for gnumail.app. * Remove the lintian override, it is not necessary anymore. * debian/patches: + 05_pantomime1.2.dpatch: Removed a useless space at the shebang line. + 10_mark_string_as_translatable.dpatch: Added, to mark one string as translatable. + 20_bg_translation.dpatch: Added Bulgarian translation. -- Yavor Doganov Tue, 21 Nov 2006 21:16:25 +0200 lusernet.app (0.4.2-1) unstable; urgency=low * New upstream release. * Acknowledge NMU, thanks Luk Claes (Closes: #350435, #356531). * Build-depend on libgnustep-gui-dev instead on libgnustep-gui0.10-dev. * Upgrade to debhelper v5, bump debian/compat and the build-dependency. * Drop the configure target from debian/rules. * Use dpatch for patch management, build-depend on dpatch: + debian/patches/05_pantomime1.2.dpatch: Add a slightly modified patch from Sergey Golovin , syncing LuserNET to Pantomime 1.2. * Build-depend on libpantomime1.2-dev. Bye-bye, pantomime-dev. * Escape "ü" in the manpage to fix a lintian warning. * Include /usr/share/GNUstep/debian/config.mk in debian/rules. * Append "messages=yes" to $(MAKE). * Remove dh_installexamples. * Remove the redundant file debian/dirs. * Install the new ChangeLog as changelog.gz, move Changes to debian/docs and rename/compress it as changelog.old.gz. * Move Resources to /usr/share/GNUstep/LuserNET.app and make a compatibility symlink. * Replace the symlink to /usr/bin/gnustep-app-wrapper with the future-proof one provided by gnustep-common. * Convert the .tiff icon to .xpm format and add it to debian/menu; add a longtitle as well. Build-depend on imagemagick for that. * Add a homepage to the long description. * Sanitize debian/copyright: clarify Copyright vs. License and add the GPL license header. * Add myself to uploaders; thanks, Gürkan, for the vote of confidence. * Bump Standards-Version to 3.7.2 (no changes needed). -- Yavor Doganov Thu, 28 Sep 2006 01:45:43 +0300 lusernet.app (0.4.1-4.1) unstable; urgency=high * Non-maintainer upload. * Update build-dep of libgnustep-gui (Closes: #350435). * Use gsdh_gnustep. -- Luk Claes Sun, 12 Mar 2006 17:16:20 +0100 lusernet.app (0.4.1-4) unstable; urgency=low * Renamed source package to lusernet.app. * Updated manual page. * Fixed debian/copyright. * Updated debian/control build-depends for GNUstep 0.9.4. -- Gürkan Sengün Wed, 22 Dec 2004 00:41:23 +0100 lusernet (0.4.1-3) unstable; urgency=high * Updated for latest gnustep * Renamed binary package to lusernet.app. (Closes: #265634) -- Gürkan Sengün Sun, 8 Aug 2004 12:52:22 +0200 lusernet (0.4.1-2) unstable; urgency=low * Added gnustep-make to build-depends. (Closes: #240391) * Dropped .app from debian/menu. -- Gürkan Sengün Sat, 27 Mar 2004 14:39:59 +0100 lusernet (0.4.1-1) unstable; urgency=low * Initial Release. (Closes: #179093) -- Gürkan Sengün Tue, 30 Dec 2003 21:55:44 +0100 debian/LuserNET.desktop0000644000000000000000000000055212356570515012235 0ustar [Desktop Entry] Name=LuserNET News Reader Name[bg]=Четец на новини (LuserNET) Comment=News Reader for GNUstep Comment[bg]=Четец на новини за GNUstep Keywords=news;usenet;nntp; Keywords[bg]=новини;usenet;nntp; Version=1.0 Type=Application Categories=Network;News; Icon=/usr/share/GNUstep/LuserNET.app/News.app.tiff Exec=LuserNET debian/manpages0000644000000000000000000000002212356570515010707 0ustar debian/LuserNET.1