/pidgin/main: 4f7b1fea3cd3: Initial implementation for PurpleMes...

Tomasz Wasilczyk <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 4f7b1fea3cd3397fc9bb694953a6fd572300fc78
Author:	 Tomasz Wasilczyk <[email protected]>
Date:	 2014-05-22 13:48 +0200
Branch:	 default
URL: https://hg.pidgin.im/pidgin/main/rev/4f7b1fea3cd3

Description:

Initial implementation for PurpleMessage class

diffstat:

 libpurple/Makefile.am |    2 +
 libpurple/message.c   |  176 ++++++++++++++++++++++++++++++++++++++++++++++++++
 libpurple/message.h   |   91 +++++++++++++++++++++++++
 3 files changed, 269 insertions(+), 0 deletions(-)

diffs (296 lines):

diff --git a/libpurple/Makefile.am b/libpurple/Makefile.am
--- a/libpurple/Makefile.am
+++ b/libpurple/Makefile.am
@@ -83,6 +83,7 @@ purple_coresources = \
 	media.c \
 	mediamanager.c \
 	memorypool.c \
+	message.c \
 	mime.c \
 	nat-pmp.c \
 	network.c \
@@ -163,6 +164,7 @@ purple_coreheaders = \
 	media-gst.h \
 	mediamanager.h \
 	memorypool.h \
+	message.h \
 	mime.h \
 	nat-pmp.h \
 	network.h \
diff --git a/libpurple/message.c b/libpurple/message.c
new file mode 100644
--- /dev/null
+++ b/libpurple/message.c
@@ -0,0 +1,176 @@
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * 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
+ */
+
+#include "internal.h"
+#include "glibcompat.h"
+
+#include "debug.h"
+#include "message.h"
+
+#define PURPLE_MESSAGE_GET_PRIVATE(obj) \
+	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MESSAGE, PurpleMessagePrivate))
+
+typedef struct {
+	gchar *who;
+	gchar *contents;
+	PurpleMessageFlags flags;
+} PurpleMessagePrivate;
+
+enum
+{
+	PROP_0,
+	PROP_WHO,
+	PROP_CONTENTS,
+	PROP_FLAGS,
+	PROP_LAST
+};
+
+static GObjectClass *parent_class;
+static GParamSpec *properties[PROP_LAST];
+
+/******************************************************************************
+ * API implementation
+ ******************************************************************************/
+
+PurpleMessage *
+purple_message_new(const gchar *who, const gchar *contents,
+	PurpleMessageFlags flags)
+{
+	g_return_val_if_fail(who != NULL, NULL);
+	g_return_val_if_fail(contents != NULL, NULL);
+
+	return g_object_new(PURPLE_TYPE_MESSAGE,
+		"who", who,
+		"contents", contents,
+		"flags", flags,
+		NULL);
+}
+
+/******************************************************************************
+ * Object stuff
+ ******************************************************************************/
+
+static void
+purple_message_finalize(GObject *obj)
+{
+	PurpleMessage *message = PURPLE_MESSAGE(obj);
+	PurpleMessagePrivate *priv = PURPLE_MESSAGE_GET_PRIVATE(message);
+
+	g_free(priv->who);
+	g_free(priv->contents);
+
+	G_OBJECT_CLASS(parent_class)->finalize(obj);
+}
+
+static void
+purple_message_get_property(GObject *object, guint par_id, GValue *value,
+	GParamSpec *pspec)
+{
+	PurpleMessage *message = PURPLE_MESSAGE(object);
+	PurpleMessagePrivate *priv = PURPLE_MESSAGE_GET_PRIVATE(message);
+
+	switch (par_id) {
+		case PROP_WHO:
+			g_value_set_string(value, priv->who);
+			break;
+		case PROP_CONTENTS:
+			g_value_set_string(value, priv->contents);
+			break;
+		case PROP_FLAGS:
+			g_value_set_uint(value, priv->flags);
+			break;
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_message_set_property(GObject *object, guint par_id, const GValue *value,
+	GParamSpec *pspec)
+{
+	PurpleMessage *message = PURPLE_MESSAGE(object);
+	PurpleMessagePrivate *priv = PURPLE_MESSAGE_GET_PRIVATE(message);
+
+	switch (par_id) {
+		case PROP_WHO:
+			g_free(priv->who);
+			priv->who = g_strdup(g_value_get_string(value));
+			break;
+		case PROP_CONTENTS:
+			g_free(priv->contents);
+			priv->contents = g_strdup(g_value_get_string(value));
+			break;
+		case PROP_FLAGS:
+			priv->flags = g_value_get_uint(value);
+			break;
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_message_class_init(PurpleMessageClass *klass)
+{
+	GObjectClass *gobj_class = G_OBJECT_CLASS(klass);
+
+	parent_class = g_type_class_peek_parent(klass);
+
+	g_type_class_add_private(klass, sizeof(PurpleMessagePrivate));
+
+	gobj_class->finalize = purple_message_finalize;
+	gobj_class->get_property = purple_message_get_property;
+	gobj_class->set_property = purple_message_set_property;
+
+	properties[PROP_WHO] = g_param_spec_string("who",
+		"Author", "The nick of the person, who sent the message",
+		NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+	properties[PROP_CONTENTS] = g_param_spec_string("contents",
+		"Contents", "The message text",
+		NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+	/* XXX: it should be spec_enum, but PurpleMessageFlags isn't
+	 * gobjectified (yet) */
+	properties[PROP_FLAGS] = g_param_spec_uint("flags",
+		"Flags", "Bitwise set of #PurpleMessageFlags flags",
+		0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+	g_object_class_install_properties(gobj_class, PROP_LAST, properties);
+}
+
+GType
+purple_message_get_type(void)
+{
+	static GType type = 0;
+
+	if (G_UNLIKELY(type == 0)) {
+		static const GTypeInfo info = {
+			.class_size = sizeof(PurpleMessageClass),
+			.class_init = (GClassInitFunc)purple_message_class_init,
+			.instance_size = sizeof(PurpleMessage)
+		};
+
+		type = g_type_register_static(G_TYPE_OBJECT,
+			"PurpleMessage", &info, 0);
+	}
+
+	return type;
+}
diff --git a/libpurple/message.h b/libpurple/message.h
new file mode 100644
--- /dev/null
+++ b/libpurple/message.h
@@ -0,0 +1,91 @@
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * 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
+ */
+
+#ifndef _PURPLE_MESSAGE_H_
+#define _PURPLE_MESSAGE_H_
+/**
+ * SECTION:message
+ * @include:message.h
+ * @section_id: libpurple-message
+ * @short_description: serializable messages
+ * @title: Message model
+ *
+ * #PurpleMessage object collects data about a certain (incoming or outgoing) message.
+ * It (TODO: will be) serializable, so it can be stored in log and retrieved
+ * with any metadata.
+ */
+
+#include <glib-object.h>
+
+typedef struct _PurpleMessage PurpleMessage;
+typedef struct _PurpleMessageClass PurpleMessageClass;
+
+#define PURPLE_TYPE_MESSAGE            (purple_message_get_type())
+#define PURPLE_MESSAGE(smiley)         (G_TYPE_CHECK_INSTANCE_CAST((smiley), PURPLE_TYPE_MESSAGE, PurpleMessage))
+#define PURPLE_MESSAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_MESSAGE, PurpleMessageClass))
+#define PURPLE_IS_MESSAGE(smiley)      (G_TYPE_CHECK_INSTANCE_TYPE((smiley), PURPLE_TYPE_MESSAGE))
+#define PURPLE_IS_MESSAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_MESSAGE))
+#define PURPLE_MESSAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_MESSAGE, PurpleMessageClass))
+
+/**
+ * PurpleMessage:
+ *
+ * An message data container.
+ */
+struct _PurpleMessage
+{
+	/*< private >*/
+	GObject parent;
+};
+
+/**
+ * PurpleMessageClass:
+ *
+ * Base class for #PurpleMessage objects.
+ */
+struct _PurpleMessageClass
+{
+	/*< private >*/
+	GObjectClass parent_class;
+
+	void (*purple_reserved1)(void);
+	void (*purple_reserved2)(void);
+	void (*purple_reserved3)(void);
+	void (*purple_reserved4)(void);
+};
+
+G_BEGIN_DECLS
+
+/**
+ * purple_message_get_type:
+ *
+ * Returns: the #GType for a message.
+ */
+GType
+purple_message_get_type(void);
+
+PurpleMessage *
+purple_message_new(const gchar *who, const gchar *contents,
+	PurpleMessageFlags flags);
+
+G_END_DECLS
+
+#endif /* _PURPLE_MESSAGE_H_ */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.