2016-03-04 07:58:56 +00:00
|
|
|
|
/*
|
|
|
|
|
* This file is part of matrix-glib-sdk
|
|
|
|
|
*
|
|
|
|
|
* matrix-glib-sdk is free software: you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
* License as published by the Free Software Foundation, either
|
|
|
|
|
* version 3 of the License, or (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* matrix-glib-sdk 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 Lesser General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
* License along with matrix-glib-sdk. If not, see
|
|
|
|
|
* <http://www.gnu.org/licenses/>.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
namespace Matrix {
|
2016-02-19 13:32:20 +00:00
|
|
|
|
public errordomain Error {
|
|
|
|
|
NONE, /// no error
|
2016-03-07 15:38:06 +00:00
|
|
|
|
COMMUNICATION_ERROR, /// there was a problem in
|
|
|
|
|
/// communication (e.g. connection
|
|
|
|
|
/// error)
|
2016-02-19 13:32:20 +00:00
|
|
|
|
INCOMPLETE, /// the passed/generated data is incomplete
|
|
|
|
|
BAD_REQUEST, /// the request is invalid
|
2016-03-07 15:38:06 +00:00
|
|
|
|
BAD_RESPONSE, /// malformed response, or the response
|
|
|
|
|
/// is not a JSON object
|
|
|
|
|
INVALID_ROOM_ID, /// the provided string doesn’t contain
|
|
|
|
|
/// a valid room ID
|
|
|
|
|
UNKNOWN_VALUE, /// the response from the Matrix.org
|
|
|
|
|
/// server contains a value unknown to
|
|
|
|
|
/// this library. These should be
|
|
|
|
|
/// reported to the Matrix GLib SDK
|
|
|
|
|
/// developers
|
2016-02-19 13:32:20 +00:00
|
|
|
|
INVALID_TYPE, /// the provided type is invalid
|
|
|
|
|
UNSUPPORTED, ///the operation is unsupported
|
2016-03-07 15:38:06 +00:00
|
|
|
|
INVALID_FORMAT, /// the format of the JSON node is
|
|
|
|
|
/// invalid (e.g. it is an array
|
|
|
|
|
/// instead of an object)
|
2016-02-19 13:32:20 +00:00
|
|
|
|
|
|
|
|
|
/* Add Matrix-defined error codes under here, prefixing them with
|
|
|
|
|
* `MATRIX_ERROR_`, i.e. `M_FORBIDDEN` =>
|
|
|
|
|
* `MATRIX_ERROR_M_FORBIDDEN` */
|
2016-03-07 15:38:06 +00:00
|
|
|
|
M_MISSING_TOKEN = 500, /// authorization token is missing
|
|
|
|
|
/// from the request
|
|
|
|
|
M_FORBIDDEN, /// access was forbidden (e.g. due
|
|
|
|
|
/// to a missing/invalid token, or
|
|
|
|
|
/// using a bad password during
|
|
|
|
|
/// login)
|
2016-02-19 13:32:20 +00:00
|
|
|
|
M_UNKNOWN, /// an error unknown to the Matrix homeserver
|
2016-03-07 15:38:06 +00:00
|
|
|
|
M_UNKNOWN_TOKEN, /// the token provided is not known
|
|
|
|
|
/// for the homeserver
|
|
|
|
|
M_NOT_JSON, /// illegal request, the content is
|
|
|
|
|
/// not valid JSON
|
|
|
|
|
M_UNRECOGNIZED, /// the homeserver didn't understand
|
|
|
|
|
/// the request
|
2016-02-19 13:32:20 +00:00
|
|
|
|
M_UNAUTHORIZED, /// the request is unauthorized
|
2016-03-07 15:38:06 +00:00
|
|
|
|
M_BAD_JSON, /// the JSON data is not in the
|
|
|
|
|
/// required format
|
2016-02-19 13:32:20 +00:00
|
|
|
|
M_USER_IN_USE, /// the specified username is in use
|
|
|
|
|
M_ROOM_IN_USE, /// the specified room is in use
|
|
|
|
|
M_BAD_PAGINATION, /// invalid pagination parameters
|
|
|
|
|
M_BAD_STATE, /// invalid state event
|
|
|
|
|
M_NOT_FOUND, /// the requested resource is not found
|
2016-03-07 15:38:06 +00:00
|
|
|
|
M_GUEST_ACCESS_FORBIDDEN, /// guest access was requested, but
|
|
|
|
|
/// it is forbidden
|
2016-02-19 13:32:20 +00:00
|
|
|
|
M_LIMIT_EXCEEDED, /// the request was rate limited
|
|
|
|
|
M_CAPTCHA_NEEDED, /// a captcha is needed to continue
|
|
|
|
|
M_CAPTCHA_INVALID, /// the provided captcha is invalid
|
|
|
|
|
M_MISSING_PARAM, /// a parameter is missing from the request
|
|
|
|
|
M_TOO_LARGE, /// the request data is too large
|
2016-03-07 15:38:06 +00:00
|
|
|
|
M_EXCLUSIVE, /// the desired user ID is in an
|
|
|
|
|
/// exclusive namespace claimed by
|
|
|
|
|
/// an application server
|
2016-02-19 13:32:20 +00:00
|
|
|
|
M_THREEPID_AUTH_FAILED, /// 3rd party authentication failed
|
2016-03-07 15:38:06 +00:00
|
|
|
|
M_THREEPID_IN_USE, /// the provided 3rd party ID is
|
|
|
|
|
/// already in use
|
2016-02-19 13:32:20 +00:00
|
|
|
|
M_INVALID_USERNAME, /// the given username is invalid
|
|
|
|
|
|
|
|
|
|
/* Allow for a lot of Matrix.org defined codes
|
|
|
|
|
* Do not define error codes after this! */
|
2016-03-07 15:38:06 +00:00
|
|
|
|
UNSPECIFIED = 16383, /// no error code was sent by the
|
|
|
|
|
/// homeserver. If you see this
|
|
|
|
|
/// error, that usually indicates a
|
|
|
|
|
/// homeserver bug
|
2016-02-19 13:32:20 +00:00
|
|
|
|
UNKNOWN_ERROR; /// an error unknown to this library
|
|
|
|
|
|
|
|
|
|
public static GLib.Quark
|
|
|
|
|
quark ()
|
|
|
|
|
{
|
|
|
|
|
return Quark.from_string("matrix-error-quark");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 11:45:57 +00:00
|
|
|
|
/**
|
|
|
|
|
* User account types.
|
|
|
|
|
*/
|
|
|
|
|
public enum AccountKind {
|
|
|
|
|
DEFAULT, /// use the server default (usually {{{USER}}})
|
|
|
|
|
USER, /// normal user
|
|
|
|
|
GUEST; /// guest user
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 11:49:01 +00:00
|
|
|
|
/**
|
|
|
|
|
* Direction of events when requesting an event context.
|
|
|
|
|
*/
|
|
|
|
|
public enum EventDirection {
|
|
|
|
|
FORWARD, /// List events after the specified one
|
|
|
|
|
BACKWARD; /// List events before the specified one
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 11:34:30 +00:00
|
|
|
|
/**
|
|
|
|
|
* Event format received when synchronizing.
|
|
|
|
|
*/
|
|
|
|
|
public enum EventFormat {
|
2016-03-08 12:53:20 +00:00
|
|
|
|
DEFAULT, /// event format will be omitted from the filter,
|
|
|
|
|
/// so the server will use its default (usually
|
|
|
|
|
/// {{{FEDERATION}}})
|
|
|
|
|
CLIENT, /// return the events in a format suitable for
|
|
|
|
|
/// clients
|
|
|
|
|
FEDERATION; /// return the raw event as receieved over
|
|
|
|
|
/// federation
|
2016-03-03 11:34:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 12:07:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* Presence values for matrix_api_set_user_presence() and other
|
|
|
|
|
* presence related queries.
|
|
|
|
|
*/
|
|
|
|
|
public enum Presence {
|
|
|
|
|
UNKNOWN, /// user's presence is unknown
|
|
|
|
|
ONLINE, /// user is online
|
|
|
|
|
OFFLINE, /// user is offline
|
|
|
|
|
UNAVAILABLE, /// user is unavailable (i.e. busy)
|
|
|
|
|
FREE_FOR_CHAT; /// user is free for chat
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 12:12:56 +00:00
|
|
|
|
/**
|
|
|
|
|
* Condition types for pushers.
|
|
|
|
|
*/
|
|
|
|
|
public enum PusherConditionKind {
|
2016-03-08 12:53:20 +00:00
|
|
|
|
EVENT_MATCH, /// glob pattern match on a field of
|
|
|
|
|
/// the event. Requires a {{{key}}} and
|
|
|
|
|
/// a {{{pattern}}} parameter
|
|
|
|
|
PROFILE_TAG, /// matches the profile tag of the
|
|
|
|
|
/// device that the notification would
|
|
|
|
|
/// be delivered to. Requires a
|
|
|
|
|
/// {{{profile_tag}}} parameter
|
|
|
|
|
CONTAINS_DISPLAY_NAME, /// matches unencrypted messages where
|
|
|
|
|
/// the content's body contains the
|
|
|
|
|
/// owner's display name in that room.
|
|
|
|
|
ROOM_MEMBER_COUNT; /// matches the current number of
|
|
|
|
|
/// members in the room. Requires an
|
|
|
|
|
/// {{{is}}} parameter, which must be
|
|
|
|
|
/// an integer, optionally prefixed by
|
|
|
|
|
/// {{==}}}, {{{<}}}, {{{>}}},
|
|
|
|
|
/// {{{<=}}} or {{{>=}}}. If the
|
|
|
|
|
/// prefix is omitted, it defaults to
|
|
|
|
|
/// {{{==}}}
|
2016-03-03 12:12:56 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 13:22:00 +00:00
|
|
|
|
/**
|
|
|
|
|
* Pusher types.
|
|
|
|
|
*/
|
|
|
|
|
public enum PusherKind {
|
|
|
|
|
OVERRIDE, /// highest priority rules
|
2016-03-08 12:53:20 +00:00
|
|
|
|
SENDER, /// for (unencrypted) messages that match certain
|
|
|
|
|
/// patterns
|
|
|
|
|
ROOM, /// for all messages for a given room. The rule ID
|
|
|
|
|
/// of a room rule is always the ID of the room
|
|
|
|
|
/// that it affects
|
|
|
|
|
CONTENT, /// for messages from a specific Matrix user
|
|
|
|
|
/// ID. The rule ID of such rules is always the
|
|
|
|
|
/// Matrix ID of the user whose messages they'd
|
|
|
|
|
/// apply to
|
2016-03-03 13:22:00 +00:00
|
|
|
|
UNDERRIDE; /// lowest priority rules
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 13:23:25 +00:00
|
|
|
|
/**
|
|
|
|
|
* Receipt types of acknowledgment.
|
|
|
|
|
*/
|
|
|
|
|
public enum ReceiptType {
|
|
|
|
|
READ; /// indicate that the message has been read
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 11:37:02 +00:00
|
|
|
|
/**
|
|
|
|
|
* Resizing methods for matrix_api_media_thumbnail().
|
|
|
|
|
*/
|
|
|
|
|
public enum ResizeMethod {
|
|
|
|
|
DEFAULT, /// use the server default value
|
|
|
|
|
CROP, /// crop thumbnail to the requested size
|
|
|
|
|
SCALE; /// scale thumbnail to the requested size
|
|
|
|
|
}
|
|
|
|
|
|
2016-02-03 09:42:52 +00:00
|
|
|
|
/**
|
|
|
|
|
* Room membership types.
|
|
|
|
|
*/
|
|
|
|
|
public enum RoomMembership {
|
2016-03-08 12:53:20 +00:00
|
|
|
|
UNKNOWN, /// the membership sent by the server is unknown to
|
|
|
|
|
/// this SDK
|
|
|
|
|
INVITE, /// the user has been invited to join a room, but has
|
|
|
|
|
/// not yet joined it. They may not participate in
|
|
|
|
|
/// the room until they join
|
|
|
|
|
JOIN, /// the user has joined the room (possibly after
|
|
|
|
|
/// accepting an invite), and may participate in it
|
|
|
|
|
LEAVE, /// the user was once joined to the room, but has
|
|
|
|
|
/// since left (possibly by choice, or possibly by
|
|
|
|
|
/// being kicked)
|
|
|
|
|
BAN, /// the user has been banned from the room, and is no
|
|
|
|
|
/// longer allowed to join it until they are
|
|
|
|
|
/// un-banned from the room (by having their
|
|
|
|
|
/// membership state set to a value other than
|
|
|
|
|
/// {{{BAN}}})
|
2016-02-03 09:42:52 +00:00
|
|
|
|
KNOCK; /// this is a reserved word, which currently has no meaning
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 13:26:15 +00:00
|
|
|
|
/**
|
|
|
|
|
* Preset values for matrix_api_create_room() calls.
|
|
|
|
|
*/
|
|
|
|
|
public enum RoomPreset {
|
|
|
|
|
NONE, /// no preset
|
|
|
|
|
PRIVATE, /// preset for private rooms
|
2016-03-08 12:53:20 +00:00
|
|
|
|
TRUSTED_PRIVATE, /// same as private rooms, but all users get
|
|
|
|
|
/// the same power level as the room creator
|
2016-03-03 13:26:15 +00:00
|
|
|
|
PUBLIC; /// preset for public rooms
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 13:28:22 +00:00
|
|
|
|
/**
|
|
|
|
|
* Visibility values for room creation. Not to be confused with
|
|
|
|
|
* join rules.
|
|
|
|
|
*/
|
|
|
|
|
public enum RoomVisibility {
|
|
|
|
|
DEFAULT, /// use a server-assigned value (usually {{{private}}}
|
|
|
|
|
PUBLIC, /// make the room visible in the public room list
|
|
|
|
|
PRIVATE; /// hide the room from the public room list
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-07 18:17:32 +00:00
|
|
|
|
/**
|
|
|
|
|
* Room join rules.
|
|
|
|
|
*/
|
|
|
|
|
public enum JoinRules {
|
|
|
|
|
UNKNOWN, /// A value unknown to this library
|
|
|
|
|
PUBLIC, /// Anyone can join
|
|
|
|
|
INVITE, /// Users may join upon invite
|
|
|
|
|
PRIVATE, /// Reserved word, not usable yet
|
|
|
|
|
KNOCK; /// Reserved word, not usable yet
|
|
|
|
|
}
|
|
|
|
|
|
2016-02-29 13:45:14 +00:00
|
|
|
|
public enum SearchOrder {
|
|
|
|
|
RECENT,
|
|
|
|
|
RANK
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public enum SearchKey {
|
|
|
|
|
CONTENT_BODY,
|
|
|
|
|
CONTENT_NAME,
|
|
|
|
|
CONTENT_TOPIC
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public enum SearchGroupBy {
|
|
|
|
|
ROOM_ID,
|
|
|
|
|
SENDER
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-07 15:24:45 +00:00
|
|
|
|
public enum HistoryVisibility {
|
|
|
|
|
UNKNOWN,
|
|
|
|
|
INVITED,
|
|
|
|
|
JOINED,
|
|
|
|
|
SHARE,
|
|
|
|
|
WORLD_READABLE;
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-08 18:17:57 +00:00
|
|
|
|
public enum GuestAccess {
|
|
|
|
|
UNKNOWN, /// represents a value unknown to this library
|
|
|
|
|
CAN_JOIN, /// guest users are allowed to access the room
|
|
|
|
|
FORBIDDEN; /// guest users are not allowed to access the room
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-08 16:02:29 +00:00
|
|
|
|
public struct ImageInfo {
|
|
|
|
|
int? size;
|
|
|
|
|
int? height;
|
|
|
|
|
int? width;
|
|
|
|
|
string? mimetype;
|
|
|
|
|
|
|
|
|
|
public Json.Node
|
|
|
|
|
get_json_node()
|
|
|
|
|
throws Matrix.Error
|
|
|
|
|
{
|
|
|
|
|
if ((size == null)
|
|
|
|
|
|| (height == null)
|
|
|
|
|
|| (width == null)
|
|
|
|
|
|| (mimetype == null)) {
|
|
|
|
|
throw new Matrix.Error.INCOMPLETE(
|
|
|
|
|
"Won't generate an ImageInfo without all fields set.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var node = new Json.Node(Json.NodeType.OBJECT);
|
|
|
|
|
var obj = new Json.Object();
|
|
|
|
|
node.set_object(obj);
|
|
|
|
|
|
|
|
|
|
obj.set_int_member("size", size);
|
|
|
|
|
obj.set_int_member("h", height);
|
|
|
|
|
obj.set_int_member("w", width);
|
|
|
|
|
obj.set_string_member("mimetype", mimetype);
|
|
|
|
|
|
|
|
|
|
return node;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-03 13:06:33 +00:00
|
|
|
|
private int?
|
|
|
|
|
_g_enum_nick_to_value(Type enum_type, string nick)
|
|
|
|
|
{
|
|
|
|
|
EnumClass enum_class = (EnumClass)enum_type.class_ref();
|
|
|
|
|
unowned EnumValue? enum_val = enum_class.get_value_by_nick(nick);
|
|
|
|
|
|
|
|
|
|
if (enum_val != null) {
|
|
|
|
|
return enum_val.value;
|
|
|
|
|
} else {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string?
|
2016-03-04 07:58:56 +00:00
|
|
|
|
_g_enum_value_to_nick(Type enum_type,
|
|
|
|
|
int value,
|
|
|
|
|
bool convert_dashes = true)
|
|
|
|
|
{
|
|
|
|
|
EnumClass enum_class = (EnumClass)enum_type.class_ref();
|
|
|
|
|
unowned EnumValue? enum_val = enum_class.get_value(value);
|
|
|
|
|
|
|
|
|
|
if (enum_val != null) {
|
|
|
|
|
var nick = enum_val.value_nick;
|
|
|
|
|
|
|
|
|
|
if (convert_dashes) {
|
|
|
|
|
return nick.replace("-", "_");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nick;
|
|
|
|
|
} else {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|