/** * inf_text_buffer_insert_text: * @buffer: A #InfTextBuffer. * @pos: A character offset into @buffer. * @text (type=guint8*) (array length=bytes) (transfer none): A pointer to * the text to insert. * @len: The length (in characters) of @text. * @bytes: The length (in bytes) of @text. * @user: (allow-none): A #InfUser that has inserted the new text, or %NULL. * * Inserts @text into @buffer as written by @author. @text must be encoded in * the character encoding of the buffer, see inf_text_buffer_get_encoding(). **/ void inf_text_buffer_insert_text(InfTextBuffer* buffer, guint pos, gconstpointer text, gsize bytes, guint len, InfUser* user) { InfTextBufferInterface* iface; InfTextChunk* chunk; g_return_if_fail(INF_TEXT_IS_BUFFER(buffer)); g_return_if_fail(text != NULL); g_return_if_fail(user == NULL || INF_IS_USER(user)); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_if_fail(iface->insert_text != NULL); chunk = inf_text_chunk_new(inf_text_buffer_get_encoding(buffer)); inf_text_chunk_insert_text( chunk, 0, text, bytes, len, user == NULL ? 0 : inf_user_get_id(user) ); iface->insert_text(buffer, pos, chunk, user); inf_text_chunk_free(chunk); }
/** * inf_user_table_add_user: * @user_table: A #InfUserTable. * @user: A #InfUser not already contained in @user_table. * * Inserts @user into @user_table. */ void inf_user_table_add_user(InfUserTable* user_table, InfUser* user) { g_return_if_fail(INF_IS_USER_TABLE(user_table)); g_return_if_fail(INF_IS_USER(user)); g_signal_emit(G_OBJECT(user_table), user_table_signals[ADD_USER], 0, user); }
/** * inf_text_buffer_erase_text: * @buffer: A #InfTextBuffer. * @pos: The position to begin deleting characters from. * @len: The amount of characters to delete. * @user: (allow-none): A #InfUser that erases the text, or %NULL. * * Erases characters from the text buffer. **/ void inf_text_buffer_erase_text(InfTextBuffer* buffer, guint pos, guint len, InfUser* user) { InfTextBufferInterface* iface; g_return_if_fail(INF_TEXT_IS_BUFFER(buffer)); g_return_if_fail(user == NULL || INF_IS_USER(user)); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_if_fail(iface->erase_text != NULL); iface->erase_text(buffer, pos, len, user); }
/** * inf_text_buffer_insert_chunk: * @buffer: A #InfTextBuffer. * @pos: A character offset into @buffer. * @chunk: (transfer none): A #InfTextChunk. * @user: (allow-none): A #InfUser inserting @chunk, or %NULL. * * Inserts a #InfTextChunk into @buffer. @user must not necessarily be the * author of @chunk (@chunk may even consist of multiple segments). This * happens when undoing a delete operation that erased another user's text. **/ void inf_text_buffer_insert_chunk(InfTextBuffer* buffer, guint pos, InfTextChunk* chunk, InfUser* user) { InfTextBufferInterface* iface; g_return_if_fail(INF_TEXT_IS_BUFFER(buffer)); g_return_if_fail(chunk != NULL); g_return_if_fail(user == NULL || INF_IS_USER(user)); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_if_fail(iface->insert_text != NULL); iface->insert_text(buffer, pos, chunk, user); }
/** * inf_text_buffer_text_erased: * @buffer: A #InfTextBuffer. * @pos: The position to begin deleting characters from. * @chunk: A #InfTextChunk containing the erased text. * @user: (allow-none): A #InfUser that erases the text, or %NULL. * * Emits the #InfTextBuffer::text-erased signal. This is meant to be used * by interface implementations in their @erase_text function, or when text * was erased by other means. **/ void inf_text_buffer_text_erased(InfTextBuffer* buffer, guint pos, InfTextChunk* chunk, InfUser* user) { g_return_if_fail(INF_TEXT_IS_BUFFER(buffer)); g_return_if_fail(chunk != NULL); g_return_if_fail(user == NULL || INF_IS_USER(user)); g_signal_emit( G_OBJECT(buffer), text_buffer_signals[TEXT_ERASED], 0, pos, chunk, user ); }
/** * inf_chat_buffer_add_userpart_message: * @buffer: A #InfChatBuffer. * @user: A #InfUser who wrote the message. * @time: The time at which the user has written the message. * @flags: Flags to set for the message to add. * * Adds a new userpart message to the chat buffer. If the buffer is full * (meaning the number of messages in the buffer equals its size), then an * old message will get discarded. If the message to be added is older than * all other messages in the buffer, then it will not be added at all. */ void inf_chat_buffer_add_userpart_message(InfChatBuffer* buffer, InfUser* user, time_t time, InfChatBufferMessageFlags flags) { InfChatBufferMessage msg; g_return_if_fail(INF_IS_CHAT_BUFFER(buffer)); g_return_if_fail(INF_IS_USER(user)); msg.type = INF_CHAT_BUFFER_MESSAGE_USERPART; msg.user = user; msg.text = NULL; msg.length = 0; msg.time = time; msg.flags = flags; g_signal_emit(buffer, chat_buffer_signals[ADD_MESSAGE], 0, &msg); }
/** * inf_chat_buffer_add_emote_message: * @buffer: A #InfChatBuffer. * @by: A #InfUser who wrote the message. * @message: The message text. * @length: The length of @message, in bytes. * @time: The time at which the user has written the message. * @flags: Flags to set for the message to add. * * Adds a new emote message to the chat buffer. If the buffer is full * (meaning the number of messages in the buffer equals its size), then an * old message will get discarded. If the message to be added is older than * all other messages in the buffer, then it will not be added at all. */ void inf_chat_buffer_add_emote_message(InfChatBuffer* buffer, InfUser* by, const gchar* message, gsize length, time_t time, InfChatBufferMessageFlags flags) { InfChatBufferMessage msg; g_return_if_fail(INF_IS_CHAT_BUFFER(buffer)); g_return_if_fail(INF_IS_USER(by)); g_return_if_fail(message != NULL); msg.type = INF_CHAT_BUFFER_MESSAGE_EMOTE; msg.user = by; /* cast const away without warning */ msg.text = *(gchar**) (gpointer) &message; msg.length = length; msg.time = time; msg.flags = flags; g_signal_emit(buffer, chat_buffer_signals[ADD_MESSAGE], 0, &msg); }
/** * inf_user_get_connection: * @user: A #InfUser. * * Returns a connection to the given #InfUser, or %NULL. If a non-%NULL * connection is returned, then this is the connection through which records * from that user come from. This means that, when this connection is closed, * then the user is no longer available. However, you cannot send something * to this connection expecting the user will receive it. For example, * in central messaging mode, this connection is always the publisher, because * all records from the user are relayed via the publisher. * * If this functions returns %NULL, this either means @user is a local user * (%INF_USER_LOCAL flag set) or it is not available (status is * %INF_USER_UNAVAILABLE). * * Return Value: A #InfXmlConnection, or %NULL. **/ InfXmlConnection* inf_user_get_connection(InfUser* user) { g_return_val_if_fail(INF_IS_USER(user), NULL); return INF_USER_PRIVATE(user)->connection; }
/** * inf_user_get_flags: * @user: A #InfUser. * * Returns the flags for the given #InfUser. * * Return Value: The user's flags. **/ InfUserFlags inf_user_get_flags(InfUser* user) { g_return_val_if_fail(INF_IS_USER(user), 0); return INF_USER_PRIVATE(user)->flags; }
/** * inf_user_get_status: * @user: A #InfUser. * * Returns the status of the given #InfUser. * * Return Value: The user's status. **/ InfUserStatus inf_user_get_status(InfUser* user) { g_return_val_if_fail(INF_IS_USER(user), INF_USER_UNAVAILABLE); return INF_USER_PRIVATE(user)->status; }
/** * inf_user_get_name: * @user: A #InfUser. * * Returns the name of the given #InfUser. * * Return Value: The user's name. **/ const gchar* inf_user_get_name(InfUser* user) { g_return_val_if_fail(INF_IS_USER(user), NULL); return INF_USER_PRIVATE(user)->name; }
/** * inf_user_get_id: * @user: A #InfUser. * * Returns the ID of the given #InfUser. * * Return Value: A numerical User ID. **/ guint inf_user_get_id(InfUser* user) { g_return_val_if_fail(INF_IS_USER(user), 0); return INF_USER_PRIVATE(user)->id; }