aboutsummaryrefslogtreecommitdiffstats
path: root/libmatrix.h
blob: 73ba79ebe58f3b12cc52c1a1294e02545f45712b (plain) (blame)
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
128
129
130
/**
 * 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 "0.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"
#define PRPL_ACCOUNT_OPT_PREFER_MARKDOWN "prefer_markdown"
/* Pickled account info from olm_pickle_account */
#define PRPL_ACCOUNT_OPT_OLM_ACCOUNT_KEYS "olm_account_keys"
/* Access token, after a login */
#define PRPL_ACCOUNT_OPT_ACCESS_TOKEN "access_token"

/* 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