项目作者: hausgold

项目描述 :
Allows users to acknowledge read messages and track unseen message counts per room
高级语言: Erlang
项目地址: git://github.com/hausgold/ejabberd-read-markers.git
创建时间: 2018-08-08T08:53:56Z
项目社区:https://github.com/hausgold/ejabberd-read-markers

开源协议:Other

下载


ejabberd Read Markers

Build Status


Heads up! This ejabberd module is no longer maintained. An alternative
solution for you could be
ejabberd-unread.


This is a custom ejabberd module which allows users
to acknowledge/retrieve their last read message on a multi user conference.
There is also an unseen counter per user per room which gets updated on new
messages on the room. Think of the WhatsApp read message markers, with this
module and a custom client you can implement the same feature. You can find
further details of the concept to learn more about the
client usage. This project comes with a self-contained test setup with all
required parts of the stack. powerful.

Requirements

Runtime

Build and development

Installation

See the detailed installation instructions to get the ejabberd
module up and running. When you are using Debian/Ubuntu, you can use an
automatic curl pipe script which simplifies the installation process for you.

Configuration

We make use of the global database settings of ejabberd, but you can also
specify a different database type by setting it explicitly.

  1. modules:
  2. mod_read_markers:
  3. db_type: sql

Keep in mind that this implementation just features the sql database type,
and only this.

Database

The concept outlined the read_messages table definition which is required to
store the read messages per user per room. The actual SQL
schema
MUST be executed on
the Jabber service database (PostgreSQL).

Development

Getting started

The project bootstrapping is straightforward. We just assume you took already
care of the requirements and you have your favorite terminal emulator pointed
on the project directory. Follow the instructions below and then relaxen and
watchen das blinkenlichten.

  1. # Installs and starts the ejabberd server and it's database
  2. $ make start
  3. # (The jabber server should already running now on its Docker container)
  4. # Open a new terminal on the project path,
  5. # install the custom module and run the test suite
  6. $ make reload test

When your host mDNS Stack is fine, you can also inspect the ejabberd admin
webconsole
with
admin@jabber.local as username and defaultpw as password. In the
case you want to shut this thing down use make stop.

mDNS host configuration

If you running Ubuntu/Debian, all required packages should be in place out of
the box. On older versions (Ubuntu < 18.10, Debian < 10) the configuration is
also fine out of the box. When you however find yourself unable to resolve the
domains or if you are a lucky user of newer Ubuntu/Debian versions, read on.

Heads up: This is the Arch Linux way. (package and service names may
differ, config is the same) Install the nss-mdns and avahi packages, enable
and start the avahi-daemon.service. Then, edit the file /etc/nsswitch.conf
and change the hosts line like this:

  1. hosts: ... mdns4 [NOTFOUND=return] resolve [!UNAVAIL=return] dns ...

Afterwards create (or overwrite) the /etc/mdns.allow file when not yet
present with the following content:

  1. .local.
  2. .local

This is the regular way for nss-mdns > 0.10 package versions (the
default now). If you use a system with 0.10 or lower take care of using
mdns4_minimal instead of mdns4 on the /etc/nsswitch.conf file and skip
the creation of the /etc/mdns.allow file.

Further readings

Test suite

The test suite sets up a simple environment with 3 independent users. (admin,
alice and bob). A new test room is created by the admin user, as well as alice
and bob were made members by setting their affiliations on the room. (This is
the same procedure we use on production for lead/user/agent integrations on the
Jabber service) The suite performs then some common tasks on the service:
sending two text messages, acknowledge the last read message of the admin user
and last but not least retrieve the last read message for multiple users. The
database table contains then 3 records (user per room).

The test suite was written in JavaScript and is executed by Node.js inside a
Docker container. We picked JavaScript here due to the easy and good featured
stanza.io client library for XMPP. It got all the things
which were needed to fulfil the job.

Additional readings