libpurple/purplehistorymanager.c

changeset 42435
ecf0fdfc8363
parent 41479
3d2e114380f6
child 42576
ab1ca778ddb2
--- a/libpurple/purplehistorymanager.c	Thu Oct 26 22:22:34 2023 -0500
+++ b/libpurple/purplehistorymanager.c	Thu Oct 26 22:24:08 2023 -0500
@@ -138,38 +138,6 @@
 }
 
 /******************************************************************************
- * Private API
- *****************************************************************************/
-void
-purple_history_manager_startup(void) {
-	if(default_manager == NULL) {
-		default_manager = g_object_new(PURPLE_TYPE_HISTORY_MANAGER, NULL);
-	}
-}
-
-void
-purple_history_manager_shutdown(void) {
-	GError **error = NULL;
-
-	if(default_manager == NULL) {
-		return;
-	}
-
-	if(PURPLE_IS_HISTORY_ADAPTER(default_manager->active_adapter)) {
-		PurpleHistoryAdapter *adapter = NULL;
-
-		adapter = g_object_ref(default_manager->active_adapter);
-		purple_history_manager_set_active(default_manager, NULL, NULL);
-		purple_history_manager_unregister(default_manager,
-		                                  adapter, error);
-
-		g_clear_object(&adapter);
-	}
-
-	g_clear_object(&default_manager);
-}
-
-/******************************************************************************
  * Public API
  *****************************************************************************/
 PurpleHistoryManager *
@@ -397,3 +365,57 @@
 		func(PURPLE_HISTORY_ADAPTER(value), data);
 	}
 }
+
+gboolean
+purple_history_manager_startup(PurpleHistoryAdapter *adapter, GError **error) {
+	const char *id = NULL;
+
+	if(default_manager == NULL) {
+		default_manager = g_object_new(PURPLE_TYPE_HISTORY_MANAGER, NULL);
+		g_object_add_weak_pointer(G_OBJECT(default_manager),
+		                          (gpointer)&default_manager);
+	}
+
+	if(!PURPLE_IS_HISTORY_ADAPTER(adapter)) {
+		adapter = purple_sqlite_history_adapter_new(":memory:");
+	}
+
+	if(!purple_history_manager_register(default_manager, adapter, error)) {
+		g_clear_object(&adapter);
+
+		return FALSE;
+	}
+
+	id = purple_history_adapter_get_id(adapter);
+	if(!purple_history_manager_set_active(default_manager, id, error)) {
+		g_clear_object(&adapter);
+
+		return FALSE;
+	}
+
+	g_clear_object(&adapter);
+
+	return TRUE;
+}
+
+void
+purple_history_manager_shutdown(void) {
+	GError **error = NULL;
+
+	if(default_manager == NULL) {
+		return;
+	}
+
+	if(PURPLE_IS_HISTORY_ADAPTER(default_manager->active_adapter)) {
+		PurpleHistoryAdapter *adapter = NULL;
+
+		adapter = g_object_ref(default_manager->active_adapter);
+		purple_history_manager_set_active(default_manager, NULL, NULL);
+		purple_history_manager_unregister(default_manager,
+		                                  adapter, error);
+
+		g_clear_object(&adapter);
+	}
+
+	g_clear_object(&default_manager);
+}

mercurial