weechat-xmpp/README.org
2022-10-22 23:39:30 +01:00

214 lines
7.4 KiB
Org Mode

#+TITLE: weechat-xmpp
#+AUTHOR: Tony Olagbaiye
#+EMAIL: bqv@fron.io
#+DATE: 2021-06-26
#+DESCRIPTION: Weechat plugin for XMPP
#+KEYWORDS: weechat xmpp c api
#+LANGUAGE: en
#+OPTIONS: H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:nil skip:nil d:nil todo:t pri:t tags:not-in-toc
#+EXPORT_EXCLUDE_TAGS: exclude
#+STARTUP: showall
[[https://travis-ci.org/bqv/weechat-xmpp][file:https://api.travis-ci.org/bqv/weechat-xmpp.svg?branch=master]]
[[https://coveralls.io/github/bqv/weechat-xmpp?branch=master][file:https://coveralls.io/repos/github/bqv/weechat-xmpp/badge.svg?branch=master]]
[[https://github.com/bqv/weechat-xmpp/issues][file:https://img.shields.io/github/issues/bqv/weechat-xmpp.svg]]
[[https://github.com/bqv/weechat-xmpp/issues?q=is:issue+is:closed][file:https://img.shields.io/github/issues-closed/bqv/weechat-xmpp.svg]]
[[https://github.com/bqv/weechat-xmpp/blob/master/LICENSE][file:https://img.shields.io/github/license/bqv/weechat-xmpp.svg]]
[[https://github.com/bqv/weechat-extras/][file:https://img.shields.io/badge/weechat--extras-xmpp-blue.svg]]
[[https://inverse.chat/#converse/room?jid=weechat@muc.xa0.uk][file:https://img.shields.io/badge/xmpp-weechat%40muc.xa0.uk-yellow]]
| Status: | XMPP for power users and digital masochists |
| Location: | [[http://github.com/bqv/weechat-xmpp]] |
| Version: | 0.2.1 |
| Disclaimer: | I'm lazy and unashamedly clinically insane |
* Description
A weechat plugin in C/++ to extend the chat client to
support XMPP and a currently minimal but ideally maximal
set of XEPs.
My priority here is to have an android-available XMPP client
that hides as little as possible from the user. To use this with
android, set up a relay (`/relay`) and see weechat-android.
I am rewriting this in C++, slowly...
* Usage
1. Start with =/account add=, use =/help account= for instructions.
2. Use =/account connect <account-name>= with the name set at
add-time.
* Installing
Place xmpp.so in the appropriate place for weechat plugins.
* Dependencies
- libstrophe (dynamic, dependency)
- libxml2 (dynamic, dependency)
- lmdb (dynamic, dependency)
- libomemo-c (libsignal-protocol-c) (dynamic, dependency)
- gpgme (dynamic, dependency)
- bison (build)
- flex (build)
- weechat (>= v3.0)
* Building
#+begin_src sh
git clone git://github.com/bqv/weechat-xmpp.git
cd weechat-xmpp
git submodule update --init --recursive
make
make install
#+end_src
Do *NOT* run make install as root, it installs the plugin to your
local weechat plugins directory
* Development
I use emacs for development of this, although I am also a fan of vim.
My debug build process involves static analysis with clang and cppcheck,
and dynamic analysis with address-sanitizer and leak-sanitizer.
My debug evaluation process involves gdb/mi run with the arguments =-ex "handle SIGPIPE nostop noprint pass" --args weechat -a 2>asan.log=
since part of weechat and it's default plugins use SIGPIPE as control.
I don't expect any, but I have no real requests for style of pull requests
besides a wish that you keep vaguely to the indentation style I use.
* Tasks
** DONE Implement basic functionality (milestone v0.1)
* [X] Connecting
* [X] Pretty-printing stanzas
* [X] Receiveing and formatting PMs to a dedicated buffer
* [X] Responding to PMs and formatting responses
* [X] Opening PMs (/chat)
** TODO [#A] Implement essential functionality (milestone v0.2)
* [X] Opening PMs with initial message
* [X] Buffer autoswitch on enter/open
* [X] Handle open/enter jids with a resource without breaking
* [X] Allow /close without crashing
* [X] Highlight
* [X] MUC PMs
* [X] Send typing notifications
* [X] Recv typing notifications
* [X] Message Carbons
* [X] MAM Fetching
* [/] Read receipts
* [X] Message Delivery (XEP-0184)
* [X] Chat Markers (XEP-0333)
* [X] Composing
* [X] Paused
* [?] Active
* [#] Inactive
* [#] Gone
* [X] OMEMO (libomemo-c)
* [X] Presence
* [X] Disco
* [X] Disco response
* [X] Key Generation / storage (lmdb)
* [X] Generation
* [X] Storage
* [X] Announce
* [X] Device ID
* [X] Bundles
* [X] Messages
* [-] PGP (gpgme)
* [X] Use keyrings (from gnupg)
* [X] Presence
* [X] Decryption
* [X] Encryption
* [X] Custom set/clear key (/pgp)
* [ ] [#B] Save pgp key set per jid/muc
* [ ] [#A] Account renaming
* [-] OOB messages
* [X] Single media on a line
* [ ] [#D] Multiple media inline (protocol?)
* [ ] [#C] Encrypted (pgp/omemo)
* [ ] Handle wide errors gracefully
* [ ] [#C] Event-driven MUC entrance
* [ ] XMPP Ping (xep-199)
* [ ] [#C] Respond to s2c and m2c
* [ ] [#B] /ping for c2s and c2c
* [-] MUCs
* [X] Presence/nicklist
* [X] Enters
* [X] Leaves
* [X] Tracking
* [X] Set/show topic
* [X] Opening (/enter)
* [X] Receiving
* [X] Sending
* [X] With /msg
* [X] Handle errors gracefully
* [-] Edits
* [X] Displaying
* [X] Tagging
* [X] Diff highlighting
* [ ] [#B] Making (/edit)
* [ ] [#A] Leave on /close
* [ ] Service Disco
* [ ] [#B] /disco [domain]
* [ ] /whois [user|muc]
* [ ] [#B] User Avatars
* [ ] [#B] MUC Icons
* [-] Bookmarks / Roster (xep-048)
* [X] Autojoin bookmarks
* [ ] [#A] Except biboumi rooms
* [ ] [#B] Add bookmarks
* [ ] [#B] Delete bookmarks
* [ ] [#B] Roster
* [ ] [#D] OTR (libotr)
* [ ] [#C] Room Explorer (https://search.jabber.network/docs/api)
* [ ] [#C] DOAP
* [ ] [#C] Link sniffing for oob
** TODO [#C] Adhere to CCS2022 (XEP-459) (milestone v0.3)
* [ ] Core
* [ ] Service Discovery (xep-030)
* [ ] Entity Capabilities (xep-115)
* [ ] Advanced
* [ ] Direct TLS (require secure connection)
* [ ] Personal Eventing Protocol (xep-163)
* [ ] IM
* [ ] File Upload (xep-363)
* [ ] VCard-temp (xep-054)
* [ ] MUC Invitations (xep-249)
* [ ] Advanced
* [ ] User Avatar (xep-084)
* [ ] User Avatar Compatibility (xep-398 xep-153)
* [ ] User Blocking (xep-191)
* [ ] PEP Native Bookmarks (xep-402)
* [ ] MUC Self-Ping (xep-410)
* [ ] Persistent Storage (xep-223)
* [ ] XML Storage (xep-049)
* [ ] Message Correction (xep-308)
* [ ] Direct File Transfer - Jingle (xep-234 xep-261)
* [ ] Extras
* [ ] Stateless Inline Media Sharing (xep-385)
* [ ] Consistent Color Generation (xep-392)
* [ ] Message Styling (xep-393)
* [ ] Extended Channel Search (xep-433)
* [ ] Message Retraction (xep-424)
* [ ] Message Moderation (xep-425)
** TODO [#D] Close all issues (milestone v1.0)
* Contributing *Your contributions are always welcome!*
Please submit a pull request or create an issue
to add a new or missing feature.
* Testimonials
"Weechat-Strophe - for the discerning dual IRCer XMPPer" -- [[github.com/janicez][Ellenor et al Bjornsdottir]]
* License
weechat-xmpp is licensed under the Mozilla Public
License Version 2.0 available [[https://www.mozilla.org/en-US/MPL/2.0/][here]] and in LICENSE.