libpurple/purplesqlitehistoryadapter.c

Thu, 25 Aug 2022 22:45:58 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Thu, 25 Aug 2022 22:45:58 -0500
branch
gtk4
changeset 41596
2f0fec76cfbc
parent 41115
4d22ff23a3b7
child 41731
e33e939378cb
permissions
-rw-r--r--

Handle delete event in more dialogs (probably all, but can't be too sure.)

Testing Done:
Compile only.

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

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 *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
9 *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
13 * Lesser General Public License for more details.
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
14 *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
16 * License along with this library; if not, see <https://www.gnu.org/licenses/>.
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
17 */
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
18
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
19 #include <glib/gi18n-lib.h>
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
20
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
21 #include "purplesqlitehistoryadapter.h"
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 "account.h"
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
24 #include "purpleprivate.h"
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
25 #include "purpleresources.h"
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
26
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
27 #include <sqlite3.h>
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
28
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
29 struct _PurpleSqliteHistoryAdapter {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
30 PurpleHistoryAdapter parent;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
31 };
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
32
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
33 typedef struct {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
34 gchar *filename;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
35 sqlite3 *db;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
36 } PurpleSqliteHistoryAdapterPrivate;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
37
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
38 enum {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
39 PROP_0,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
40 PROP_FILENAME,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
41 N_PROPERTIES,
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 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
44
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
45 G_DEFINE_TYPE_WITH_PRIVATE(PurpleSqliteHistoryAdapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
46 purple_sqlite_history_adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
47 PURPLE_TYPE_HISTORY_ADAPTER)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
48
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
49 /******************************************************************************
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
50 * Helpers
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
51 *****************************************************************************/
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
52 static void
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
53 purple_sqlite_history_adapter_set_filename(PurpleSqliteHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
54 const gchar *filename)
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 PurpleSqliteHistoryAdapterPrivate *priv = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
57
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
58 priv = purple_sqlite_history_adapter_get_instance_private(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
59
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
60 g_free(priv->filename);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
61 priv->filename = g_strdup(filename);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
62
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
63 g_object_notify_by_pspec(G_OBJECT(adapter), properties[PROP_FILENAME]);
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
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
66 static gboolean
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
67 purple_sqlite_history_adapter_run_migrations(PurpleSqliteHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
68 GError **error)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
69 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
70 GBytes *bytes = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
71 GResource *resource = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
72 PurpleSqliteHistoryAdapterPrivate *priv = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
73 gchar *error_msg = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
74 const gchar *script = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
75
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
76 priv = purple_sqlite_history_adapter_get_instance_private(adapter);
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 resource = purple_get_resource();
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
79
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
80 bytes = g_resource_lookup_data(resource,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
81 "/im/pidgin/libpurple/sqlitehistoryadapter/01-schema.sql",
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
82 G_RESOURCE_LOOKUP_FLAGS_NONE, error);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
83 if(bytes == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
84 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
85 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
86
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
87 script = (const gchar *)g_bytes_get_data(bytes, NULL);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
88 sqlite3_exec(priv->db, script, NULL, NULL, &error_msg);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
89 g_bytes_unref(bytes);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
90
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
91 if(error_msg != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
92 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
93 "failed to run migrations: %s", error_msg);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
94
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
95 sqlite3_free(error_msg);
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 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
98 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
99
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
100 return TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
101 }
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 static gchar *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
104 purple_sqlite_history_adapter_get_content_type(PurpleMessageContentType content_type) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
105 switch(content_type) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
106 case PURPLE_MESSAGE_CONTENT_TYPE_PLAIN:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
107 return "plain";
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
108 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
109 case PURPLE_MESSAGE_CONTENT_TYPE_HTML:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
110 return "html";
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
111 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
112 case PURPLE_MESSAGE_CONTENT_TYPE_XHTML:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
113 return "xhtml";
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
114 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
115 case PURPLE_MESSAGE_CONTENT_TYPE_MARKDOWN:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
116 return "markdown";
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
117 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
118 default:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
119 return "";
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
120 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
121 }
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
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
124 static PurpleMessageContentType
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
125 purple_sqlite_history_adapter_get_content_type_enum(const gchar *content_type)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
126 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
127 if(purple_strequal(content_type, "plain")) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
128 return PURPLE_MESSAGE_CONTENT_TYPE_PLAIN;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
129 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
130 if(purple_strequal(content_type, "html")) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
131 return PURPLE_MESSAGE_CONTENT_TYPE_HTML;
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 if(purple_strequal(content_type, "xhtml")) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
134 return PURPLE_MESSAGE_CONTENT_TYPE_XHTML;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
135 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
136 if(purple_strequal(content_type, "markdown")) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
137 return PURPLE_MESSAGE_CONTENT_TYPE_MARKDOWN;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
138 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
139 return PURPLE_MESSAGE_CONTENT_TYPE_PLAIN;
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
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
142 static sqlite3_stmt *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
143 purple_sqlite_history_adapter_build_query(PurpleSqliteHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
144 const gchar * search_query,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
145 gboolean remove,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
146 GError **error)
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 gchar **split = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
149 gint i = 0;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
150 GList *ins = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
151 GList *froms = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
152 GList *keywords = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
153 GString *query = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
154 GList *iter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
155 gboolean first = FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
156 sqlite3_stmt *prepared_statement = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
157 gint index = 1;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
158 PurpleSqliteHistoryAdapterPrivate *priv = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
159 gint query_items = 0;
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 priv = purple_sqlite_history_adapter_get_instance_private(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
162
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
163 split = g_strsplit(search_query, " ", -1);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
164 for(i = 0; split[i] != NULL; i++) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
165 if(g_str_has_prefix(split[i], "in:")) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
166 if(split[i][3] == '\0') {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
167 continue;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
168 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
169 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
170 query_items++;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
171 } 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
172 if(split[i][5] == '\0') {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
173 continue;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
174 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
175 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
176 query_items++;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
177 } else {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
178 if(split[i][0] == '\0') {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
179 continue;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
180 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
181 keywords = g_list_prepend(keywords,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
182 g_strdup_printf("%%%s%%", split[i]));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
183 query_items++;
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 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
186
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
187 g_clear_pointer(&split, g_strfreev);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
188
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
189 if(remove) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
190 if(query_items != 0) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
191 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
192 } else {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
193 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
194 "Attempting to remove messages without "
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
195 "query parameters.");
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 return NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
198 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
199 } else {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
200 query = g_string_new("SELECT "
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
201 "message_id, author, author_name_color, "
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
202 "author_alias, recipient, content_type, "
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
203 "content, client_timestamp "
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
204 "FROM message_log WHERE TRUE\n");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
205 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
206
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
207 if(ins != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
208 first = TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
209 g_string_append(query, "AND (conversation_id IN (");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
210 for(iter = ins; iter != NULL; iter = iter->next) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
211 if(!first) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
212 g_string_append(query, ", ");
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 first = FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
215 g_string_append(query, "?");
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 g_string_append(query, "))");
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
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
220 if(froms != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
221 first = TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
222 g_string_append(query, "AND (author IN (");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
223 for(iter = froms; iter != NULL; iter = iter->next) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
224 if(!first) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
225 g_string_append(query, ", ");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
226 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
227 first = FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
228 g_string_append(query, "?");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
229 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
230 g_string_append(query, "))");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
231 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
232
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
233 if(keywords != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
234 first = TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
235 g_string_append(query, "AND (");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
236 for(iter = keywords; iter != NULL; iter = iter->next) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
237 if(!first) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
238 g_string_append(query, " OR ");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
239 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
240 first = FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
241 g_string_append(query, " content LIKE ? ");
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 g_string_append(query, ")");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
244 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
245 g_string_append(query, ";");
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
246
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
247 sqlite3_prepare_v2(priv->db, query->str, -1, &prepared_statement, NULL);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
248
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
249 g_string_free(query, TRUE);
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 if(prepared_statement == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
252 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
253 "Error creating the prepared statement: %s",
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
254 sqlite3_errmsg(priv->db));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
255
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
256 g_list_free_full(ins, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
257 g_list_free_full(froms, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
258 g_list_free_full(keywords, g_free);
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 NULL;
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 while(ins != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
264 sqlite3_bind_text(prepared_statement, index++,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
265 (const char *)ins->data, -1, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
266 ins = g_list_delete_link(ins, ins);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
267 }
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 while(froms != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
270 sqlite3_bind_text(prepared_statement, index++,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
271 (const char *)froms->data, -1, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
272 froms = g_list_delete_link(froms, froms);
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 while(keywords != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
276 sqlite3_bind_text(prepared_statement, index++,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
277 (const char *)keywords->data, -1, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
278 keywords = g_list_delete_link(keywords, keywords);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
279 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
280
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
281 return prepared_statement;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
282 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
283
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 * PurpleHistoryAdapter Implementation
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
286 *****************************************************************************/
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
287 static gboolean
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
288 purple_sqlite_history_adapter_activate(PurpleHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
289 GError **error)
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 PurpleSqliteHistoryAdapter *sqlite_adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
292 PurpleSqliteHistoryAdapterPrivate *priv = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
293 gint rc = 0;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
294
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
295 sqlite_adapter = PURPLE_SQLITE_HISTORY_ADAPTER(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
296 priv = purple_sqlite_history_adapter_get_instance_private(sqlite_adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
297
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
298 if(priv->db != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
299 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
300 _("Adapter has already been activated"));
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 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
303 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
304
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
305 if(priv->filename == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
306 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
307 _("No filename specified"));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
308
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
309 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
310 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
311
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
312 rc = sqlite3_open(priv->filename, &priv->db);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
313 if(rc != SQLITE_OK) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
314 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
315 _("Error opening database in purplesqlitehistoryadapter for file %s"), priv->filename);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
316 g_clear_pointer(&priv->db, sqlite3_close);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
317
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
318 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
319 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
320
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
321 if(!purple_sqlite_history_adapter_run_migrations(sqlite_adapter, error)) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
322 g_clear_pointer(&priv->db, sqlite3_close);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
323
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
324 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
325 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
326
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
327 return TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
328 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
329
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
330 static gboolean
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
331 purple_sqlite_history_adapter_deactivate(PurpleHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
332 GError **error)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
333 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
334 PurpleSqliteHistoryAdapter *sqlite_adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
335 PurpleSqliteHistoryAdapterPrivate *priv = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
336
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
337 sqlite_adapter = PURPLE_SQLITE_HISTORY_ADAPTER(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
338 priv = purple_sqlite_history_adapter_get_instance_private(sqlite_adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
339 g_clear_pointer(&priv->db, sqlite3_close);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
340
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
341 return TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
342 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
343
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
344 static GList*
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
345 purple_sqlite_history_adapter_query(PurpleHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
346 const gchar *query, GError **error)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
347 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
348 PurpleSqliteHistoryAdapter *sqlite_adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
349 PurpleSqliteHistoryAdapterPrivate *priv = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
350 sqlite3_stmt *prepared_statement = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
351 GList *results = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
352
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
353 sqlite_adapter = PURPLE_SQLITE_HISTORY_ADAPTER(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
354 priv = purple_sqlite_history_adapter_get_instance_private(sqlite_adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
355
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
356 if(priv->db == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
357 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
358 _("Adapter has not been activated"));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
359
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
360 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
361 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
362
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
363 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
364 query,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
365 FALSE,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
366 error);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
367
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
368 if(prepared_statement == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
369 return NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
370 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
371
41115
4d22ff23a3b7 Fix a dead assignment that scanbuild found
Gary Kramlich <grim@reaperworld.com>
parents: 41090
diff changeset
372 while(sqlite3_step(prepared_statement) == SQLITE_ROW) {
41090
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
373 PurpleMessage *message = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
374 PurpleMessageContentType ct;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
375 GDateTime *g_date_time = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
376 const gchar *message_id = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
377 const gchar *author = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
378 const gchar *author_name_color = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
379 const gchar *author_alias = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
380 const gchar *recipient = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
381 const gchar *content = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
382 const gchar *content_type = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
383 const gchar *timestamp = NULL;
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 message_id = (const gchar *)sqlite3_column_text(prepared_statement, 0);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
386 author = (const gchar *)sqlite3_column_text(prepared_statement, 1);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
387 author_name_color = (const gchar *)sqlite3_column_text(prepared_statement, 2);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
388 author_alias = (const gchar *)sqlite3_column_text(prepared_statement, 3);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
389 recipient = (const gchar *)sqlite3_column_text(prepared_statement, 4);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
390 content_type = (const gchar *)sqlite3_column_text(prepared_statement, 5);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
391 ct = purple_sqlite_history_adapter_get_content_type_enum(content_type);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
392 content = (const gchar *)sqlite3_column_text(prepared_statement, 6);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
393 timestamp = (const gchar *)sqlite3_column_text(prepared_statement, 7);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
394 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
395
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
396 message = g_object_new(PURPLE_TYPE_MESSAGE,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
397 "id", message_id,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
398 "author", author,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
399 "author_name_color", author_name_color,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
400 "author_alias", author_alias,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
401 "recipient", recipient,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
402 "contents", content,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
403 "content_type", ct,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
404 "timestamp", g_date_time,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
405 NULL);
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 results = g_list_prepend(results, message);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
408 }
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 results = g_list_reverse(results);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
411
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
412 sqlite3_finalize(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
413
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
414 return results;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
415 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
416
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
417 static gboolean
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
418 purple_sqlite_history_adapter_remove(PurpleHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
419 const gchar *query, GError **error)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
420 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
421 PurpleSqliteHistoryAdapter *sqlite_adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
422 PurpleSqliteHistoryAdapterPrivate *priv = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
423 sqlite3_stmt * prepared_statement = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
424 gint result = 0;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
425
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
426 sqlite_adapter = PURPLE_SQLITE_HISTORY_ADAPTER(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
427 priv = purple_sqlite_history_adapter_get_instance_private(sqlite_adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
428
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
429 if(priv->db == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
430 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
431 _("Adapter has not been activated"));
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 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
434 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
435
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
436 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
437 query,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
438 TRUE,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
439 error);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
440
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
441 if(prepared_statement == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
442 return FALSE;
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
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
445 result = sqlite3_step(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
446
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
447 if(result != SQLITE_DONE) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
448 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
449 "Error removing from the database: %s",
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
450 sqlite3_errmsg(priv->db));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
451
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
452 sqlite3_finalize(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
453
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
454 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
455 }
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 sqlite3_finalize(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
458
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
459 return TRUE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
460 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
461
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
462 static gboolean
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
463 purple_sqlite_history_adapter_write(PurpleHistoryAdapter *adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
464 PurpleConversation *conversation,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
465 PurpleMessage *message, GError **error)
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 PurpleAccount *account = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
468 PurpleSqliteHistoryAdapter *sqlite_adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
469 PurpleSqliteHistoryAdapterPrivate *priv = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
470 sqlite3_stmt *prepared_statement = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
471 gchar *timestamp = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
472 gchar *content_type = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
473 const gchar * message_id = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
474 const gchar *script = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
475 gint result = 0;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
476
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
477 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
478 "message_id, author, author_name_color, author_alias, "
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
479 "recipient, content_type, content, client_timestamp) "
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
480 "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
481
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
482 sqlite_adapter = PURPLE_SQLITE_HISTORY_ADAPTER(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
483 priv = purple_sqlite_history_adapter_get_instance_private(sqlite_adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
484
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
485 if(priv->db == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
486 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
487 _("Adapter has not been activated"));
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 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
490 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
491
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
492 sqlite3_prepare_v2(priv->db, script, -1, &prepared_statement, NULL);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
493
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
494 if(prepared_statement == NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
495 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
496 "Error creating the prepared statement: %s",
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
497 sqlite3_errmsg(priv->db));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
498 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
499 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
500
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
501 account = purple_conversation_get_account(conversation);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
502
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
503 sqlite3_bind_text(prepared_statement,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
504 1, purple_account_get_protocol_name(account), -1,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
505 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
506 sqlite3_bind_text(prepared_statement,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
507 2, purple_account_get_username(account), -1,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
508 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
509 sqlite3_bind_text(prepared_statement,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
510 3, purple_conversation_get_name(conversation), -1,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
511 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
512 message_id = purple_message_get_id(message);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
513 if(message_id != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
514 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
515 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
516 } else {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
517 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
518 g_free);
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 sqlite3_bind_text(prepared_statement,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
521 5, purple_message_get_author(message), -1,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
522 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
523 sqlite3_bind_text(prepared_statement,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
524 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
525 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
526 sqlite3_bind_text(prepared_statement,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
527 7, purple_message_get_author_alias(message), -1,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
528 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
529 sqlite3_bind_text(prepared_statement,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
530 8, purple_message_get_recipient(message), -1,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
531 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
532 content_type = purple_sqlite_history_adapter_get_content_type(purple_message_get_content_type(message));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
533 sqlite3_bind_text(prepared_statement,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
534 9, content_type, -1, SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
535 sqlite3_bind_text(prepared_statement,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
536 10, purple_message_get_contents(message), -1,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
537 SQLITE_STATIC);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
538 timestamp = g_date_time_format_iso8601(purple_message_get_timestamp(message));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
539 sqlite3_bind_text(prepared_statement, 11, timestamp, -1, g_free);
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 result = sqlite3_step(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
542
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
543 if(result != SQLITE_DONE) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
544 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
545 "Error writing to the database: %s",
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
546 sqlite3_errmsg(priv->db));
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 sqlite3_finalize(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
549
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
550 return FALSE;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
551 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
552
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
553 sqlite3_finalize(prepared_statement);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
554
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
555 return TRUE;
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 * GObject Implementation
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
560 *****************************************************************************/
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
561 static void
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
562 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
563 GValue *value, GParamSpec *pspec)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
564 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
565 PurpleSqliteHistoryAdapter *adapter = PURPLE_SQLITE_HISTORY_ADAPTER(obj);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
566
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
567 switch(param_id) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
568 case PROP_FILENAME:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
569 g_value_set_string(value,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
570 purple_sqlite_history_adapter_get_filename(adapter));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
571 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
572 default:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
573 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
574 break;
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
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
578 static void
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
579 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
580 const GValue *value,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
581 GParamSpec *pspec)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
582 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
583 PurpleSqliteHistoryAdapter *adapter = PURPLE_SQLITE_HISTORY_ADAPTER(obj);
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 switch(param_id) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
586 case PROP_FILENAME:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
587 purple_sqlite_history_adapter_set_filename(adapter,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
588 g_value_get_string(value));
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
589 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
590 default:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
591 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
592 break;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
593 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
594 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
595
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
596 static void
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
597 purple_sqlite_history_adapter_finalize(GObject *obj) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
598 PurpleSqliteHistoryAdapter *adapter = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
599 PurpleSqliteHistoryAdapterPrivate *priv = NULL;
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 adapter = PURPLE_SQLITE_HISTORY_ADAPTER(obj);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
602 priv = purple_sqlite_history_adapter_get_instance_private(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
603
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
604 g_clear_pointer(&priv->filename, g_free);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
605
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
606 if(priv->db != NULL) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
607 g_warning("PurpleSqliteHistoryAdapter was finalized before being "
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
608 "deactivated");
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 g_clear_pointer(&priv->db, sqlite3_close);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
611 }
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 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
614 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
615
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
616 static void
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
617 purple_sqlite_history_adapter_init(PurpleSqliteHistoryAdapter *adapter) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
618 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
619
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
620 static void
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
621 purple_sqlite_history_adapter_class_init(PurpleSqliteHistoryAdapterClass *klass)
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
622 {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
623 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
624 PurpleHistoryAdapterClass *adapter_class = PURPLE_HISTORY_ADAPTER_CLASS(klass);
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 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
627 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
628 obj_class->finalize = purple_sqlite_history_adapter_finalize;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
629
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
630 adapter_class->activate = purple_sqlite_history_adapter_activate;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
631 adapter_class->deactivate = purple_sqlite_history_adapter_deactivate;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
632 adapter_class->query = purple_sqlite_history_adapter_query;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
633 adapter_class->remove = purple_sqlite_history_adapter_remove;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
634 adapter_class->write = purple_sqlite_history_adapter_write;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
635
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
636 /**
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
637 * PurpleHistoryAdapter::filename:
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
638 *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
639 * 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
640 *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
641 * Since: 3.0.0
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
642 */
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
643 properties[PROP_FILENAME] = g_param_spec_string(
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
644 "filename", "filename", "The filename of the sqlite database",
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
645 NULL,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
646 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
647 );
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
648
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
649 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
650 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
651
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
652 /******************************************************************************
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
653 * Public API
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
654 *****************************************************************************/
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
655 PurpleHistoryAdapter *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
656 purple_sqlite_history_adapter_new(const gchar *filename) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
657 return g_object_new(
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
658 PURPLE_TYPE_SQLITE_HISTORY_ADAPTER,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
659 "filename", filename,
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
660 "id", "sqlite-adapter",
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
661 "name", N_("SQLite Adapter"),
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
662 NULL);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
663 }
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
664
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
665 const gchar *
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
666 purple_sqlite_history_adapter_get_filename(PurpleSqliteHistoryAdapter *adapter) {
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
667 PurpleSqliteHistoryAdapterPrivate *priv = NULL;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
668
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
669 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
670
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
671 priv = purple_sqlite_history_adapter_get_instance_private(adapter);
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
672
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
673 return priv->filename;
741992355ead GSoC History API including sqlite history adapter
James Culver <rewtguy@gmail.com>
parents:
diff changeset
674 }

mercurial