Personal copy of mcabber
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

268 lines
9.0 KiB

#ifndef __MCABBER_ROSTER_H__
#define __MCABBER_ROSTER_H__ 1
#include <glib.h>
#include <time.h>
#include "pgp.h"
#define SPECIAL_BUFFER_STATUS_ID "[status]"
// Default UI priorities
#define ROSTER_UI_PRIO_MUC_MESSAGE 20
#define ROSTER_UI_PRIO_MUC_HL_MESSAGE 30
#define ROSTER_UI_PRIO_MUC_PRIV_MESSAGE 40
#define ROSTER_UI_PRIO_PRIVATE_MESSAGE 50
#define ROSTER_UI_PRIO_ATTENTION_MESSAGE 100
#define ROSTER_UI_PRIO_STATUS_WIN_MESSAGE 500
enum imstatus {
offline,
available,
freeforchat,
dontdisturb,
notavail,
away,
invisible,
imstatus_size
};
extern char imstatus2char[]; // Should match enum above
enum imrole {
role_none,
role_moderator,
role_participant,
role_visitor,
imrole_size
};
extern char *strrole[]; // Should match enum above
enum imaffiliation {
affil_none,
affil_owner,
affil_admin,
affil_member,
affil_outcast,
imaffiliation_size
};
extern char *straffil[]; // Should match enum above
enum subscr {
sub_none = 0,
sub_pending = 1,
sub_to = 1 << 1,
sub_from = 1 << 2,
sub_both = sub_to|sub_from,
sub_remove = 1 << 3
};
enum findwhat {
jidsearch,
namesearch
};
enum setuiprio_ops {
prio_set, // Set priority
prio_max, // Set priority to max(specified, current)
prio_inc, // Increment priority
};
extern char *strprintstatus[];
// Note: do not change the ordering as these values are visible
// to the user (option 'muc_print_status')!
enum room_printstatus {
status_default,
status_none,
status_in_and_out,
status_all
};
extern char *strautowhois[];
enum room_autowhois {
autowhois_default,
autowhois_off,
autowhois_on
};
extern char *strflagjoins[];
enum room_flagjoins {
flagjoins_default,
flagjoins_none,
flagjoins_joins,
flagjoins_all
};
struct role_affil {
enum { type_role, type_affil } type;
union {
enum imrole role;
enum imaffiliation affil;
} val;
};
// Roster_type is a set of flags, so values should be 2^n
#define ROSTER_TYPE_USER 1U
#define ROSTER_TYPE_GROUP (1U<<1)
#define ROSTER_TYPE_AGENT (1U<<2)
#define ROSTER_TYPE_ROOM (1U<<3)
#define ROSTER_TYPE_SPECIAL (1U<<4)
// Flags:
#define ROSTER_FLAG_MSG 1U // Message not read
#define ROSTER_FLAG_HIDE (1U<<1) // Group hidden (or buddy window closed)
#define ROSTER_FLAG_LOCK (1U<<2) // Node should not be removed from buddylist
#define ROSTER_FLAG_USRLOCK (1U<<3) // Node should not be removed from buddylist
// ROSTER_FLAG_LOCAL (1U<<4) // Buddy not on server's roster (??)
#define XEP0085
struct xep0085 {
guint support;
guint last_state_sent;
guint last_state_rcvd;
};
enum chatstate_support {
CHATSTATES_SUPPORT_UNKNOWN = 0,
CHATSTATES_SUPPORT_PROBED,
CHATSTATES_SUPPORT_NONE,
CHATSTATES_SUPPORT_OK
};
struct pgp_data {
gchar *sign_keyid; // KeyId used by the contact to sign their presence/msg
#ifdef HAVE_GPGME
gpgme_sigsum_t last_sigsum; // Last signature summary
#endif
};
/* Message event and chat state flags */
#define ROSTER_EVENT_NONE 0U
/* XEP-85 Chat State Notifications */
#define ROSTER_EVENT_COMPOSING (1U<<0)
#define ROSTER_EVENT_ACTIVE (1U<<1)
#define ROSTER_EVENT_PAUSED (1U<<2)
#define ROSTER_EVENT_INACTIVE (1U<<3)
#define ROSTER_EVENT_GONE (1U<<4)
extern GList *buddylist;
extern GList *current_buddy;
extern GList *alternate_buddy;
extern GList *last_activity_buddy;
// Macros...
#define BUDDATA(glist_node) ((glist_node)->data)
#define CURRENT_JID buddy_getjid(BUDDATA(current_buddy))
// Prototypes...
void roster_init(void);
GSList *roster_add_group(const char *name);
GSList *roster_add_user(const char *jid, const char *name, const char *group,
guint type, enum subscr esub, gint on_server);
GSList *roster_find(const char *jidname, enum findwhat type, guint roster_type);
void roster_del_user(const char *jid);
void roster_free(void);
void roster_setstatus(const char *jid, const char *resname, gchar prio,
enum imstatus bstat, const char *status_msg,
time_t timestamp,
enum imrole role, enum imaffiliation affil,
const char *realjid);
void roster_setflags(const char *jid, guint flags, guint value);
void roster_msg_setflag(const char *jid, guint special, guint value);
void roster_msg_update_unread(const char *jid, gboolean increment);
void roster_setuiprio(const char *jid, guint special, guint value,
enum setuiprio_ops action);
guint roster_getuiprio(const char *jid, guint special);
const char *roster_getname(const char *jid);
const char *roster_getnickname(const char *jid);
void roster_settype(const char *jid, guint type);
enum imstatus roster_getstatus(const char *jid, const char *resname);
const char *roster_getstatusmsg(const char *jid, const char *resname);
char roster_getprio(const char *jid, const char *resname);
guint roster_gettype(const char *jid);
guint roster_getsubscription(const char *jid);
void roster_unsubscribed(const char *jid);
void buddylist_defer_build(void);
void buddylist_build(void);
void buddy_hide_group(gpointer rosterdata, int hide);
void buddylist_set_hide_offline_buddies(int hide);
int buddylist_isset_filter(void);
int buddylist_is_status_filtered(enum imstatus status);
void buddylist_set_filter(guchar);
guchar buddylist_get_filter(void);
const char *buddy_getjid(gpointer rosterdata);
void buddy_setname(gpointer rosterdata, char *newname);
const char *buddy_getname(gpointer rosterdata);
void buddy_setnickname(gpointer rosterdata, const char *newname);
const char *buddy_getnickname(gpointer rosterdata);
void buddy_setinsideroom(gpointer rosterdata, guint inside);
guint buddy_getinsideroom(gpointer rosterdata);
void buddy_settopic(gpointer rosterdata, const char *newtopic);
const char *buddy_gettopic(gpointer rosterdata);
void buddy_setprintstatus(gpointer rosterdata, enum room_printstatus);
enum room_printstatus buddy_getprintstatus(gpointer rosterdata);
void buddy_setautowhois(gpointer rosterdata, enum room_autowhois);
enum room_autowhois buddy_getautowhois(gpointer rosterdata);
void buddy_setflagjoins(gpointer rosterdata, enum room_flagjoins);
enum room_flagjoins buddy_getflagjoins(gpointer rosterdata);
void buddy_settype(gpointer rosterdata, guint type);
guint buddy_gettype(gpointer rosterdata);
guint buddy_getsubscription(gpointer rosterdata);
void buddy_setgroup(gpointer rosterdata, char *newgroupname);
const char *buddy_getgroupname(gpointer rosterdata);
gpointer buddy_getgroup(gpointer rosterdata);
enum imstatus buddy_getstatus(gpointer rosterdata, const char *resname);
const char *buddy_getstatusmsg(gpointer rosterdata, const char *resname);
time_t buddy_getstatustime(gpointer rosterdata, const char *resname);
gchar buddy_getresourceprio(gpointer rosterdata, const char *resname);
//int buddy_isresource(gpointer rosterdata);
GSList *buddy_getresources(gpointer rosterdata);
GSList *buddy_getresources_locale(gpointer rosterdata);
const char *buddy_getactiveresource(gpointer rosterdata);
void buddy_setactiveresource(gpointer rosterdata, const char *resname);
void buddy_resource_setname(gpointer rosterdata, const char *resname,
const char *newname);
void buddy_resource_setevents(gpointer rosterdata, const char *resname,
guint event);
guint buddy_resource_getevents(gpointer rosterdata, const char *resname);
void buddy_resource_setcaps(gpointer rosterdata, const char *resname,
const char *caps);
char *buddy_resource_getcaps(gpointer rosterdata, const char *resname);
struct xep0085 *buddy_resource_xep85(gpointer rosterdata, const char *resname);
struct pgp_data *buddy_resource_pgp(gpointer rosterdata, const char *resname);
enum imrole buddy_getrole(gpointer rosterdata, const char *resname);
enum imaffiliation buddy_getaffil(gpointer rosterdata, const char *resname);
const char *buddy_getrjid(gpointer rosterdata, const char *resname);
void buddy_del_all_resources(gpointer rosterdata);
void buddy_setflags(gpointer rosterdata, guint flags, guint value);
guint buddy_getflags(gpointer rosterdata);
guint buddy_getuiprio(gpointer rosterdata);
guint buddy_getunread(gpointer rosterdata);
void buddy_setonserverflag(gpointer rosterdata, guint onserver);
guint buddy_getonserverflag(gpointer rosterdata);
GList *buddy_search_jid(const char *jid);
GList *buddy_search(char *string);
void foreach_buddy(guint roster_type,
void (*pfunc)(gpointer rosterdata, void *param),
void *param);
void foreach_group_member(gpointer groupdata,
void (*pfunc)(gpointer rosterdata, void *param),
void *param);
gpointer unread_msg(gpointer rosterdata);
void unread_jid_add(const char *jid);
GList *unread_jid_get_list(void);
GSList *compl_list(guint type);
#endif /* __MCABBER_ROSTER_H__ */
/* vim: set et cindent cinoptions=>2\:2(0 ts=2 sw=2: For Vim users... */