/soc/2015/igor.gajowiak/chatlog: 602f8dcbe3ab: Marking messages ...

Igor Gajowiak <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 602f8dcbe3aba290b6c6b08d5a9cd448781ee312
Author:	 Igor Gajowiak <[email protected]>
Date:	 2015-07-08 10:09 +0200
Branch:	 default
URL: https://hg.pidgin.im/soc/2015/igor.gajowiak/chatlog/rev/602f8dcbe3ab

Description:

Marking messages as read.

diffstat:

 libpurple/plugins/log/logsqlite.c |  43 +++++++++++++++++++++++++++++---------
 1 files changed, 33 insertions(+), 10 deletions(-)

diffs (100 lines):

diff --git a/libpurple/plugins/log/logsqlite.c b/libpurple/plugins/log/logsqlite.c
--- a/libpurple/plugins/log/logsqlite.c
+++ b/libpurple/plugins/log/logsqlite.c
@@ -72,6 +72,7 @@ sqlite_log_create_tables()
 		"Protocol TEXT NOT NULL); "
 
 		"CREATE TABLE Messages("
+		"Id INTEGER PRIMARY KEY AUTOINCREMENT,"
 		"Author TEXT,"
 		"AuthorAlias TEXT,"
 		"Recipient TEXT NOT NULL,"
@@ -82,7 +83,7 @@ sqlite_log_create_tables()
 		"Read BOOLEAN DEFAULT 0,"
 		"FOREIGN KEY(AccountId) REFERENCES Accounts(Id)); "
 
-		"CREATE INDEX SeenIndex ON Messages (Read); "
+		"CREATE INDEX ReadIndex ON Messages (Read); "
 
 		"CREATE TRIGGER AccountDeleted AFTER DELETE ON Accounts "
 		"BEGIN "
@@ -197,6 +198,7 @@ sqlite_log_log_im(PurpleAccount *account
 
 	sql_statement = g_strdup_printf(
 		"INSERT INTO Messages "
+		"(Author, AuthorAlias, Recipient, Contents, MsgTime, Flags, AccountId, Read) "
 		"VALUES(\'%s\', \'%s\', \'%s\', \'%s\', %lu, %d, %d, %d);",
 		purple_message_get_author(message),
 		purple_message_get_author_alias(message),
@@ -214,6 +216,10 @@ sqlite_log_log_im(PurpleAccount *account
 			"SQLITE database msg insert sql statement fail");
 	}
 
+	/* here we could have a problem because of conversion from int64 to int(32bit) */
+	sqlite3_int64 db_msg_id = sqlite3_last_insert_rowid(sqlite_log_db);
+	g_object_set_data(G_OBJECT(message), "sqlitelog-msg-id", GINT_TO_POINTER(db_msg_id));
+
 	g_free(sql_statement);
 	return NULL;
 }
@@ -221,7 +227,22 @@ sqlite_log_log_im(PurpleAccount *account
 static GError*
 sqlite_log_mark_as_read(PurpleMessage *message)
 {
-	// TODO: implement this
+	gpointer id = g_object_get_data(G_OBJECT(message), "sqlitelog-msg-id");
+
+	if(id == NULL)
+		return g_error_new(purple_genericlog_error_domain(),
+			PURPLE_GENERICLOG_ERROR_BACKENDFAIL,
+			"SQLITE uninitialized dynamic property (sqlitelog-msg-id)");
+
+	char *sql_statement = g_strdup_printf("UPDATE Messages SET Read = 0 "
+										"WHERE Id = %d;", GPOINTER_TO_INT(id));
+
+	if(sqlite3_exec(sqlite_log_db, sql_statement, NULL, NULL, NULL) != SQLITE_OK) {
+		g_free(sql_statement);
+		return g_error_new(purple_genericlog_error_domain(),
+			PURPLE_GENERICLOG_ERROR_BACKENDFAIL,
+			"SQLITE database marking as read failed");
+	}
 	return NULL;
 }
 
@@ -230,17 +251,19 @@ sqlite_log_get_unread_cb(void *data, int
 {
 	GList **list = (GList**) data;
 
-	PurpleMessage *msg = purple_message_new_incoming(argv[0], argv[1],
-		atoi(argv[2]), strtoull(argv[3], NULL, 10));
+	PurpleMessage *msg = purple_message_new_incoming(argv[1], argv[2],
+		atoi(argv[3]), strtoull(argv[4], NULL, 10));
 
-	if (strcmp(argv[4], "(null)") != 0)
-		purple_message_set_author_alias(msg, argv[4]);
+	if (strcmp(argv[5], "(null)") != 0)
+		purple_message_set_author_alias(msg, argv[5]);
 
 	purple_message_set_flags(msg, purple_message_get_flags(msg) |
 		PURPLE_MESSAGE_NO_LOG);
 
-	// Here we can use prepend because we ordered SQLite to
-	// order elements in a descending order
+	g_object_set_data(G_OBJECT(msg), "sqlitelog-msg-id", GINT_TO_POINTER(atoi(argv[0])));
+
+	/* Here we can use prepend because we ordered SQLite to
+	 * order elements in a descending order */
 	*list = g_list_prepend(*list, msg);
 	g_object_ref(msg);
 	return 0;
@@ -250,8 +273,8 @@ static GError*
 sqlite_log_get_unread_msgs(PurpleAccount *account, GList **result)
 {
 	char *sql_statement = g_strdup_printf(
-		"SELECT Author, Contents, Flags, MsgTime, AuthorAlias "
-		"FROM Messages JOIN Accounts ON Id = AccountId "
+		"SELECT Messages.Id, Author, Contents, Flags, MsgTime, AuthorAlias "
+		"FROM Messages JOIN Accounts ON Accounts.Id = AccountId "
 		"WHERE Username LIKE \'%s\' AND Read = 0 "
 		"ORDER BY Username, MsgTime desc",
 		purple_account_get_username(account));

_______________________________________________
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.