
Changelog
=========

Attention: Since version 1.0.0 the CHANGELOG file uses UTF-8 encoding!
Line length limit is now 72 (user-perceived) characters for better
E-Mail compatibility.


1.3.0  2024-10-14  Development snapshot
---------------------------------------

Important notes:
- Subprojects for libraries added.
  libbasexx is used as Base 64 encoder and decoder.
  libssiconv, libjpiconv and libuciconv are used as iconv() replacement.
  This code now has much better test coverage.
  The libraries are statically linked (and not installed).
- Subproject for unit test framework "cheat" added.
  It is used by the test suites of the new libraries.
- Doxygen 1.12.0 is now required to build the documentation.

Bug fixes:
- GUI: Line length check fixed (reported by Michael Uplawski).
- NNTP: Off-by-one error in article watermark parser fixed.
- TLS: OpenSSL version components are now printed decimal to terminal
  (reported by Marcel Logen, based on patch from Martin Schnitkemper).
- INET: Set locale category LC_MESSAGES to POSIX for gai_strerror()
  (reported by Marcel Logen).
- Dead links to GNKSA homepage in man page fixed.
- Date for Copyright in license file updated (reported by Stefan Claas).

New features and improvements:
- GUI: Kill support added (suggested by Michael Uplawski).
  Implemented as extension for scoring. There is no separate killfile.
  The threshold can be configured with the new "kill_threshold" entry in
  configfile. Default value is -9999 (anything below will be killed).
- Link to POSIX ERE documentation in man page added.
- Compile time option documentation in man page added (suggested by
  Marcel Logen).
- Debug mode and logfile documentation in man page improved (suggested
  by Marcel Logen).
- No warnings from Clang 17 in C90/C++98 mode.
- No warnings from Clang 17 in C17/C++20 mode.


1.2.1  2024-04-27  Release
--------------------------

Bug fixes:
- GUI: Fixed potential crash if an article is selected while article
  tree/list widget update is still in progress.
- GUI: FLTK 1.3 may crash if article contains very long lines (reported
  by Marcel Logen).
  With FLTK 1.3 articles containing lines beyond 1000 octets are no
  longer displayed. It's still possible to store the raw data to a file.
  With FLTK 1.4 the behaviour is unchanged.
- GUI: Inconsistent permissions of created files fixed (reported by
  Marcel Logen).
- ENC: Fixed conversion from codepage "ISO-8859-10".
  Codepoint 0xA2 to U+0112.
- ENC: Fixed conversion from codepage "ISO-8859-13".
  Codepoint 0xA3 to U+00A3.
- ENC: Fixed conversion from codepage "ISO-8859-16".
  Codepoint 0xB4 to U+017D.
- ENC: Fixed conversion from codepages "KOI8-R" and "KOI8-U".
  Codepoint 0xA2 to U+2552.
- ENC: Fixed conversion from codepage "Macintosh".
  Codepoint 0xC1 to U+00A1.
- ENC: Fixed conversion from codepage "Windows-1255".
  Codepoint 0xD0 to U+05C0.
  Codepoint 0xD1 to U+05C1.
  Codepoint 0xD2 to U+05C2.
  Codepoint 0xD3 to U+05C3.
- ENC: Fixed conversion from codepage "Windows-1256".
  Codepoint 0x95 to U+2022.
  Codepoint 0xBF to U+061F.
- ENC: Fixed conversion from codepage "Windows-1257".
  Codepoint 0xA3 to U+00A3.
  Codepoint 0xAB to U+00AB.
  Codepoint 0xAC to U+00AC.
  Codepoint 0xAD to U+00AD.
  Codepoint 0xAE to U+00AE.
- ENC: Fixed conversion from codepages "IBM775", "IBM850" and
  "IBM00858". Codepoint 0x9B to U+00F8.
- ENC: Fixed conversion from codepages "IBM850" and "IBM00858".
  Codepoint 0xE8 to U+00DE.

New features and improvements:
- Error messages can now contain content, e.g. a user or group name.
  This is nontrivial because the locale is not required to use Unicode
  (suggested by Dennis Preiser).
- Connector lines in article tree are now solid for better visibility
  (suggested by Thomas Barghahn).
- Unicode database updated to version 15.1.0.


1.2.0  2023-06-08  Release
--------------------------

Important notes:
- The experimental option USE_CUSTOM_FONTSIZE has been removed.
  Since FLTK 1.4 there is a resize feature via keyboard (Ctrl-+/-).
- Doxygen 1.9.4 is now required to build the documentation.

Bug fixes:
- GUI: Callback for "Mark all groups read" fixed to not block any
  further operation if confirmation was "No" (reported by Marcel Logen).
- GUI: Callback for "Next unread group" fixed to not always select the
  first group with unread articles (reported by Dennis Preiser).
- CONF: Update of configuration data fixed (formerly truncated if
  filesystem was full). Return values of flush operations are now
  checked before rename() is executed.
- GUI: Group list is now updated to previous group after group selection
  error (reported by Michael Uplawski).
- GUI: No longer show busy mouse cursor after group selection if article
  tree/list has no drawing area (reported by Michael Uplawski).
- ENC: Memory leak fixed in MIME Content-Disposition decoder.
- TLS: Memory leaks fixed.
- TLS: OpenSSL 3 version number is now printed correctly on terminal.
- GUI: Soft hyphens are now handled consistently with all FLTK backends
  (formerly X11 rendered all SHY characters visible, as defined by
  ISO 8859-1, while Pango and Cocoa rendered SHY characters invisible).
- FILTER: Documentation of scorefile syntax fixed (type "extended" is no
  longer supported).
- CORE: Doxygen documentation of function core_get_msgid() fixed.

New features and improvements:
- GUI: French translation added for NLS support (provided by yamo').
  NLS documentation updated for hexadecimal-escape-sequence (not
  allowed in translated strings).
- GUI: Option to skip to next group while searching for next unread
  article added (can be enabled with a nonzero value for the new
  "unread_in_next_group" entry in configfile) (proposed by Thomas
  Barghahn).
- GUI: No longer uses Fl_Pack widget because behaviour has changed in
  recent FLTK 1.4.0 snapshots (reported by Dennis Preiser).
- CONF: Support for custom colors in displayed article added
  (based on patch from Martin Schnitkemper).
- INET: Support for user defined TCP connection timeout (suggested by
  yamo'). Option CFG_TCP_CONNECT_TIMEOUT in CONFIG added.
- GUI: With FLTK 1.4 (or FLTK 1.3.3 ABI) the horizontal scrollbar of the
  article tree or list respectively is moved to a sensible position.
- CORE: Header field "Newsgroups" can now be extracted from overview, if
  present. Scoring rules of type "group" are applied to all groups of an
  Xpost in this case.
- NNTP: Support for LIST OVERVIEW.FMT command (RFC 3977) added.
- NNTP: Experimental support for MAXARTNUM extension added.
  Intended to be compliant with the RFC draft provided by Julien Élie
  in Message-ID <tnqm14$35bas$1@news.trigofacile.com>.
- ENC: Zero-width space (ZWSP) is now used too as line breaking hint for
  the format "flowed" decoder.
- GUI: URI delegation: Separate error message for invalid encoding.
- EXT: External URI handler returns a flag to indicate invalid encoding.
- EXT: Examples for postprocessor added in subdirectory "postproc"
  (suggested by yamo').
- EXT: Example for external editor added in subdirectory "editor".
- CONF: Documentation of configfile entry "cancelkey" modified (added
  note that "fqdn" entry must also be set to create Cancel-Lock/Key
  header fields).
- FILTER: Documentation of scorefile modified (added notes that scoring
  rules can be shared).
- Build system: The mkconfig script now checks for POSIX.1c-1995
  Thread-Safe Functions (TSF) option too. Usage is forced by default via
  CFG_FORCE_TSF option in CONFIG.
- Build system: The C++ object files are moved to the beginning of the
  list. This can reduce build time with make utilities that support
  parallel build.
- Build system: BSD install utility now deletes existing target files
  before copying new ones. This solves problems with macOS on machines
  with Apple Silicon and signed binaries (patch from Dennis Preiser).
- Unicode database updated to version 15.0.0.


1.1.0  2022-05-21  Release
--------------------------

Bug fixes:
- CORE: Authentication without password is now rejected (reported by
  Marcel Logen).
- MAIN: Potential deadlocks in thread-safe replacement functions fixed.
- GUI: State machine modified to avoid race condition when articles are
  marked read while group is not completely loaded yet.

New features and improvements:
- GUI: Option to automatically check for new articles added (an interval
  in minutes can be configured with the new "refresh_interval" entry in
  configfile).
- GUI: Checkbox "Tools->Debug mode" removed. Debug mode must be enabled
  with command line option "-debug".
- NNTP: Protocol logfile is only created if debug mode was enabled (and
  unlinked otherwise, if present). "Tools->Protocol console" window now
  requires debug mode.
- GUI: Support for estimated article count in subscription window added.
- GUI: Support for group descriptions in subscription window added.
- NNTP: Support for LIST NEWSGROUPS command (RFC 3977) added.
- GUI: Support for subscription proposals from server added
  (offered to user after server was changed and group list is empty).
- CORE: Support for subscription proposals from server added.
- NNTP: Support for LIST SUBSCRIPTIONS command (RFC 6048) added.
- TLS: Support for LibreSSL 3.5 API added.
- GUI: File save operations now suggest a pathname in the file selection
  window.
- GUI: File save operations now ask the user before an existing file is
  overwritten.
- CORE: Function added to suggest a pathname (created from home
  directory, program name and timestamp).
- CORE: Message-IDs are now generated with algorithm A3 (uses a modified
  Base64 alphabet with "/" replaced by "-"). This allows to generate
  RFC 5538 conformant "news"-URIs without percent-encoding.


1.0.1  2022-01-03  Release
--------------------------

Bug fixes:
- ENC: Off-by-one read from uninitialized data in MIME encoded-word
  decoder fixed.
- GUI: Clickable references are now restored after ROT13 was applied
  twice.
- GUI: Click on "Cancel" button in server configuration window no
  longer creates an error message in the status bar.
- GUI: "Group->Mark subthread read" now redraws the widget and closes
  the processed subthread (reported by Christian Schumacher).
- GUI: Server configuration: Automatically modify service name when TLS
  is enabled/disabled (suggested by Julien Élie).
- References to legacy configuration path "~/.flnews" fixed in man page.

New features and improvements:
- Unicode database updated to version 14.0.0.


1.0.0  2021-05-09  Release
--------------------------

Important notes:
- The new configuration data format is not compatible with versions 0.x
  (indicated by the major number bump)!
  A script is provided to automatically convert existing configuration
  data to the new format. Read "migration/README" for details.
- Because the location of the configuration has changed (see new XDG
  module below), the configuration for versions 0.x is preserved.
- It is still possible to downgrade flnews to 0.x, the preserved old
  configuration data is used again in this case.
- Now the release version contains 3 numbers "x.y.z":
  Major (x) indicates compatibility with configuration data.
  Minor (y) is incremented for new features.
  Patch (z) is incremented for bug fixes.

Bug fixes:
- CORE: Request for group information is no longer rejected with error
  if the group list is empty.
- GUI: After unsubscribing the last group, the article tree/list was not
  cleared and the user can click on articles for which the associated
  data no longer exists. Such operations will crash the program
  (reported by Martin Schnitkemper).
- CORE: Line length limit (998 octets) is now checked before injection.
- GUI: On macOS with system menu bar the status updates to menu entry
  "Group->Sort by article number" work now (patch from Dennis Preiser).
  The required method update() is not available with old FLTK 1.3
  libraries, the option CFG_COCOA_SYS_MENUBAR now requires FLTK 1.4.
- ENC: URI percent encoder for scheme <news> fixed: The characters
  defined as <gen-delims> (RFC 3986 Section 2.2) are now encoded
  (reported by Marcel Logen).
- GUI: The URI parser now accepts empty <host> for scheme <news>.
- GUI: The current group selection is now restored after a click into
  the empty space below the group list (reported by Christian
  Schumacher).
- GUI: The article list/tree is now cleared after selecting an empty
  group (formerly articles of an unrelated group may still be visible).
- GUI: Some FLTK versions accept selection of deactivated items. There
  is now a workaround implemented to make such selections nonfatal.
- GUI: Horizontal scrolling to highlighted result of search fixed.
- GUI: Use FLTK default forground color for group subscription window
  too. This should make the content readable with dark background
  (reported by Christian Schumacher).
- NLS: German translation "Artikel herunterladen fehlgeschlagen" fixed
  (reported by Marcel Logen).
- GUI: If there are multiple signature separators ("-- ") present, now
  the last one is used according to "Usenet Best Practice" draft 01
  (reported by Marcel Logen).

New features and improvements:
- XDG: Moved default configuration directory to location defined by XDG
  Base Directory Specification 0.7 ("$XDG_CONFIG_HOME/$CFG_NAME").
  Other modules now ask the XDG module for the configuration path.
- MAIN: The new command line option "-confprefix" can be used to
  override the configuration directory (proposed by Helmut Waitzmann).
- GUI: It is now possible to mark all articles in all groups as read
  (menu entry "Group->Mark all groups as read").
- MAIN: New command line option "-debug" to enable debug mode early.
- CONF: configfile entry "domain" replaced with "fqdn". Some users
  saw the hostname field in Message-ID algorithm A1 as privacy problem.
  A <dot-atom> can be configured for the new entry "fqdn" (should be a
  fully qualified domain name, but without root domain). It is used as
  <id-right> element when a Message-ID is created with algorithm A2.
- Support for SOURCE_DATE_EPOCH Specification 1.1 added to build system.
  Reproducible build option CFG_REPRODUCIBLE removed from CONFIG.
  The SOURCE_DATE_EPOCH variable from the environment now overrides the
  dates in the GUI, the output of the "-v" command line option and the
  man pages (original patch from Bernhard M. Wiedemann).
- Support for target "install-strip" added to build system. The target
  "install" no longer strips unnecessary symbols from binaries
  (proposed by Martin Schnitkemper).
- EXT: Support for external inews added.
  Pathname can be specified with the new "inews" entry in configfile.
- TLS: Protocol versions 1.0 and 1.1 are now disabled as required by
  RFC 8996. Both versions are still available in "weak" encryption mode.
- GUI: New menu entry "Group->Mark subthread as read".
- GUI: If there is only one entity to display for a MIME multipart
  message (e.g. the selected one with multipart/alternative), the
  entity header is now displayed too.
- GUI: An initial greeting phrase can now be specified with the new
  "initial_greeting" entry in configfile. It is inserted into articles
  that start a new thread (proposed by Wolfgang Bauer).
- FUTIL: Function added to create (multiple) missing directories of a
  path.
- FILTER: New scorefile syntax to eliminate the workaround with type
  "extended". All score rules now have a wildmat in the first field.
- FILTER: Simplified default regex for test group detection to
  "\.test$|^test$", removing the ".*" part at the beginning (proposed by
  Urs Janßen).
- POSIX: Support for POSIX.1-2008 and SUSv4 added.
  No local replacement functions are used anymore on modern operating
  systems. snprintf() replacement function now uses SUSv4 semantics.
- ENC: MIME encoded-words are now generated with "US-ASCII" charset
  declaration if there is no 8-bit data to encode in the header field
  (e.g. to represent words like " =?-?= " in a RFC 2049 conformant way).
  This follows the "lowest common denominator" principle decribed in
  RFC 2046 Section 4.1.2.
- TLS: Deprecated functions from OpenSSL 3 API are no longer used.
- GUI: Modified question popup windows to handle pressing ESC key as
  "No" or "Reject" respectively.
- GUI: Some entries moved from menu "Article" to "Group".


EOF
