Skip to content

bqv/weechat-xmpp

Repository files navigation

weechat-xmpp

https://api.travis-ci.org/bqv/weechat-xmpp.svg?branch=master https://coveralls.io/repos/github/bqv/weechat-xmpp/badge.svg?branch=master https://img.shields.io/github/issues/bqv/weechat-xmpp.svg https://img.shields.io/github/issues-closed/bqv/weechat-xmpp.svg https://img.shields.io/github/license/bqv/weechat-xmpp.svg https://img.shields.io/badge/weechat--extras-xmpp-blue.svg 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)
  • libfmt (dynamic, dependency)
  • g++ (build, >= GCC12)
  • bison (build)
  • flex (build)
  • doctest (test)
  • weechat (>= v3.0)

Building

git clone git://github.com/bqv/weechat-xmpp.git
cd weechat-xmpp
git submodule update --init --recursive
make
make install

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)
  • [X] Join and handle events asynchronously
  • [ ] Cache caps
  • [ ] 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” – Ellenor et al Bjornsdottir

License

weechat-xmpp is licensed under the Mozilla Public License Version 2.0 available here and in LICENSE.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages