3 each account has its own separate directory.
4 there, we have one directory per contact, named by contact public key.
5 also, we have "conferences" directory, where we have... something, i
16 UPCASED-64-HEX-CHARS/ (contact public key)
20 current.png: symlink to the actual avatar
22 here we will store fully transferred files
24 here we will store partially accepted files
25 (and will clear this dir on restart/reconnect)
27 here we will store textual logs, one file per month,
28 named "YYYY-MM.log". see below for log format
29 "unread.log" for unread messages (not put into normal log yet)
30 "resend.log" for messages requires resending (copies of logged messages)
33 log format (it looks like text, but it isn't text):
34 T[YYYY/MM/DD HH:NN:SS]: text-in-utf8
36 text: chars in range of [0..31, 92, 127] are \xHH-encoded
38 !: server/app notification
41 if char before text is '!' instead of space, this is "/me" message
44 enum TriOption { Default = -1, No = 0, Yes = 1 }
46 struct CommonOptions {
47 TriOption showOffline; // show this contact even if it is offline
48 TriOption showPopup; // show popups for messages from this contact
49 TriOption blinkActivity; // blink tray icon if we have some activity for this contact
50 TriOption skipUnread; // skip this contacts in `next_unread` command
51 TriOption ftranAllowed; // file transfers allowed for this contact
52 int resendRotDays; // how many days message should be in "resend queue" if contact is offline (-1: use default value)
53 int hmcOnOpen; // how many history messages we should show when we opening a chat with a contact (-1: use default value)
54 //TriOption confAutoJoin; // automatically join the conference when we're going online
58 contact's config.rc: serialized with iv.txtser:
59 struct ContactConfig {
60 uint gid; // group id (see groups.rc)
61 string nick; // empty: unauthorized
62 string visnick; // empty: use `nick`
64 uint lastonlinetime; // local unixtime; changed when contact status changed between offline and online (any kind of online)
65 @SRZIgnore ubyte[32] pubkey; // used as unique contact id, same as directory name
67 bool showAlways; // always show this contact
68 bool authReqPending; // pending authorisation (i.e. this is auth request, and `statusmsg` is request message)
69 bool ephemeral; // "ephemeral" contact for conference (not yet)
89 struct AccountConfig {
90 string nick; // my nick
91 string statusmsg; // my status message
92 bool showOffline; // show offline persons?
93 bool showPopup; // show popups for messages?
94 bool blinkActivity; // blink tray icon if we have some activity (unread msg, transfer request, etc.)?
95 bool skipUnread; // skip contacts in `next_unread` command?
96 bool hideEmptyGroups; // hide empty groups? (can be overriden by `hideNoVisible` group option)
97 bool ftranAllowed; // file transfers allowed for this group (-1: use default value)
98 int resendRotDays; // how many days message should be in "resend queue" if contact is offline
99 int hmcOnOpen; // how many history messages we should show when we opening a chat with a contact
103 groups.rc (sorted by group order):
104 struct GroupOptions {
105 uint gid; // group id; there is always group with gid 0, it is "common" default group
106 string name; // group name
107 bool opened; // is this group opened?
108 TriOption showOffline; // show offline persons in this group
109 TriOption showPopup; // show popups for messages from this group
110 TriOption blinkActivity; // blink tray icon if we have some activity (unread msg, transfer request, etc.) for this group
111 TriOption skipUnread; // skip contacts from this group in `next_unread` command
112 TriOption hideIfNoVisible; // hide this group if there are no visible items in it
113 TriOption ftranAllowed; // file transfers allowed for this group
114 int resendRotDays; // how many days message should be in "resend queue" if contact is offline (-1: use default value)
115 int hmcOnOpen; // how many history messages we should show when we opening a chat with a contact (-1: use default value)