/soc/2015/igor.gajowiak/chatlog: 0a6e7f41b611: Add an initial ch...

Igor Gajowiak <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 0a6e7f41b6115553a6fc4efe2806dd9f7b4f455a
Author:	 Igor Gajowiak <[email protected]>
Date:	 2015-06-21 22:29 +0200
Branch:	 default
URL: https://hg.pidgin.im/soc/2015/igor.gajowiak/chatlog/rev/0a6e7f41b611

Description:

Add an initial chat log interface.

diffstat:

 libpurple/Makefile.am  |    2 +
 libpurple/genericlog.c |  197 +++++++++++++++++++++++++++++++++++++++++++++++++
 libpurple/genericlog.h |  111 +++++++++++++++++++++++++++
 3 files changed, 310 insertions(+), 0 deletions(-)

diffs (truncated from 337 to 300 lines):

diff --git a/libpurple/Makefile.am b/libpurple/Makefile.am
--- a/libpurple/Makefile.am
+++ b/libpurple/Makefile.am
@@ -72,6 +72,7 @@ purple_coresources = \
 	image-store.c \
 	keyring.c \
 	log.c \
+	genericlog.c \
 	media/backend-fs2.c \
 	media/backend-iface.c \
 	media/candidate.c \
@@ -158,6 +159,7 @@ purple_coreheaders = \
 	image-store.h \
 	keyring.h \
 	log.h \
+	genericlog.h \
 	media.h \
 	mediamanager.h \
 	memorypool.h \
diff --git a/libpurple/genericlog.c b/libpurple/genericlog.c
new file mode 100644
--- /dev/null
+++ b/libpurple/genericlog.c
@@ -0,0 +1,197 @@
+/* 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 "genericlog.h"
+
+#define PURPLE_GENERICLOG_GET_PRIVATE(obj) \
+	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_GENERICLOG, PurpleGenericLogPrivate))
+
+typedef struct
+{
+	gchar *id;
+	gchar *name;
+} PurpleGenericLogPrivate;
+
+enum
+{
+	PROP_0,
+	PROP_ID,
+	PROP_NAME,
+	PROP_LAST
+};
+
+static GObjectClass *parent_class;
+static GParamSpec *properties[PROP_LAST];
+
+/**************************************************************************/
+/* API implementation
+/**************************************************************************/
+
+
+
+/**************************************************************************/
+/* Error Codes
+/**************************************************************************/
+
+GQuark purple_genericlog_error_domain(void)
+{
+	return g_quark_from_static_string("libpurple generic log");
+}
+
+/**************************************************************************/
+/* GObject stuff
+/**************************************************************************/
+
+static void
+purple_genericlog_instance_init(GTypeInstance *instance, gpointer klass)
+{
+}
+
+static void
+purple_genericlog_finalize(GObject *obj)
+{
+	PurpleGenericLog *log = PURPLE_GENERICLOG(obj);
+	PurpleGenericLogPrivate *priv = PURPLE_GENERICLOG_GET_PRIVATE(log);
+
+	g_free(priv->id);
+	g_free(priv->name);
+
+	G_OBJECT_CLASS(parent_class)->finalize(obj);
+}
+
+static void
+purple_genericlog_get_property(GObject *object, guint par_id, GValue *value,
+    GParamSpec *pspec)
+{
+	PurpleGenericLog *log = PURPLE_GENERICLOG(object);
+	PurpleGenericLogPrivate *priv = PURPLE_GENERICLOG_GET_PRIVATE(log);
+
+	switch (par_id) {
+		case PROP_ID:
+			g_value_set_string(value, priv->id);
+			break;
+		case PROP_NAME:
+			g_value_set_string(value, priv->name);
+			break;
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_genericlog_set_property(GObject *object, guint par_id, const GValue *value,
+    GParamSpec *pspec)
+{
+	PurpleGenericLog *log = PURPLE_GENERICLOG(object);
+	PurpleGenericLogPrivate *priv = PURPLE_GENERICLOG_GET_PRIVATE(log);
+
+	switch (par_id) {
+		case PROP_ID:
+			g_free(priv->id);
+			priv->id = g_strdup(g_value_get_string(value));
+			break;
+		case PROP_NAME:
+			g_free(priv->name);
+			priv->name = g_strdup(g_value_get_string(value));
+			break;
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_genericlog_class_init(PurpleGenericLogClass *klass)
+{
+	/*
+	 * Implemented by derived types
+	 */
+	klass->log_im = NULL;
+	klass->mark_as_read = NULL;
+	klass->get_conversations = NULL;
+	klass->get_messages = NULL;
+
+	klass->reserved1 = NULL;
+	klass->reserved2 = NULL;
+	klass->reserved3 = NULL;
+	klass->reserved4 = NULL;
+
+	GObjectClass *gobj_class = G_OBJECT_CLASS(klass);
+
+	parent_class = g_type_class_peek_parent(klass);
+
+	g_type_class_add_private(klass, sizeof(PurpleGenericLogPrivate));
+
+	gobj_class->finalize = purple_genericlog_finalize;
+	gobj_class->get_property = purple_genericlog_get_property;
+	gobj_class->set_property = purple_genericlog_set_property;
+
+	properties[PROP_ID] = g_param_spec_string("id",
+		"ID", "The ID of the log.",
+		NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+	properties[PROP_NAME] = g_param_spec_string("name",
+		"Name", "A user friendly log name.",
+		NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+	g_object_class_install_properties(gobj_class, PROP_LAST, properties);
+}
+
+GType purple_genericlog_get_type(void)
+{
+	static GType type = 0;
+	if (G_UNLIKELY(type == 0)) {
+
+		static const GTypeInfo info = {
+			.class_size = sizeof(PurpleGenericLogClass),
+			.class_init = (GClassInitFunc)purple_genericlog_class_init,
+			.instance_size = sizeof(PurpleMessage),
+			.instance_init = purple_genericlog_instance_init,
+		};
+
+		type = g_type_register_static(G_TYPE_OBJECT, "PurpleGenericLog", &info, 0);
+	}
+
+	return type;
+}
+
+/**************************************************************************/
+/* Log Subsystem
+/**************************************************************************/
+
+void
+purple_logng_init(void)
+{
+	// TODO: implement this
+}
+
+void
+purple_logng_uninit(void)
+{
+	// TODO: implement this
+}
+
+void *
+purple_logng_get_handle(void)
+{
+	static int handle;
+	return &handle;
+}
diff --git a/libpurple/genericlog.h b/libpurple/genericlog.h
new file mode 100644
--- /dev/null
+++ b/libpurple/genericlog.h
@@ -0,0 +1,111 @@
+/* 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_GENERICLOG_H_
+#define _PURPLE_GENERICLOG_H_
+
+#include <stddef.h>
+#include <time.h>
+
+#include <glib-object.h>
+
+#include "account.h"
+#include "conversation.h"
+#include "message.h"
+
+#define PURPLE_TYPE_GENERICLOG              (purple_genericlog_get_type())
+#define PURPLE_GENERICLOG(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), PURPLE_TYPE_GENERICLOG, PurpleGenericLog))
+#define PURPLE_IS_GENERICLOG(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PURPLE_TYPE_GENERICLOG))
+#define PURPLE_GENERICLOG_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PURPLE_TYPE_GENERICLOG, PurpleGenericLogClass))
+#define PURPLE_IS_GENERICLOG_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PURPLE_TYPE_GENERICLOG))
+#define PURPLE_GENERICLOG_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PURPLE_TYPE_GENERICLOG, PurpleGenericLogClass))
+
+typedef struct _PurpleGenericLog        PurpleGenericLog;
+typedef struct _PurpleGenericLogClass   PurpleGenericLogClass;
+
+struct _PurpleGenericLog
+{
+	/*< private >*/
+	GObject parent_instance;
+};
+
+struct _PurpleGenericLogClass
+{
+	/*< private >*/
+	GObjectClass parent_class;
+
+	GError* (*log_im) (PurpleAccount *account,
+	    PurpleConversation* conv, PurpleMessage *message);
+
+	GError* (*mark_as_read)(PurpleMessage *message);
+
+	GError* (*get_conversations)(PurpleAccount *account,
+	    GList **result, time_t timestamp, size_t limit);
+
+	GError* (*get_messages)(PurpleAccount *account, PurpleConversation* conv,
+		GList **result, time_t timestamp, size_t limit);
+
+	// TODO: Other APIs?
+
+	void (*reserved1)(void);
+	void (*reserved2)(void);
+	void (*reserved3)(void);
+	void (*reserved4)(void);
+};
+
+/**************************************************************************/

_______________________________________________
Commits mailing list
[email protected]
https://pidgin.im/cgi-bin/mailman/listinfo/commits
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.