libpurple/purplesqlitehistoryadapter.c

Thu, 05 Dec 2024 21:31:16 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 05 Dec 2024 21:31:16 -0600
changeset 43100
e6df74d36862
parent 43071
071588186662
child 43140
951c4110ad50
permissions
-rw-r--r--

Change Purple.Message:author to Purple.ConversationMember

This is necessary to show conversation specific nick names and badges in each
message and potentially more.

Testing Done:
* Sent some messages to Echo on the demo protocol plugin.
* Verified that the ircv3 status conversation was working properly.
* Called in the turtles.

Reviewed at https://reviews.imfreedom.org/r/3692/

41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
1 /*
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
2 * Purple - Internet Messaging Library
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
4 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
7 * source distribution.
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
8 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
9 * This library is free software; you can redistribute it and/or modify it
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
10 * under the terms of the GNU General Public License as published by the Free
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
11 * Software Foundation; either version 2 of the License, or (at your option)
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
12 * any later version.
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
13 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
14 * This library is distributed in the hope that it will be useful, but WITHOUT
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
17 * more details.
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
18 *
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
19 * You should have received a copy of the GNU General Public License along with
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42576
diff changeset
20 * this library; if not, see <https://www.gnu.org/licenses/>.
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
21 */
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
22
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
23 #include <glib/gi18n-lib.h>
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
24
41804
36c3c3cd2402 Add some api for handling SQLite3 migrations
Gary Kramlich <grim@reaperworld.com>
parents: 41731
diff changeset
25 #include <sqlite3.h>
36c3c3cd2402 Add some api for handling SQLite3 migrations
Gary Kramlich <grim@reaperworld.com>
parents: 41731
diff changeset
26
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
27 #include "purplesqlitehistoryadapter.h"
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
28
42344
c51d37734155 Rename account.[ch] to purpleaccount.[ch]
Gary Kramlich <grim@reaperworld.com>
parents: 42303
diff changeset
29 #include "purpleaccount.h"
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
30 #include "purpleaccountmanager.h"
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
31 #include "purpleconversationmanager.h"
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
32 #include "purpleconversationmember.h"
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
33 #include "purpleconversationmembers.h"
41804
36c3c3cd2402 Add some api for handling SQLite3 migrations
Gary Kramlich <grim@reaperworld.com>
parents: 41731
diff changeset
34 #include "purplesqlite3.h"
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
35
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
36 struct _PurpleSqliteHistoryAdapter {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
37 PurpleHistoryAdapter parent;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
38
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
39 gchar *filename;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
40 sqlite3 *db;
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
41 };
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
42
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
43 enum {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
44 PROP_0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
45 PROP_FILENAME,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
46 N_PROPERTIES,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
47 };
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
48 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
49
42576
ab1ca778ddb2 Make sure all of the final types in libpurple are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42540
diff changeset
50 G_DEFINE_FINAL_TYPE(PurpleSqliteHistoryAdapter, purple_sqlite_history_adapter,
ab1ca778ddb2 Make sure all of the final types in libpurple are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42540
diff changeset
51 PURPLE_TYPE_HISTORY_ADAPTER)
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
52
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
53 /******************************************************************************
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
54 * Helpers
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
55 *****************************************************************************/
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
56 static void
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
57 purple_sqlite_history_adapter_set_filename(PurpleSqliteHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
58 const gchar *filename)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
59 {
42767
8cf1d11b59c1 Use g_set_str everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42756
diff changeset
60 if(g_set_str(&adapter->filename, filename)) {
8cf1d11b59c1 Use g_set_str everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42756
diff changeset
61 g_object_notify_by_pspec(G_OBJECT(adapter), properties[PROP_FILENAME]);
8cf1d11b59c1 Use g_set_str everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42756
diff changeset
62 }
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
63 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
64
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
65 static gboolean
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
66 purple_sqlite_history_adapter_run_migrations(PurpleSqliteHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
67 GError **error)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
68 {
41804
36c3c3cd2402 Add some api for handling SQLite3 migrations
Gary Kramlich <grim@reaperworld.com>
parents: 41731
diff changeset
69 const char *path = "/im/pidgin/libpurple/sqlitehistoryadapter";
36c3c3cd2402 Add some api for handling SQLite3 migrations
Gary Kramlich <grim@reaperworld.com>
parents: 41731
diff changeset
70 const char *migrations[] = {
36c3c3cd2402 Add some api for handling SQLite3 migrations
Gary Kramlich <grim@reaperworld.com>
parents: 41731
diff changeset
71 "01-schema.sql",
36c3c3cd2402 Add some api for handling SQLite3 migrations
Gary Kramlich <grim@reaperworld.com>
parents: 41731
diff changeset
72 NULL
36c3c3cd2402 Add some api for handling SQLite3 migrations
Gary Kramlich <grim@reaperworld.com>
parents: 41731
diff changeset
73 };
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
74
41804
36c3c3cd2402 Add some api for handling SQLite3 migrations
Gary Kramlich <grim@reaperworld.com>
parents: 41731
diff changeset
75 return purple_sqlite3_run_migrations_from_resources(adapter->db, path,
36c3c3cd2402 Add some api for handling SQLite3 migrations
Gary Kramlich <grim@reaperworld.com>
parents: 41731
diff changeset
76 migrations, error);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
77 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
78
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
79 static sqlite3_stmt *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
80 purple_sqlite_history_adapter_build_query(PurpleSqliteHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
81 const gchar * search_query,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
82 gboolean remove,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
83 GError **error)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
84 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
85 gchar **split = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
86 gint i = 0;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
87 GList *ins = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
88 GList *froms = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
89 GList *keywords = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
90 GString *query = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
91 GList *iter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
92 gboolean first = FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
93 sqlite3_stmt *prepared_statement = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
94 gint index = 1;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
95 gint query_items = 0;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
96
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
97 split = g_strsplit(search_query, " ", -1);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
98 for(i = 0; split[i] != NULL; i++) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
99 if(g_str_has_prefix(split[i], "in:")) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
100 if(split[i][3] == '\0') {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
101 continue;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
102 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
103 ins = g_list_prepend(ins, g_strdup(split[i]+3));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
104 query_items++;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
105 } else if(g_str_has_prefix(split[i], "from:")) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
106 if(split[i][5] == '\0') {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
107 continue;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
108 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
109 froms = g_list_prepend(froms, g_strdup(split[i]+5));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
110 query_items++;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
111 } else {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
112 if(split[i][0] == '\0') {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
113 continue;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
114 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
115 keywords = g_list_prepend(keywords,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
116 g_strdup_printf("%%%s%%", split[i]));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
117 query_items++;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
118 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
119 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
120
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
121 g_clear_pointer(&split, g_strfreev);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
122
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
123 if(remove) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
124 if(query_items != 0) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
125 query = g_string_new("DELETE FROM message_log WHERE TRUE\n");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
126 } else {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
127 g_set_error(error, PURPLE_HISTORY_ADAPTER_DOMAIN, 0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
128 "Attempting to remove messages without "
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
129 "query parameters.");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
130
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
131 return NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
132 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
133 } else {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
134 query = g_string_new("SELECT "
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
135 "account, conversation_id, message_id, author, "
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
136 "author_name_color, author_alias, content, "
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
137 "client_timestamp "
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
138 "FROM message_log WHERE TRUE\n");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
139 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
140
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
141 if(ins != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
142 first = TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
143 g_string_append(query, "AND (conversation_id IN (");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
144 for(iter = ins; iter != NULL; iter = iter->next) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
145 if(!first) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
146 g_string_append(query, ", ");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
147 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
148 first = FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
149 g_string_append(query, "?");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
150 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
151 g_string_append(query, "))");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
152 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
153
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
154 if(froms != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
155 first = TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
156 g_string_append(query, "AND (author IN (");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
157 for(iter = froms; iter != NULL; iter = iter->next) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
158 if(!first) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
159 g_string_append(query, ", ");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
160 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
161 first = FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
162 g_string_append(query, "?");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
163 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
164 g_string_append(query, "))");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
165 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
166
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
167 if(keywords != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
168 first = TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
169 g_string_append(query, "AND (");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
170 for(iter = keywords; iter != NULL; iter = iter->next) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
171 if(!first) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
172 g_string_append(query, " OR ");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
173 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
174 first = FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
175 g_string_append(query, " content LIKE ? ");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
176 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
177 g_string_append(query, ")");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
178 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
179 g_string_append(query, ";");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
180
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
181 sqlite3_prepare_v2(adapter->db, query->str, -1, &prepared_statement, NULL);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
182
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
183 g_string_free(query, TRUE);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
184
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
185 if(prepared_statement == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
186 g_set_error(error, PURPLE_HISTORY_ADAPTER_DOMAIN, 0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
187 "Error creating the prepared statement: %s",
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
188 sqlite3_errmsg(adapter->db));
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
189
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
190 g_list_free_full(ins, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
191 g_list_free_full(froms, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
192 g_list_free_full(keywords, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
193
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
194 return NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
195 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
196
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
197 while(ins != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
198 sqlite3_bind_text(prepared_statement, index++,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
199 (const char *)ins->data, -1, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
200 ins = g_list_delete_link(ins, ins);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
201 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
202
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
203 while(froms != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
204 sqlite3_bind_text(prepared_statement, index++,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
205 (const char *)froms->data, -1, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
206 froms = g_list_delete_link(froms, froms);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
207 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
208
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
209 while(keywords != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
210 sqlite3_bind_text(prepared_statement, index++,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
211 (const char *)keywords->data, -1, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
212 keywords = g_list_delete_link(keywords, keywords);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
213 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
214
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
215 return prepared_statement;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
216 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
217
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
218 /******************************************************************************
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
219 * PurpleHistoryAdapter Implementation
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
220 *****************************************************************************/
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
221 static gboolean
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
222 purple_sqlite_history_adapter_activate(PurpleHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
223 GError **error)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
224 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
225 PurpleSqliteHistoryAdapter *sqlite_adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
226 gint rc = 0;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
227
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
228 sqlite_adapter = PURPLE_SQLITE_HISTORY_ADAPTER(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
229
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
230 if(sqlite_adapter->db != NULL) {
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
231 g_set_error_literal(error, PURPLE_HISTORY_ADAPTER_DOMAIN, 0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
232 _("Adapter has already been activated"));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
233
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
234 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
235 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
236
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
237 if(sqlite_adapter->filename == NULL) {
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
238 g_set_error_literal(error, PURPLE_HISTORY_ADAPTER_DOMAIN, 0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
239 _("No filename specified"));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
240
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
241 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
242 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
243
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
244 rc = sqlite3_open(sqlite_adapter->filename, &sqlite_adapter->db);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
245 if(rc != SQLITE_OK) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
246 g_set_error(error, PURPLE_HISTORY_ADAPTER_DOMAIN, 0,
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
247 _("Error opening database in purplesqlitehistoryadapter for file %s"),
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
248 sqlite_adapter->filename);
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
249 g_clear_pointer(&sqlite_adapter->db, sqlite3_close);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
250
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
251 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
252 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
253
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
254 if(!purple_sqlite_history_adapter_run_migrations(sqlite_adapter, error)) {
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
255 g_clear_pointer(&sqlite_adapter->db, sqlite3_close);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
256
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
257 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
258 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
259
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
260 return TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
261 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
262
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
263 static gboolean
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
264 purple_sqlite_history_adapter_deactivate(PurpleHistoryAdapter *adapter,
41960
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41804
diff changeset
265 G_GNUC_UNUSED GError **error)
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
266 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
267 PurpleSqliteHistoryAdapter *sqlite_adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
268
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
269 sqlite_adapter = PURPLE_SQLITE_HISTORY_ADAPTER(adapter);
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
270 g_clear_pointer(&sqlite_adapter->db, sqlite3_close);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
271
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
272 return TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
273 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
274
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
275 static GList*
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
276 purple_sqlite_history_adapter_query(PurpleHistoryAdapter *adapter,
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
277 const char *query, GError **error)
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
278 {
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
279 PurpleAccountManager *account_manager = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
280 PurpleConversationManager *conversation_manager = NULL;
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
281 PurpleSqliteHistoryAdapter *sqlite_adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
282 sqlite3_stmt *prepared_statement = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
283 GList *results = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
284
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
285 sqlite_adapter = PURPLE_SQLITE_HISTORY_ADAPTER(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
286
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
287 if(sqlite_adapter->db == NULL) {
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
288 g_set_error_literal(error, PURPLE_HISTORY_ADAPTER_DOMAIN, 0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
289 _("Adapter has not been activated"));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
290
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
291 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
292 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
293
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
294 prepared_statement = purple_sqlite_history_adapter_build_query(sqlite_adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
295 query,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
296 FALSE,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
297 error);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
298
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
299 if(prepared_statement == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
300 return NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
301 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
302
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
303 account_manager = purple_account_manager_get_default();
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
304 conversation_manager = purple_conversation_manager_get_default();
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
305
41115
4d22ff23a3b7 Fix a dead assignment that scanbuild found
Gary Kramlich <grim@reaperworld.com>
parents: 41090
diff changeset
306 while(sqlite3_step(prepared_statement) == SQLITE_ROW) {
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
307 PurpleAccount *account = NULL;
42899
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
308 PurpleContactInfo *info = NULL;
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
309 PurpleConversation *conversation = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
310 PurpleConversationMember *member = NULL;
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
311 PurpleMessage *message = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
312 GDateTime *g_date_time = NULL;
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
313 const char *account_id = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
314 const char *author = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
315 const char *author_name_color = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
316 const char *author_alias = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
317 const char *content = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
318 const char *conversation_id = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
319 const char *message_id = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
320 const char *timestamp = NULL;
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
321
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
322 account_id = (const char *)sqlite3_column_text(prepared_statement, 0);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
323 conversation_id = (const char *)sqlite3_column_text(prepared_statement, 1);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
324 message_id = (const char *)sqlite3_column_text(prepared_statement, 2);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
325 author = (const char *)sqlite3_column_text(prepared_statement, 3);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
326 author_name_color = (const char *)sqlite3_column_text(prepared_statement, 4);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
327 author_alias = (const char *)sqlite3_column_text(prepared_statement, 5);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
328 content = (const char *)sqlite3_column_text(prepared_statement, 6);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
329 timestamp = (const char *)sqlite3_column_text(prepared_statement, 7);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
330 g_date_time = g_date_time_new_from_iso8601(timestamp, NULL);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
331
42899
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
332 /* This is gross but necessary until we finish rethinking history.
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
333 * -- gk 2024-08-21
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
334 * -- gk 2024-12-02
42899
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
335 */
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
336
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
337 account = purple_account_manager_find_by_id(account_manager,
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
338 account_id);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
339 if(!PURPLE_IS_ACCOUNT(account)) {
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
340 account = g_object_new(
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
341 PURPLE_TYPE_ACCOUNT,
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
342 "id", account_id,
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
343 NULL);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
344 purple_account_manager_add(account_manager, account);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
345 g_object_unref(account);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
346 }
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
347
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
348 conversation = purple_conversation_manager_find_with_id(conversation_manager,
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
349 account,
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
350 conversation_id);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
351 if(!PURPLE_IS_CONVERSATION(conversation)) {
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
352 conversation = g_object_new(
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
353 PURPLE_TYPE_CONVERSATION,
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
354 "id", conversation_id,
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
355 NULL);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
356 purple_conversation_manager_add(conversation_manager, conversation);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
357
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
358 /* The manager holds a reference which we will use for now. */
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
359 g_object_unref(conversation);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
360 }
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
361
42899
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
362 info = purple_contact_info_new(author);
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
363 purple_contact_info_set_alias(info, author_alias);
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
364
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
365 member = purple_conversation_find_or_add_member(conversation, info,
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
366 FALSE, NULL);
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
367
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
368 message = purple_message_new(member, content);
42899
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
369 purple_message_set_id(message, message_id);
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
370 purple_message_set_author_name_color(message, author_name_color);
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
371 purple_message_set_timestamp(message, g_date_time);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
372
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
373 results = g_list_prepend(results, message);
42899
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
374
cd04795d0bbe Update libpurple to use Purple.Message.new
Gary Kramlich <grim@reaperworld.com>
parents: 42826
diff changeset
375 g_clear_object(&info);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
376 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
377
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
378 results = g_list_reverse(results);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
379
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
380 sqlite3_finalize(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
381
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
382 return results;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
383 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
384
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
385 static gboolean
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
386 purple_sqlite_history_adapter_remove(PurpleHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
387 const gchar *query, GError **error)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
388 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
389 PurpleSqliteHistoryAdapter *sqlite_adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
390 sqlite3_stmt * prepared_statement = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
391 gint result = 0;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
392
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
393 sqlite_adapter = PURPLE_SQLITE_HISTORY_ADAPTER(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
394
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
395 if(sqlite_adapter->db == NULL) {
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
396 g_set_error_literal(error, PURPLE_HISTORY_ADAPTER_DOMAIN, 0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
397 _("Adapter has not been activated"));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
398
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
399 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
400 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
401
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
402 prepared_statement = purple_sqlite_history_adapter_build_query(sqlite_adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
403 query,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
404 TRUE,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
405 error);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
406
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
407 if(prepared_statement == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
408 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
409 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
410
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
411 result = sqlite3_step(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
412
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
413 if(result != SQLITE_DONE) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
414 g_set_error(error, PURPLE_HISTORY_ADAPTER_DOMAIN, 0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
415 "Error removing from the database: %s",
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
416 sqlite3_errmsg(sqlite_adapter->db));
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
417
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
418 sqlite3_finalize(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
419
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
420 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
421 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
422
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
423 sqlite3_finalize(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
424
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
425 return TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
426 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
427
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
428 static gboolean
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
429 purple_sqlite_history_adapter_write(PurpleHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
430 PurpleConversation *conversation,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
431 PurpleMessage *message, GError **error)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
432 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
433 PurpleAccount *account = NULL;
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
434 PurpleContactInfo *info = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
435 PurpleConversationMember *author = NULL;
43061
36afd2f0a5ef Update libpurple for the deprecation of Purple.Account.get_protocol_name
Gary Kramlich <grim@reaperworld.com>
parents: 42997
diff changeset
436 PurpleProtocol *protocol = NULL;
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
437 PurpleSqliteHistoryAdapter *sqlite_adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
438 sqlite3_stmt *prepared_statement = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
439 gchar *timestamp = NULL;
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
440 const char * message_id = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
441 const char *script = NULL;
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
442 int result = 0;
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
443
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
444 script = "INSERT INTO message_log(protocol, account, conversation_id, "
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
445 "message_id, author, author_name_color, author_alias, "
42756
60e003f0c3fc Remove the recipient property from PurpleMessage
Gary Kramlich <grim@reaperworld.com>
parents: 42616
diff changeset
446 "content, client_timestamp) "
60e003f0c3fc Remove the recipient property from PurpleMessage
Gary Kramlich <grim@reaperworld.com>
parents: 42616
diff changeset
447 "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)";
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
448
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
449 sqlite_adapter = PURPLE_SQLITE_HISTORY_ADAPTER(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
450
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
451 if(sqlite_adapter->db == NULL) {
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
452 g_set_error_literal(error, PURPLE_HISTORY_ADAPTER_DOMAIN, 0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
453 _("Adapter has not been activated"));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
454
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
455 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
456 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
457
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
458 sqlite3_prepare_v2(sqlite_adapter->db, script, -1, &prepared_statement, NULL);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
459
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
460 if(prepared_statement == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
461 g_set_error(error, PURPLE_HISTORY_ADAPTER_DOMAIN, 0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
462 "Error creating the prepared statement: %s",
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
463 sqlite3_errmsg(sqlite_adapter->db));
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
464 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
465 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
466
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
467 account = purple_conversation_get_account(conversation);
43061
36afd2f0a5ef Update libpurple for the deprecation of Purple.Account.get_protocol_name
Gary Kramlich <grim@reaperworld.com>
parents: 42997
diff changeset
468 protocol = purple_account_get_protocol(account);
42907
147ae29ea508 Update libpurple for the Purple.Message deprecations
Gary Kramlich <grim@reaperworld.com>
parents: 42899
diff changeset
469 author = purple_message_get_author(message);
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
470 info = purple_conversation_member_get_contact_info(author);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
471
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
472 sqlite3_bind_text(prepared_statement,
43061
36afd2f0a5ef Update libpurple for the deprecation of Purple.Account.get_protocol_name
Gary Kramlich <grim@reaperworld.com>
parents: 42997
diff changeset
473 1, purple_protocol_get_name(protocol), -1,
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
474 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
475 sqlite3_bind_text(prepared_statement,
42805
3e77e81168a5 Update libpurple to use get id and username directly on PurpleAccount
Gary Kramlich <grim@reaperworld.com>
parents: 42767
diff changeset
476 2, purple_account_get_username(account), -1,
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
477 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
478 sqlite3_bind_text(prepared_statement,
42806
3fdd5c82e57c Use global conversation id for SQLite history adapter
Markus Fischer <ivanhoe@fiscari.de>
parents: 42805
diff changeset
479 3, purple_conversation_get_global_id(conversation), -1,
3fdd5c82e57c Use global conversation id for SQLite history adapter
Markus Fischer <ivanhoe@fiscari.de>
parents: 42805
diff changeset
480 g_free);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
481 message_id = purple_message_get_id(message);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
482 if(message_id != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
483 sqlite3_bind_text(prepared_statement, 4, message_id, -1,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
484 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
485 } else {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
486 sqlite3_bind_text(prepared_statement, 4, g_uuid_string_random(), -1,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
487 g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
488 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
489 sqlite3_bind_text(prepared_statement,
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
490 5, purple_contact_info_get_id(info), -1,
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
491 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
492 sqlite3_bind_text(prepared_statement,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
493 6, purple_message_get_author_name_color(message), -1,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
494 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
495 sqlite3_bind_text(prepared_statement,
43100
e6df74d36862 Change Purple.Message:author to Purple.ConversationMember
Gary Kramlich <grim@reaperworld.com>
parents: 43071
diff changeset
496 7, purple_conversation_member_get_name_for_display(author), -1,
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
497 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
498 sqlite3_bind_text(prepared_statement,
42756
60e003f0c3fc Remove the recipient property from PurpleMessage
Gary Kramlich <grim@reaperworld.com>
parents: 42616
diff changeset
499 8, purple_message_get_contents(message), -1,
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
500 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
501 timestamp = g_date_time_format_iso8601(purple_message_get_timestamp(message));
42756
60e003f0c3fc Remove the recipient property from PurpleMessage
Gary Kramlich <grim@reaperworld.com>
parents: 42616
diff changeset
502 sqlite3_bind_text(prepared_statement, 9, timestamp, -1, g_free);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
503
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
504 result = sqlite3_step(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
505
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
506 if(result != SQLITE_DONE) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
507 g_set_error(error, PURPLE_HISTORY_ADAPTER_DOMAIN, 0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
508 "Error writing to the database: %s",
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
509 sqlite3_errmsg(sqlite_adapter->db));
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
510
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
511 sqlite3_finalize(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
512
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
513 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
514 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
515
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
516 sqlite3_finalize(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
517
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
518 return TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
519 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
520
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
521 /******************************************************************************
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
522 * GObject Implementation
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
523 *****************************************************************************/
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
524 static void
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
525 purple_sqlite_history_adapter_get_property(GObject *obj, guint param_id,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
526 GValue *value, GParamSpec *pspec)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
527 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
528 PurpleSqliteHistoryAdapter *adapter = PURPLE_SQLITE_HISTORY_ADAPTER(obj);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
529
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
530 switch(param_id) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
531 case PROP_FILENAME:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
532 g_value_set_string(value,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
533 purple_sqlite_history_adapter_get_filename(adapter));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
534 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
535 default:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
536 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
537 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
538 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
539 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
540
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
541 static void
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
542 purple_sqlite_history_adapter_set_property(GObject *obj, guint param_id,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
543 const GValue *value,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
544 GParamSpec *pspec)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
545 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
546 PurpleSqliteHistoryAdapter *adapter = PURPLE_SQLITE_HISTORY_ADAPTER(obj);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
547
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
548 switch(param_id) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
549 case PROP_FILENAME:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
550 purple_sqlite_history_adapter_set_filename(adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
551 g_value_get_string(value));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
552 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
553 default:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
554 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
555 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
556 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
557 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
558
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
559 static void
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
560 purple_sqlite_history_adapter_finalize(GObject *obj) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
561 PurpleSqliteHistoryAdapter *adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
562
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
563 adapter = PURPLE_SQLITE_HISTORY_ADAPTER(obj);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
564
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
565 g_clear_pointer(&adapter->filename, g_free);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
566
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
567 if(adapter->db != NULL) {
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
568 g_warning("PurpleSqliteHistoryAdapter was finalized before being "
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
569 "deactivated");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
570
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
571 g_clear_pointer(&adapter->db, sqlite3_close);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
572 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
573
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
574 G_OBJECT_CLASS(purple_sqlite_history_adapter_parent_class)->finalize(obj);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
575 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
576
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
577 static void
41960
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41804
diff changeset
578 purple_sqlite_history_adapter_init(G_GNUC_UNUSED PurpleSqliteHistoryAdapter *adapter)
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41804
diff changeset
579 {
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
580 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
581
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
582 static void
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
583 purple_sqlite_history_adapter_class_init(PurpleSqliteHistoryAdapterClass *klass)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
584 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
585 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
586 PurpleHistoryAdapterClass *adapter_class = PURPLE_HISTORY_ADAPTER_CLASS(klass);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
587
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
588 obj_class->get_property = purple_sqlite_history_adapter_get_property;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
589 obj_class->set_property = purple_sqlite_history_adapter_set_property;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
590 obj_class->finalize = purple_sqlite_history_adapter_finalize;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
591
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
592 adapter_class->activate = purple_sqlite_history_adapter_activate;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
593 adapter_class->deactivate = purple_sqlite_history_adapter_deactivate;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
594 adapter_class->query = purple_sqlite_history_adapter_query;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
595 adapter_class->remove = purple_sqlite_history_adapter_remove;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
596 adapter_class->write = purple_sqlite_history_adapter_write;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
597
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
598 /**
42303
52c26807d91a Fix a number of issues with the documentation for properties
Gary Kramlich <grim@reaperworld.com>
parents: 41976
diff changeset
599 * PurpleSqliteHistoryAdapter:filename:
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
600 *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
601 * The filename that the sqlite database will store data to.
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
602 *
42616
a7144db5570a Remove the micro version from since tags for libpurple part 5
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
603 * Since: 3.0
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
604 */
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
605 properties[PROP_FILENAME] = g_param_spec_string(
43071
071588186662 Remove nick and blurb from libpurple properties
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 43061
diff changeset
606 "filename", NULL, NULL,
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
607 NULL,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
608 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
609 );
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
610
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
611 g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
612 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
613
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
614 /******************************************************************************
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
615 * Public API
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
616 *****************************************************************************/
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
617 PurpleHistoryAdapter *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
618 purple_sqlite_history_adapter_new(const gchar *filename) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
619 return g_object_new(
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
620 PURPLE_TYPE_SQLITE_HISTORY_ADAPTER,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
621 "filename", filename,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
622 "id", "sqlite-adapter",
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
623 "name", N_("SQLite Adapter"),
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
624 NULL);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
625 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
626
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
627 const gchar *
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
628 purple_sqlite_history_adapter_get_filename(PurpleSqliteHistoryAdapter *adapter)
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
629 {
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
630 PurpleSqliteHistoryAdapter *sqlite_adapter = NULL;
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
631
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
632 g_return_val_if_fail(PURPLE_IS_SQLITE_HISTORY_ADAPTER(adapter), NULL);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
633
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
634 sqlite_adapter = PURPLE_SQLITE_HISTORY_ADAPTER(adapter);
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
635
41731
e33e939378cb De-privatize PurpleSqliteHistoryAdapter
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41115
diff changeset
636 return sqlite_adapter->filename;
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
637 }

mercurial