summaryrefslogtreecommitdiff
path: root/libcaja-private/caja-search-engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcaja-private/caja-search-engine.c')
-rw-r--r--libcaja-private/caja-search-engine.c216
1 files changed, 216 insertions, 0 deletions
diff --git a/libcaja-private/caja-search-engine.c b/libcaja-private/caja-search-engine.c
new file mode 100644
index 00000000..539d1442
--- /dev/null
+++ b/libcaja-private/caja-search-engine.c
@@ -0,0 +1,216 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * Copyright (C) 2005 Novell, Inc.
+ *
+ * Caja is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * Caja is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; see the file COPYING. If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Anders Carlsson <[email protected]>
+ *
+ */
+
+#include <config.h>
+#include "caja-search-engine.h"
+#include "caja-search-engine-beagle.h"
+#include "caja-search-engine-simple.h"
+#include "caja-search-engine-tracker.h"
+
+#include <eel/eel-gtk-macros.h>
+
+struct CajaSearchEngineDetails
+{
+ int none;
+};
+
+enum
+{
+ HITS_ADDED,
+ HITS_SUBTRACTED,
+ FINISHED,
+ ERROR,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+static void caja_search_engine_class_init (CajaSearchEngineClass *class);
+static void caja_search_engine_init (CajaSearchEngine *engine);
+
+G_DEFINE_ABSTRACT_TYPE (CajaSearchEngine,
+ caja_search_engine,
+ G_TYPE_OBJECT);
+
+static GObjectClass *parent_class = NULL;
+
+static void
+finalize (GObject *object)
+{
+ CajaSearchEngine *engine;
+
+ engine = CAJA_SEARCH_ENGINE (object);
+
+ g_free (engine->details);
+
+ EEL_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+static void
+caja_search_engine_class_init (CajaSearchEngineClass *class)
+{
+ GObjectClass *gobject_class;
+
+ parent_class = g_type_class_peek_parent (class);
+
+ gobject_class = G_OBJECT_CLASS (class);
+ gobject_class->finalize = finalize;
+
+ signals[HITS_ADDED] =
+ g_signal_new ("hits-added",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CajaSearchEngineClass, hits_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+
+ signals[HITS_SUBTRACTED] =
+ g_signal_new ("hits-subtracted",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CajaSearchEngineClass, hits_subtracted),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+
+ signals[FINISHED] =
+ g_signal_new ("finished",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CajaSearchEngineClass, finished),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[ERROR] =
+ g_signal_new ("error",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CajaSearchEngineClass, error),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1,
+ G_TYPE_STRING);
+
+}
+
+static void
+caja_search_engine_init (CajaSearchEngine *engine)
+{
+ engine->details = g_new0 (CajaSearchEngineDetails, 1);
+}
+
+CajaSearchEngine *
+caja_search_engine_new (void)
+{
+ CajaSearchEngine *engine;
+
+ engine = caja_search_engine_tracker_new ();
+ if (engine)
+ {
+ return engine;
+ }
+
+ engine = caja_search_engine_beagle_new ();
+ if (engine)
+ {
+ return engine;
+ }
+
+ engine = caja_search_engine_simple_new ();
+ return engine;
+}
+
+void
+caja_search_engine_set_query (CajaSearchEngine *engine, CajaQuery *query)
+{
+ g_return_if_fail (CAJA_IS_SEARCH_ENGINE (engine));
+ g_return_if_fail (CAJA_SEARCH_ENGINE_GET_CLASS (engine)->set_query != NULL);
+
+ CAJA_SEARCH_ENGINE_GET_CLASS (engine)->set_query (engine, query);
+}
+
+void
+caja_search_engine_start (CajaSearchEngine *engine)
+{
+ g_return_if_fail (CAJA_IS_SEARCH_ENGINE (engine));
+ g_return_if_fail (CAJA_SEARCH_ENGINE_GET_CLASS (engine)->start != NULL);
+
+ CAJA_SEARCH_ENGINE_GET_CLASS (engine)->start (engine);
+}
+
+
+void
+caja_search_engine_stop (CajaSearchEngine *engine)
+{
+ g_return_if_fail (CAJA_IS_SEARCH_ENGINE (engine));
+ g_return_if_fail (CAJA_SEARCH_ENGINE_GET_CLASS (engine)->stop != NULL);
+
+ CAJA_SEARCH_ENGINE_GET_CLASS (engine)->stop (engine);
+}
+
+gboolean
+caja_search_engine_is_indexed (CajaSearchEngine *engine)
+{
+ g_return_val_if_fail (CAJA_IS_SEARCH_ENGINE (engine), FALSE);
+ g_return_val_if_fail (CAJA_SEARCH_ENGINE_GET_CLASS (engine)->is_indexed != NULL, FALSE);
+
+ return CAJA_SEARCH_ENGINE_GET_CLASS (engine)->is_indexed (engine);
+}
+
+void
+caja_search_engine_hits_added (CajaSearchEngine *engine, GList *hits)
+{
+ g_return_if_fail (CAJA_IS_SEARCH_ENGINE (engine));
+
+ g_signal_emit (engine, signals[HITS_ADDED], 0, hits);
+}
+
+
+void
+caja_search_engine_hits_subtracted (CajaSearchEngine *engine, GList *hits)
+{
+ g_return_if_fail (CAJA_IS_SEARCH_ENGINE (engine));
+
+ g_signal_emit (engine, signals[HITS_SUBTRACTED], 0, hits);
+}
+
+
+void
+caja_search_engine_finished (CajaSearchEngine *engine)
+{
+ g_return_if_fail (CAJA_IS_SEARCH_ENGINE (engine));
+
+ g_signal_emit (engine, signals[FINISHED], 0);
+}
+
+void
+caja_search_engine_error (CajaSearchEngine *engine, const char *error_message)
+{
+ g_return_if_fail (CAJA_IS_SEARCH_ENGINE (engine));
+
+ g_signal_emit (engine, signals[ERROR], 0, error_message);
+}