This file describes the new features in each poezio release.

* Poezio XXX-dev

- Log join presence errors
- New plugin: moderate (XEP-0425)
- OTR plugin removal

* Poezio 0.14

# Configuration changes:

- ADDED: `mam_sync`, `mam_sync_limit`.
- ADDED: `autocolor_tab_names`.
- CHANGED: `ca_cert_path` is commented out. Poezio will attempt to guess
  common CA bundle paths. The option can be used to overwrite this behaviour.
- REMOVED: `force_remote_bookmarks`.
- REMOVED: options related to activity, mood, gaming, tune:
  `enable_user_activity`, `enable_user_mood`, `enable_user_gaming`,
  `enable_user_tune`, `display_activity_notifications`,
  `display_mood_notifications`, `display_gaming_notifications`,
  `display_tune_notifications`.
- REMOVED: `deterministic_muc_colors`.

# Changes

- DEPRECATION: /leave is deprecated. Use /part or /close instead.
- REMOVED: rich presence (activity, mood, gaming, tune) from poezio, alongside
  with configuration options and commands: /activity, /mood,
  and /gaming. These are moved to the new user_extras plugin.
- REMOVED: non-deterministic nick colors in MUC.
- REMOVED: XEP-0319 support removed for privacy and performance.
- REMOVED: Support for pypy3 with the removal of poopt.py
- ADDED: New /request_voice command for moderated rooms
- ADDED: /join: support using an XMPP URI (xmpp:...?join)
- ADDED: /destroy_room: new optional reason and altroom arguments
- ADDED: Newlines now considered as word separator in input manipulation (#3411)
- ADDED: Colored tab names or number using Consistent Color Generation behind
  `autocolor_tab_names` (thanks jonas!)
- Stop highlighting on MUC history messages just because they're delayed
- Stop displaying the traceback in debug log when /xhtml fails
- Ensure launch.sh can be use outside the repository (Thanks kaliko)
- Detect `/set option = value` pattern and do as it `/set option value` was
  called. (#3517)
- Newlines taken into account on completion (#3385)
- Allow resizing certificate confirmation window (#3371)
- Make theming more configurable around nicks
- Log MUC <destroy/> payload in the information buffer
- impromptu: wait for room subject before configuring and inviting
- Impromptu: rooms now have pronouceable short names
- impromptu: ensure a room is empty before joining
- impromptu: now uses mediated invites
- Fetch from MAM by default when use_log is False.
- xhtml: Add a new line after a blockquote

## Bug fixes

- Ensure bookmark is present before removing it in /close.
- Ensure bookmarks are saved correctly on method config change, and on /close.
- Ensure nick is added to bookmark when specified
- Do not crash on bookmark without a nickname (Thanks Ge0rG)
- Ensure the correct tab is bookmarked on /bookmark and /join
- /bookmark: treat empty nick as no nick to avoid failing on empty resource
- Fix closing a tab not in bookmarks
- Disco barejid instead of domains on sent carbons. Follow-up of 5e40437.
  (Thanks Ge0rG)
- Only use JID internally when handling affiliations. Add nick if present.
  (#3536)
- /last_activity: prevent traceback
- Fix bad error handling when checking bookmarks storage
- `/join / password` works again
- Report available presence in tabs correctly
- /display_correction: now reports the correct time for private messages (#3532)
- Fix composing indicators not showing (#3527)
- Fix pasting text in data forms and bookmarkstab (#3519)
- Fix /me logging (#3432)
- Retrieve nick colors from the correct section
- Do not scroll right by default in dataforms/bookmark text
- Hack around the time limit for topic messages
- Ensure MUC-PM logging filenames are generated as expected (Thanks Ge0rG, southerntofu)
- Fix poezio displaying many times the same participant in the user list.
- Fix default dataform field handling (#3554)
- Fix MUCListTab not joining selected MUCs (#3553)
- Fix /color completion (Thanks eijebong)
- /info: Don't display comma before status message if not available

## Plugins

- ADDED: untrackme plugin. based on remove_get_trackers.
- ADDED: user_extras plugin. /activity, /mood and /gaming moved from core.
- ADDED: sticker plugin.
- DEPRECATED: remove_get_trackers
- REMOVED: /irc_login from the irc plugin.
- Reorder: Prevent GapTabs from being serialized and ignore when serialized as
  they're recreated automatically.
- Code: prevent traceback when not enough arguments
- Link: Add support for aesgcm, gemini and gopher URIs
- Contact: iterate all data forms (Thanks Ge0rG)
- Fix plugins (embed, lastlog, otr, quote, time_marker) to use poezio.ui.types
- Disco: Added error handling
- IRC: Fix the plugin to work with the various refactors, and use
  irc.jabberfr.org as a default gateway

## API

- BREAKING: E2EEPlugin.decrypt's `tab` parameter is now of type
  Optional[ChatTab] instead of ChatTab.
- BREAKING: E2EEPlugin.supported_tab_types is now required
- BREAKING: decrypt method is now async
- E2EEPlugin decrypts encrypted messages even when they have no body.
- E2EEPlugin lets through already encrypted messages without giving them
  to the user lib (poezio-omemo, for example).
- Correctly pass realjid to decrypt call for MUC messages
- /<encryption_name>_fingerprint command is added. Plugins can implement
  `get_fingerprints` and `format_fingerprint` for it to return a (formatted)
  value.

# Under the hood

- Moved development from 'master' to 'main' branch
- Lots of type hints added (decorators, multiuserchat, shlex, common, muctab,
  etc.) fixing many bugs
- Lots of event handlers and calls are now async in poezio. Many callbacks removed.
- Lots of refactoring
- Performance improvements:
  - Trim all messages by 24 bytes on 64-bit systems
  - Reduce log parsing by a lot
- No more safeJID calls. (#3457)
- Rework some features to use slixmpp's API instead of custom poezio code
  (i.e., muc's set_subject, set_role, set_affiliation, destroy_room,
  cancel_config, set_room_config, and most events)
- Split commands from Core
- Require typing_extensions package for python
- Require setuptools package explicitly because of pkg_resources' import
  (Thanks Thomas)
- Replace asyncio.ensure_future with asyncio.create_task

# Meta

- Improve README, badges, new text, more links
- Update install.txt with instructions for guix (Thanks Raghav)
- Remove references to dev.louiz.org. Everything is happening at
  lab.louiz.org.

* Poezio 0.13.1

# Bug fixes

- Contacts won’t be seen playing games or music when they actually stop doing
  so.
- /leave now toggles off the autojoin flag instead of removing the bookmark.
- Only add auotjoin on new bookmarks for synchronise_open_rooms on /join
- /affiliation displays things in the info win instead of directly in the room,
  and additionally displays which room it refers to.
- List the correct required versions for package maintainers.
- Fix the AppStream manifest to get Flathub to accept it.
- Add a warning when the terminal doesn’t support 256color mode.
- Display our own nick properly in messages received from MAM.
- Only send an unavailable presence on closing a room if we are joined.
- Don’t display the current date for history messages received today.
- Fix marquee and dice plugin to use newer Last Message Correction format.
- Bookmarks tab properly displays bookmarks method (local/remote) and allows
  to switch between them again.
- Updated manpages and added manpages built from the doc in the setup process.
  Packagers need to run setup.py build_man to have them built.

# Forgotten additions

- Add a clean theme for light terminals, thanks Armael!

* Poezio 0.13

# Thanks

- madhur for the MAM code and various other fixes (GSoC 2019)
- Ge0rG for fixes in the reconnect and carbons code
- fiaxh for the nice SVG logo

Zash, PS Le Stang, Karthikeyan Singaravelan, Jonas Schäfer, Célestin Matte,
Andrey Utkin, root.

# Meta changes

- Packages: poezio is now packaged for Gentoo and Debian buster
  (poezio v0.12.1)
- Source: the repository is now hosted at https://lab.louiz.org/poezio/poezio

# Breaking changes

- BREAKING: requires python3.7 (previously python 3.5)
- DEPRECATION: `load_log` configuration was removed
- DEPRECATION: `bookmark_on_join` configuration option was renamed
  `synchronise_open_rooms`, and now defaults to true. This makes /join
  automatically create a bookmark, use /leave to remove it

# New features and plugins

- `/impromptu <jid> [jid ..]` command to create a new chat with these persons
- `/scrollback` to scroll back to a specific line/message in the current window
- `/invite <jid> [jid ..]` command in single user chat does like `/impromptu`
  creating a new MUC
- `/affiliation` command now returns the list of privileged users on the
  current MUC when no argument is supplied
- `default_muc_service`  configuration for replacing the server's default MUC
- `unique_prefix_tab_names` display option to show the shorter tab name
  prefixes in the tab list
- `/list` defaults to `default_muc_service` when no argument is specified
- XEP-0392 support
- New Plugin: OMEMO (experimental) - lives as an external plugin at
  https://lab.louiz.org/poezio/poezio-omemo
- New Plugin: Contact - queries an entity for contact addresses (XEP-0157)
- New Plugin: Upload - adds a `/upload <filename>` command in chats for HTTP
  upload
- New Plugin: remove_get_trackers - Remove GET trackers from URLs in sent
  messages.
- New Plugin: QR


# Under the hood

- Plugin API: `E2EEPlugin` is a new experimental API for message encryption
  (used by the OMEMO plugin)
- Plugin API: plugins can now declare a string list of dependencies
- Plugin API: plugins can now be setup using a well-known setuptools entrypoint
- Reworked Tab handling
- Split Message rendering
- Typing improvements

# Minor changes (bugfixes)

- Properly advertize gaming status
- Improve error reporting to users
- Add SVG support for avatars
- Plugin: Disco - allow node to be specified
- Don't always treat carbons from biboumi as MUC-PMs (#3705)
- Read newer Last Message Correction rules while still reading older ones
  (#3462)
- Allow /block and /unblock in ConversationTab (#3346)
- Experimental: Fetch archives (MAM) on scroll up in MUC (#3052)
- Allow /add in ConversationTab (#3395)
- Prevent Chat State Notifications from being stored in the archive (#3518)
- Rework MUC-PM Carbons handling (#3294)
- /scrollback (#3481)
- Read <delay/> in <subject/> (#3451)
- Only use MUC <subject/> in specific cases (#3452)
- Allow /reconnect in all tabs (#3471)
- Allow /embed in chat tabs (#3449)
- Allow /upload in chat tabs
- Properly identify MUC-PMs for normal messages and chatstates (#3491)
- /server_cycle: strictly match specified domain (#3412)
- Breaking: -v/--version previously for internal purposes now returns version
  as expected (#3429)
- Improve highlighting regex (#3433)
- Generate static resource at first launch (#3400)

* Poezio 0.12

- Require Python 3.5, to add support for Python 3.7, use proper async
  functions, use typing, italics formatting, FIXME
- Added support for XEP-0392 (Consistent Color Generation)
- Added support for XEP-0153 (vCard-Based Avatars) and XEP-0084 (User
  Avatar) in the roster tab
- Added support for XEP-0363 (HTTP File Upload) for easy file transfer,
  in the upload plugin with /upload
- Added support for XEP-0066 (Out of Band Data) for Conversations
  compatibility when sharing images, in the embed plugin with /embed
- Removed support for XEP-0296 (Best Practices for Resource Locking),
  to use all features available no matter what our contact’s current
  clients support
- Check for usable Unicode support on start
- Generate a device id on first start, and use it for our resource
- Display the public key hash instead of the certificate’s
- Handle carbons properly for private messages in rooms
- /bookmarks can now be used to rename tabs as you want
- Remove unexpected command completion based on command prefix
- Add an irssi theme
- Add a code plugin, which requires pygments
- Fix resource duplication on reconnect
- Misc fixes and improvements

* Poezio 0.11

- Implementation of XEP-0380
- Docker images
- Improved documentation
- GPG plugin fixes
- Added manpages for the utility scripts
- Misc fixes

* Poezio 0.10

- A lot of cleanup and refactor in order to use cython on the codebase
  more easily.
- A new poezio_logs script to make logfiles more human-readable
- Substantial performance improvements
- Added a new confirmation tab and used it for cert warnings and XEP-0070
- Added support for XEP-0070 (HTTP request verification)
- Enabled carbons (XEP-0280) by default
- Added support for XEP-0198 (stream management)
- Added support for XEP-0352 (client state indication)
- Added support for XEP-0319 (last user interaction in presence)
- Add an 'eval_password' config option
- Add a marquee and dice plugins
- Add a bob plugin
- simple_notify plugin works in MUC too
- The reorder plugin can now /save_order
- Minor ui changes
- Many Bugfixes

* Poezio 0.9

- Use slixmpp instead of sleekxmpp, remove threads and locks
- Require python 3.4 for the input handling, event loop, xml parser,
  and ssl API

- Due to the slixmpp move, /reconnect now works (ecf22cb)
- Add a check for broken python ncurses (1c5589b)
- Add a /reload command to reload the config (71f3848)
- Add a /color command to permanently set the color a nick (f7e7836)
- Add a /closeall command with a plugin, to cleanup the open tabs (ed7fe69)
- Add a /reorder command with a plugin to order the tabs based on a static
  layout (8afbb44)
- Add a /set_default command which sets the value of an option back to its
  default (9caa992)
- Use a deterministic algorithm to set the nickname colors by default (2452706)
- The user’s JID is now shown in the roster (a0a00d5)
- The screen_detach plugin now also detects tmux (21d8a3e)
- The autocorrect plugin now supports regular expressions (067ad58)
- Improve the XML tab with coloration, better filters, and filter chaining
  (1cd0b4d)
- Allow the use of client X.509 certificates for authentication, and add
  /certs, /cert_{add,disable,revoke,fetch} commands (00396c1)
- Stream errors are now displayed, which is more helpful to the user than
  'connection failed' (5cd854f)
- The (system-wide) launch script is now a setuptools entry point that checks
  dependencies (22f9b7a)
- XHTML-IM base64 embedded images are now extracted by default (a9f642f)
- New open_all_bookmarks option to let the user choose what to do with
  bookmarks without autojoin (5a5d581)
- Store the server certificate fingerprint with SHA-512 (8d2408c)
- pipe_cmd plugin that allows simple remote control of poezio (4b0d9a2,
  dc46286)
- /link now uses xdg-open (ba32d74)
- Display information about the XMPP features the contact supports (a1f86720,
  2dafd6d5)
- make the data forms tab better (3858273, 7378ea9)
- Implement ad-hoc commands (bbc55fa)
- A change_title plugin changes the title of the terminal depending on the
  current tab. Also, poezio is now "poezio" and not "python3" (c1d19fa,
  48e59d3)
- The OTR plugin now implements SMP (96442e9)
- The OTR plugin now tries to interpret html by default (4e4ab56)
- The OTR plugin also has nicer and more informative messages (71ae29df,
  f782516e, d7bbf339c, a0c5f95, 25e91b0)
- The interface will adapt if the terminal is too small (0caf941)
- Implement XEP-0184 (message delivery receipts) (5999b71)
- Better timezone handling (02d9fd9)
- Better alias plugin, with permanent alias storage (e80a90)
- poezio_gpg_export script to generate a config for the gpg plugin (8ec5671)
- improvements to dynamic tabs, information about jid lock/unlock (f7294b2,
  5c9dd44, fba511e)
- irc plugin to use with biboumi (cf752c2)
- implementation of XEP-0012 - last activity (65c2473)
- errors.log contains a lot less stuff (695877b)
- tabs where the input is not empty will not be considered as "normal"
  (52e6334, fe072a8)
- /bookmark * now preserves the order of the tabs (38061a6)
- /list on big servers should be much faster (7b446d9)
- /load and /unload can handle several plugins at once (0847643)
- nicks are no longer highlighted if they are inside another word (f58dfe2)
- /invite will now use the “direct” invitations of XEP-0249 when supported
  (3221534)
- tabs where the other party is currently composing will have a particular
  state (a784216)
- Implementation of room destruction (1f0ff4f)
- running theming.py and keyboard.py will be nicer and not pollute the output
  afterwards (5012611, 1bd9f78)
- Bugfixes

* Poezio 0.8.1
- fix compilation with python 3.4

* Poezio 0.8
- Allow in-band password changing with /password
- Force c2s encryption until configured otherwise
- Allow users to set their cipher suites and ship one by default
- Autocorrect plugin that sends sed-like corrections
- /invite in a MUCTab now has the behavior one could expect
  (inviting a specific JID to this MUC)
- Themes and plugins are now loaded using a set of paths instead
  of only a specific directory.
- The OTR plugin has been completely rewritten
- The completion can now complete the current argument in the input,
  instead of only the last one.
- Poezio now periodically pings the server to detect connection loss
- Improve the roster and the input (^R search, weechat-like
  behaviour with long lines)
- Add a way to send text with multiple styles at the
  same time.
- Background colors in themes are now fully supported (it
  wasn’t for information text and nick colors, mostly)
- The logs now use the mcabber format in order to improve tool
  reuse (plus, our old log format wasn’t parsable).
- The documentation now uses Sphinx/reST instead of AsciiDoc
- Add User Tune/Nickname/Mood/Activity/Gaming support
- More theming options
- Add xml:lang support
- Move to upstream sleekxmpp
- Add support for XEP-0296 (best practices for resource locking)
- Move the “config reload” signal to SIGUSR1 instead of SIGHUP
- Add a /disconnect command
- New style and API for /help
- Add a visual indicator of s2s errors in the roster
- Add an option (show_timestamps) to show message timestamps.
- Add an option (hide_user_list) to hide the user list in MUCs.
- Add a "reverse" theme option for highlight nicks that displays
  the nick in reverse mode on highlight messages.
- Use get_wch() if available (introduced in python3.3) instead of our custom
  way to read unicode input.
- Add an option to preload last logs into the conversation when opening a new tab.
- Introduce support for XEP 308, Last message correction
  (http://xmpp.org/extensions/xep-0308.html).
- Rewrite the Executor class to make remote execution more reliable, and
  command easier to write (without a lot of escaping to do).
- Increase roster speed a lot.
- Add option to sort the roster more precisely.
- Add an option to avoid gap in the tab numbering when closing a tab.
- Add a /move_tab command, to move tabs.
- Add simple communication blocking support
  (http://xmpp.org/extensions/xep-0191.html).
- Add last activity support (http://xmpp.org/extensions/xep-0012.html).
- Add a /self command.
- Add a /runkey command.
- Support underlined text in the input with C-c u.
- Add support for /set <option> toggle, which toggles the current value, if
  it’s a bool.
- Add a couple of (useless) funny plugins.
- New display of message errors/headlines
- bugfixes

* Poezio 0.7.5.1 & 2 - Summer 2012
- Fix tracebacks caused by a change in Sleekxmpp

* Poezio 0.7.5 - 25 May 2012
- Plugin system
- Server-side bookmarks
- New keyboard shortcuts tuning options
- New keyboard shortcuts
- Attention support
- Invitation support
- Improved contact management
- New tab list
- Certificate check (TOFU model)
- New commands for sending stanzas manually
- bugfixes


* Poezio 0.7.2 - 08 Nov 2011
- Huge speed improvements in both memory usage, text
  refresh speed and interface resize.
- Chatstate notifications (in private AND in MUCs)
- /message command to talk to any JID
- /version command to get the software version of an entity
- /bind command, and keys can be bound in the config file
- Multiline edition
- xhtml-im messages can be sent and received
- 256 colors support
- themes are easier to create and load. They can use
  up to 256 colors
- completion now works not only at the end of the input
- /affiliation and /role commands to administrate MUCs
- /export command to export your roster in a file
- data forms support (only for room configuration at the moment)
- documentation is now written in asciidoc format
- a *lot* of bugfixes


* Poezio 0.7.1 - 2 Feb 2011
- /status command to globally change the status
- /win command now accepts part of tab name as argument
- bugfixes


* Poezio 0.7 - 14 jan 2011
Codename ”Koshie & Mathieui”
- Library changed from xmpppy to SleekXMPP
- Python 3 only
- Introduce the roster
- One to one conversations
- Roster search
- Add/remove/accept/deny contact in the roster
- Resizable mini-buffer displaying various information
- All colors can be changed with a theme file
- Command auto-completion
- /say and // commands
- /recolor command, changing the nick's colors in a MUC
- /list command lets the user browse the MUCs on a server
- Warn user about publicly logged rooms
- Possibility to limit the number of history messages received from MUC
- auto-rejoin when kicked from a MUC
- The number of lines available to scroll down is displayed
- Possibility to use a modified nickname automatically when a nick is reserved
- A line separates the already-read messages from the new messages
- Information messages are more colored
- Man page added
- bugfixes


* Poezio 0.6.2 - 21 Jul 2010
- Lines are now broken between words and not in the middle of them
- /unquery command
- default nickname is now $USER
- Server on /join command can be omitted
- /query command can now take a message in parameters
- logs are now save in $XDG_DATA_HOME and this can be configured
- Available users now have a greater priority on nickname completion
- utf-8 characters (from the keyboard) are now completely supported
- Many new keyboard shortcuts (move the cursor, edit the line, switch tabs...)
- DESTDIR support in Makefile is fixed
- Completion on recently said words
- /join command now takes the current server if not specified in the parameters
- Many Bugfixes


* Poezio 0.6.1 - 13 Jun 2010
- Enable tracebacks


* Poezio 0.6 - 13 Jun 2010
- Private messages are handled
- Muc error messages are displayed
- Nickname auto-completion
- Users status are displayed in the MUC user-list
- Non-anonymous connection (registered nickname can now be used)
- An avatar can be set
- A minimal Vcard can be set
- Proxies are handled
- Status changes can be hidden if the user didn't talk for a long time
- A line displays information about rooms we are in (new messages, hl, etc)
- Highlights are handled (we can specify a list of words)
- Various new commands (topic, kick, set, win)
- Password-protected MUCs are handled
- The dates of room history are handled
- The way the text is displayed on the screen has been rewritten, this fixes
  the blink and the slowness-over-ssh problems.
- User lists are ordered
- Messages can be logged in files
- Status changes displays only what has really changed
- Users can be ignored (/ignore, /unignore)
- Various Bugfixes


* Poezio 0.5.1 - 2 Feb 2010
- Little bugfix release


* Poezio 0.5 - 1 Feb 2010
- Initial release
