1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
/**
* libmatrix.h
*
* Defines some common macros and structures which are used in a number of
* places throughout the code.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
/* Some notes on libpurple's object model.
*
* +---------------+
* | PurpleAccount | <-.
* +---------------+ |
* | gc | --+--.
* . . | |
* +---------------+ | |
* | |
* .------------' |
* | V
* | +------------------+ +----------------------+
* | | PurpleConnection |<--. ,-->| MatrixConnectionData |
* | +------------------+ | | +----------------------+
* +-----| account | `-----+---| pc |
* | | protocol_data |---------' . .
* | . . +----------------------+
* | +------------------+
* |
* | +--------------------+ +--------------------+
* | | PurpleConversation |<--. ,--->| PurpleConvChat |
* | +--------------------+ | | +--------------------+
* +-----| account | `---+----| conv |
* | | name | | . .
* | | title | | +--------------------+
* | | u.chat |-------'
* | | data |
* | . .
* | +--------------------+
* |
* | +--------------------+
* | | PurpleBlistNode |
* | +--------------------+
* | . .
* | +--------------------+
* | ^
* | | (inherits)
* | +--------------------+
* | | PurpleChat |
* | +--------------------+
* '-----| account |
* | components |
* . .
* +--------------------+
*
*
*
* There is one PurpleAccount for each account the user has configured.
*
* Each PurpleAccount has at most one active connections. When the user enables
* the account, a PurpleConnection is made, and we attach a MatrixConnectionData
* to it - this is managed in matrix-connection.c. If there is an error on the
* connection, or the user explicitly disables the account, the PurpleConnection
* is deleted, and the MatrixConnectionData along with it.
*
* A PurpleChat (and a PurpleBuddy, but we don't have much to do with them)
* represents an entry on the buddylist. It has a hashtable called 'components'
* which stores the necessary information about the chat - in our case this is
* just the room id.
*
* A PurpleConversation represents an active conversation, and has a chat window
* associated with it. Its 'name' is not visible to the user; instead it is
* a unique id for the conversation - in our case the room id. Libpurple has
* some magic which looks up the 'name' against the 'components' of PurpleChats
* in the buddy list, and if a match is found, will set the title automatically.
*
* The PurpleConversation also has a hashtable which is used to track a range of
* protocol-specific data: see PURPLE_CONV_DATA_* in matrix-room.c for details
* of this.
*/
#ifndef LIBMATRIX_H
#define LIBMATRIX_H
#include <glib.h>
/* stub out the gettext macros for now */
#define _(a) (a)
#define N_(a) (a)
/* data for our 'about' box */
#define DISPLAY_VERSION "1.0"
#define MATRIX_WEBSITE "http://matrix.org"
/* our protocol ID string */
#define PRPL_ID "prpl-matrix"
/* identifiers for account options
*
* some of these are registered as options for the UI, and some are strictly
* internal. But they end up in the same place in the settings file, so they
* share a namespace.
*/
#define PRPL_ACCOUNT_OPT_HOME_SERVER "home_server"
#define PRPL_ACCOUNT_OPT_NEXT_BATCH "next_batch"
#define PRPL_ACCOUNT_OPT_SKIP_OLD_MESSAGES "skip_old_messages"
/* Pickled account info from olm_pickle_account */
#define PRPL_ACCOUNT_OPT_OLM_ACCOUNT_KEYS "olm_account_keys"
/* defaults for account options */
#define DEFAULT_HOME_SERVER "https://matrix.org"
/* identifiers for the chat info / "components" */
#define PRPL_CHAT_INFO_ROOM_ID "room_id"
#endif
|