summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Pandelea <alexandru.pandelea@gmail.com>2017-08-02 10:54:25 +0100
committerAlexandru Pandelea <alexandru.pandelea@gmail.com>2017-08-15 21:42:15 +0100
commit37693c427941d60634bad80dd7c2d0b3a8523cea (patch)
tree6c4e5401c3b6e8bd0214f00a78d8520dbbb8be5e
parentafa26e43a716e70160412ce11c1c8dddfd44b6cc (diff)
downloadnautilus-37693c427941d60634bad80dd7c2d0b3a8523cea.tar.gz
search-engine: fix search providers handling
When starting the search providers, some provider might finish before all providers are started, so a wrong value of providers_running will be used, making Nautilus crash. To fix this, keep a queue of the started providers and whenever the value of the finised/running providers is needed, check the status of each provider. https://bugzilla.gnome.org/show_bug.cgi?id=785723
-rw-r--r--src/nautilus-search-directory.c9
-rw-r--r--src/nautilus-search-engine-model.c18
-rw-r--r--src/nautilus-search-engine-model.h1
-rw-r--r--src/nautilus-search-engine-simple.c11
-rw-r--r--src/nautilus-search-engine-tracker.c12
-rw-r--r--src/nautilus-search-engine.c232
-rw-r--r--src/nautilus-search-engine.h10
-rw-r--r--src/nautilus-search-provider.c9
-rw-r--r--src/nautilus-search-provider.h2
-rw-r--r--test/test-nautilus-search-engine.c4
10 files changed, 220 insertions, 88 deletions
diff --git a/src/nautilus-search-directory.c b/src/nautilus-search-directory.c
index 6692a41f0..ab3debd10 100644
--- a/src/nautilus-search-directory.c
+++ b/src/nautilus-search-directory.c
@@ -173,8 +173,6 @@ set_hidden_files (NautilusSearchDirectory *search)
static void
start_search (NautilusSearchDirectory *search)
{
- NautilusSearchEngineModel *model_provider;
- NautilusSearchEngineSimple *simple_provider;
gboolean recursive;
if (!search->details->query)
@@ -200,12 +198,11 @@ start_search (NautilusSearchDirectory *search)
nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (search->details->engine),
search->details->query);
- model_provider = nautilus_search_engine_get_model_provider (search->details->engine);
- nautilus_search_engine_model_set_model (model_provider, search->details->base_model);
+ nautilus_search_engine_set_model (search->details->engine,
+ search->details->base_model);
- simple_provider = nautilus_search_engine_get_simple_provider (search->details->engine);
recursive = nautilus_query_get_recursive (search->details->query);
- g_object_set (simple_provider, "recursive", recursive, NULL);
+ g_object_set (search->details->engine, "recursive", recursive, NULL);
reset_file_list (search);
diff --git a/src/nautilus-search-engine-model.c b/src/nautilus-search-engine-model.c
index b8f2a940f..c77a2c1dc 100644
--- a/src/nautilus-search-engine-model.c
+++ b/src/nautilus-search-engine-model.c
@@ -280,6 +280,17 @@ nautilus_search_engine_model_is_running (NautilusSearchProvider *provider)
return model->details->query_pending;
}
+static gboolean
+nautilus_search_engine_model_is_finished (NautilusSearchProvider *provider)
+{
+ NautilusSearchEngineModel *model;
+
+ model = NAUTILUS_SEARCH_ENGINE_MODEL (provider);
+
+ return !model->details->query_pending;
+}
+
+
static void
nautilus_search_provider_init (NautilusSearchProviderInterface *iface)
{
@@ -287,6 +298,7 @@ nautilus_search_provider_init (NautilusSearchProviderInterface *iface)
iface->start = nautilus_search_engine_model_start;
iface->stop = nautilus_search_engine_model_stop;
iface->is_running = nautilus_search_engine_model_is_running;
+ iface->is_finished = nautilus_search_engine_model_is_finished;
}
static void
@@ -353,9 +365,3 @@ nautilus_search_engine_model_set_model (NautilusSearchEngineModel *model,
g_clear_object (&model->details->directory);
model->details->directory = nautilus_directory_ref (directory);
}
-
-NautilusDirectory *
-nautilus_search_engine_model_get_model (NautilusSearchEngineModel *model)
-{
- return model->details->directory;
-}
diff --git a/src/nautilus-search-engine-model.h b/src/nautilus-search-engine-model.h
index 16f3388fc..0b6dee30c 100644
--- a/src/nautilus-search-engine-model.h
+++ b/src/nautilus-search-engine-model.h
@@ -47,6 +47,5 @@ GType nautilus_search_engine_model_get_type (void);
NautilusSearchEngineModel* nautilus_search_engine_model_new (void);
void nautilus_search_engine_model_set_model (NautilusSearchEngineModel *model,
NautilusDirectory *directory);
-NautilusDirectory * nautilus_search_engine_model_get_model (NautilusSearchEngineModel *model);
#endif /* NAUTILUS_SEARCH_ENGINE_MODEL_H */
diff --git a/src/nautilus-search-engine-simple.c b/src/nautilus-search-engine-simple.c
index ea2dbe364..1e0549b49 100644
--- a/src/nautilus-search-engine-simple.c
+++ b/src/nautilus-search-engine-simple.c
@@ -453,6 +453,16 @@ nautilus_search_engine_simple_is_running (NautilusSearchProvider *provider)
return simple->active_search != NULL;
}
+static gboolean
+nautilus_search_engine_simple_is_finished (NautilusSearchProvider *provider)
+{
+ NautilusSearchEngineSimple *simple;
+
+ simple = NAUTILUS_SEARCH_ENGINE_SIMPLE (provider);
+
+ return simple->active_search == NULL;
+}
+
static void
nautilus_search_engine_simple_set_property (GObject *object,
guint arg_id,
@@ -508,6 +518,7 @@ nautilus_search_provider_init (NautilusSearchProviderInterface *iface)
iface->start = nautilus_search_engine_simple_start;
iface->stop = nautilus_search_engine_simple_stop;
iface->is_running = nautilus_search_engine_simple_is_running;
+ iface->is_finished = nautilus_search_engine_simple_is_finished;
}
static void
diff --git a/src/nautilus-search-engine-tracker.c b/src/nautilus-search-engine-tracker.c
index b868dbf89..3ca7f40d5 100644
--- a/src/nautilus-search-engine-tracker.c
+++ b/src/nautilus-search-engine-tracker.c
@@ -485,6 +485,17 @@ nautilus_search_engine_tracker_is_running (NautilusSearchProvider *provider)
return tracker->details->query_pending;
}
+static gboolean
+nautilus_search_engine_tracker_is_finished (NautilusSearchProvider *provider)
+{
+ NautilusSearchEngineTracker *tracker;
+
+ tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
+
+ return !tracker->details->query_pending;
+}
+
+
static void
nautilus_search_provider_init (NautilusSearchProviderInterface *iface)
{
@@ -492,6 +503,7 @@ nautilus_search_provider_init (NautilusSearchProviderInterface *iface)
iface->start = nautilus_search_engine_tracker_start;
iface->stop = nautilus_search_engine_tracker_stop;
iface->is_running = nautilus_search_engine_tracker_is_running;
+ iface->is_finished = nautilus_search_engine_tracker_is_finished;
}
static void
diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c
index 209bd4f80..64cf6702e 100644
--- a/src/nautilus-search-engine.c
+++ b/src/nautilus-search-engine.c
@@ -32,22 +32,23 @@
typedef struct
{
- NautilusSearchEngineTracker *tracker;
- NautilusSearchEngineSimple *simple;
- NautilusSearchEngineModel *model;
+ GQueue *providers;
GHashTable *uris;
- guint providers_running;
- guint providers_finished;
guint providers_error;
gboolean running;
gboolean restart;
+
+ NautilusDirectory *directory;
+ NautilusQuery *query;
+ gboolean recursive;
} NautilusSearchEnginePrivate;
enum
{
PROP_0,
+ PROP_RECURSIVE,
PROP_RUNNING,
LAST_PROP
};
@@ -56,6 +57,12 @@ static void nautilus_search_provider_init (NautilusSearchProviderInterface *ifac
static gboolean nautilus_search_engine_is_running (NautilusSearchProvider *provider);
+static void connect_provider_signals (NautilusSearchEngine *engine,
+ NautilusSearchProvider *provider);
+
+static void disconnect_provider_signals (NautilusSearchEngine *engine,
+ NautilusSearchProvider *provider);
+
G_DEFINE_TYPE_WITH_CODE (NautilusSearchEngine,
nautilus_search_engine,
G_TYPE_OBJECT,
@@ -64,6 +71,35 @@ G_DEFINE_TYPE_WITH_CODE (NautilusSearchEngine,
nautilus_search_provider_init))
static void
+clear_providers_queue (NautilusSearchEngine *engine)
+{
+ NautilusSearchEnginePrivate *priv;
+ GList *l;
+
+ priv = nautilus_search_engine_get_instance_private (engine);
+
+ for (l = g_queue_peek_head_link (priv->providers); l != NULL; l = l->next)
+ {
+ disconnect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (l->data));
+ g_clear_object (&l->data);
+ }
+
+ g_queue_clear (priv->providers);
+}
+
+void
+nautilus_search_engine_set_model (NautilusSearchEngine *engine,
+ NautilusDirectory *directory)
+{
+ NautilusSearchEnginePrivate *priv;
+
+ priv = nautilus_search_engine_get_instance_private (engine);
+
+ g_clear_object (&priv->directory);
+ priv->directory = g_object_ref (directory);
+}
+
+static void
nautilus_search_engine_set_query (NautilusSearchProvider *provider,
NautilusQuery *query)
{
@@ -73,20 +109,41 @@ nautilus_search_engine_set_query (NautilusSearchProvider *provider,
engine = NAUTILUS_SEARCH_ENGINE (provider);
priv = nautilus_search_engine_get_instance_private (engine);
- nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->tracker), query);
- nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->model), query);
- nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (priv->simple), query);
+ g_object_ref (query);
+ g_clear_object (&priv->query);
+ priv->query = query;
}
static void
search_engine_start_real (NautilusSearchEngine *engine)
{
NautilusSearchEnginePrivate *priv;
+ NautilusSearchEngineTracker *tracker;
+ NautilusSearchEngineSimple *simple;
+ NautilusSearchEngineModel *model;
+ GList *l;
priv = nautilus_search_engine_get_instance_private (engine);
- priv->providers_running = 0;
- priv->providers_finished = 0;
+ clear_providers_queue (engine);
+
+ tracker = nautilus_search_engine_tracker_new ();
+ g_queue_push_head (priv->providers, tracker);
+ connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (tracker));
+
+ simple = nautilus_search_engine_simple_new ();
+ connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (simple));
+ g_object_set (simple, "recursive", priv->recursive, NULL);
+ g_queue_push_head (priv->providers, simple);
+
+ if (priv->directory)
+ {
+ model = nautilus_search_engine_model_new ();
+ connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (model));
+ nautilus_search_engine_model_set_model (model, priv->directory);
+ g_queue_push_head (priv->providers, model);
+ }
+
priv->providers_error = 0;
priv->restart = FALSE;
@@ -95,17 +152,12 @@ search_engine_start_real (NautilusSearchEngine *engine)
g_object_ref (engine);
- nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->tracker));
- priv->providers_running++;
-
- if (nautilus_search_engine_model_get_model (priv->model))
+ for (l = g_queue_peek_head_link (priv->providers); l != NULL; l = l->next)
{
- nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->model));
- priv->providers_running++;
+ nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (l->data),
+ priv->query);
+ nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (l->data));
}
-
- nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (priv->simple));
- priv->providers_running++;
}
static void
@@ -113,18 +165,23 @@ nautilus_search_engine_start (NautilusSearchProvider *provider)
{
NautilusSearchEngine *engine;
NautilusSearchEnginePrivate *priv;
- gint num_finished;
+ gboolean all_providers_finished;
+ GList *l;
engine = NAUTILUS_SEARCH_ENGINE (provider);
priv = nautilus_search_engine_get_instance_private (engine);
DEBUG ("Search engine start");
- num_finished = priv->providers_error + priv->providers_finished;
+ all_providers_finished = TRUE;
+ for (l = g_queue_peek_head_link (priv->providers); l != NULL; l = l->next)
+ {
+ all_providers_finished &= nautilus_search_provider_is_finished (NAUTILUS_SEARCH_PROVIDER (l->data));
+ }
if (priv->running)
{
- if (num_finished == priv->providers_running &&
+ if (all_providers_finished &&
priv->restart)
{
search_engine_start_real (engine);
@@ -137,7 +194,7 @@ nautilus_search_engine_start (NautilusSearchProvider *provider)
g_object_notify (G_OBJECT (provider), "running");
- if (num_finished < priv->providers_running)
+ if (!all_providers_finished)
{
priv->restart = TRUE;
}
@@ -152,15 +209,17 @@ nautilus_search_engine_stop (NautilusSearchProvider *provider)
{
NautilusSearchEngine *engine;
NautilusSearchEnginePrivate *priv;
+ GList *l;
engine = NAUTILUS_SEARCH_ENGINE (provider);
priv = nautilus_search_engine_get_instance_private (engine);
DEBUG ("Search engine stop");
- nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->tracker));
- nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->model));
- nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (priv->simple));
+ for (l = g_queue_peek_head_link (priv->providers); l != NULL; l = l->next)
+ {
+ nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (l->data));
+ }
priv->running = FALSE;
priv->restart = FALSE;
@@ -212,17 +271,23 @@ static void
check_providers_status (NautilusSearchEngine *engine)
{
NautilusSearchEnginePrivate *priv;
- gint num_finished;
+ gboolean all_providers_finished;
+ GList *l;
priv = nautilus_search_engine_get_instance_private (engine);
- num_finished = priv->providers_error + priv->providers_finished;
- if (num_finished < priv->providers_running)
+ all_providers_finished = TRUE;
+ for (l = g_queue_peek_head_link (priv->providers); l != NULL; l = l->next)
+ {
+ all_providers_finished &= nautilus_search_provider_is_finished (NAUTILUS_SEARCH_PROVIDER (l->data));
+ }
+
+ if (!all_providers_finished)
{
return;
}
- if (num_finished == priv->providers_error)
+ if (g_queue_get_length (priv->providers) == priv->providers_error)
{
DEBUG ("Search engine error");
nautilus_search_provider_error (NAUTILUS_SEARCH_PROVIDER (engine),
@@ -276,13 +341,8 @@ search_provider_finished (NautilusSearchProvider *provider,
NautilusSearchProviderStatus status,
NautilusSearchEngine *engine)
{
- NautilusSearchEnginePrivate *priv;
-
DEBUG ("Search provider finished");
- priv = nautilus_search_engine_get_instance_private (engine);
- priv->providers_finished++;
-
check_providers_status (engine);
}
@@ -301,6 +361,21 @@ connect_provider_signals (NautilusSearchEngine *engine,
engine);
}
+static void
+disconnect_provider_signals (NautilusSearchEngine *engine,
+ NautilusSearchProvider *provider)
+{
+ g_signal_handlers_disconnect_by_func (provider,
+ search_provider_hits_added,
+ engine);
+ g_signal_handlers_disconnect_by_func (provider,
+ search_provider_finished,
+ engine);
+ g_signal_handlers_disconnect_by_func (provider,
+ search_provider_error,
+ engine);
+}
+
static gboolean
nautilus_search_engine_is_running (NautilusSearchProvider *provider)
{
@@ -333,9 +408,11 @@ nautilus_search_engine_finalize (GObject *object)
g_hash_table_destroy (priv->uris);
- g_clear_object (&priv->tracker);
- g_clear_object (&priv->model);
- g_clear_object (&priv->simple);
+ clear_providers_queue (engine);
+ g_queue_free (priv->providers);
+
+ g_clear_object (&priv->directory);
+ g_clear_object (&priv->query);
G_OBJECT_CLASS (nautilus_search_engine_parent_class)->finalize (object);
}
@@ -346,8 +423,11 @@ nautilus_search_engine_get_property (GObject *object,
GValue *value,
GParamSpec *pspec)
{
+ NautilusSearchEnginePrivate *priv;
NautilusSearchProvider *self = NAUTILUS_SEARCH_PROVIDER (object);
+ priv = nautilus_search_engine_get_instance_private (NAUTILUS_SEARCH_ENGINE (self));
+
switch (prop_id)
{
case PROP_RUNNING:
@@ -356,12 +436,45 @@ nautilus_search_engine_get_property (GObject *object,
}
break;
+ case PROP_RECURSIVE:
+ {
+ g_value_set_boolean (value, priv->recursive);
+ }
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
+nautilus_search_engine_set_property (GObject *object,
+ guint arg_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NautilusSearchEnginePrivate *priv;
+ NautilusSearchEngine *engine = NAUTILUS_SEARCH_ENGINE (object);
+
+ priv = nautilus_search_engine_get_instance_private (NAUTILUS_SEARCH_ENGINE (engine));
+
+ switch (arg_id)
+ {
+ case PROP_RECURSIVE:
+ {
+ priv->recursive = g_value_get_boolean (value);
+ }
+ break;
+
+ default:
+ {
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, arg_id, pspec);
+ }
+ break;
+ }
+}
+
+static void
nautilus_search_engine_class_init (NautilusSearchEngineClass *class)
{
GObjectClass *object_class;
@@ -370,6 +483,20 @@ nautilus_search_engine_class_init (NautilusSearchEngineClass *class)
object_class->finalize = nautilus_search_engine_finalize;
object_class->get_property = nautilus_search_engine_get_property;
+ object_class->set_property = nautilus_search_engine_set_property;
+
+ /**
+ * NautilusSearchEngine::recursive:
+ *
+ * Whether the search is recursive or not.
+ */
+ g_object_class_install_property (object_class,
+ PROP_RECURSIVE,
+ g_param_spec_boolean ("recursive",
+ "recursive",
+ "recursive",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
/**
* NautilusSearchEngine::running:
@@ -387,14 +514,7 @@ nautilus_search_engine_init (NautilusSearchEngine *engine)
priv = nautilus_search_engine_get_instance_private (engine);
priv->uris = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
- priv->tracker = nautilus_search_engine_tracker_new ();
- connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (priv->tracker));
-
- priv->model = nautilus_search_engine_model_new ();
- connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (priv->model));
-
- priv->simple = nautilus_search_engine_simple_new ();
- connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (priv->simple));
+ priv->providers = g_queue_new ();
}
NautilusSearchEngine *
@@ -406,23 +526,3 @@ nautilus_search_engine_new (void)
return engine;
}
-
-NautilusSearchEngineModel *
-nautilus_search_engine_get_model_provider (NautilusSearchEngine *engine)
-{
- NautilusSearchEnginePrivate *priv;
-
- priv = nautilus_search_engine_get_instance_private (engine);
-
- return priv->model;
-}
-
-NautilusSearchEngineSimple *
-nautilus_search_engine_get_simple_provider (NautilusSearchEngine *engine)
-{
- NautilusSearchEnginePrivate *priv;
-
- priv = nautilus_search_engine_get_instance_private (engine);
-
- return priv->simple;
-}
diff --git a/src/nautilus-search-engine.h b/src/nautilus-search-engine.h
index 0416e8306..93892a23e 100644
--- a/src/nautilus-search-engine.h
+++ b/src/nautilus-search-engine.h
@@ -30,7 +30,7 @@
G_BEGIN_DECLS
-#define NAUTILUS_TYPE_SEARCH_ENGINE (nautilus_search_engine_get_type ())
+#define NAUTILUS_TYPE_SEARCH_ENGINE (nautilus_search_engine_get_type ())
G_DECLARE_DERIVABLE_TYPE (NautilusSearchEngine, nautilus_search_engine, NAUTILUS, SEARCH_ENGINE, GObject)
@@ -39,11 +39,9 @@ struct _NautilusSearchEngineClass
GObjectClass parent_class;
};
-NautilusSearchEngine *nautilus_search_engine_new (void);
-NautilusSearchEngineModel *
- nautilus_search_engine_get_model_provider (NautilusSearchEngine *engine);
-NautilusSearchEngineSimple *
- nautilus_search_engine_get_simple_provider (NautilusSearchEngine *engine);
+NautilusSearchEngine *nautilus_search_engine_new (void);
+void nautilus_search_engine_set_model (NautilusSearchEngine *engine,
+ NautilusDirectory *directory);
G_END_DECLS
diff --git a/src/nautilus-search-provider.c b/src/nautilus-search-provider.c
index 9a4a6553d..572e34d42 100644
--- a/src/nautilus-search-provider.c
+++ b/src/nautilus-search-provider.c
@@ -143,3 +143,12 @@ nautilus_search_provider_is_running (NautilusSearchProvider *provider)
return NAUTILUS_SEARCH_PROVIDER_GET_IFACE (provider)->is_running (provider);
}
+
+gboolean
+nautilus_search_provider_is_finished (NautilusSearchProvider *provider)
+{
+ g_return_val_if_fail (NAUTILUS_IS_SEARCH_PROVIDER (provider), FALSE);
+ g_return_val_if_fail (NAUTILUS_SEARCH_PROVIDER_GET_IFACE (provider)->is_finished, FALSE);
+
+ return NAUTILUS_SEARCH_PROVIDER_GET_IFACE (provider)->is_finished (provider);
+}
diff --git a/src/nautilus-search-provider.h b/src/nautilus-search-provider.h
index d019c6690..b0c2a69e8 100644
--- a/src/nautilus-search-provider.h
+++ b/src/nautilus-search-provider.h
@@ -73,6 +73,7 @@ struct _NautilusSearchProviderInterface {
NautilusSearchProviderStatus status);
void (*error) (NautilusSearchProvider *provider, const char *error_message);
gboolean (*is_running) (NautilusSearchProvider *provider);
+ gboolean (*is_finished) (NautilusSearchProvider *provider);
};
GType nautilus_search_provider_get_type (void) G_GNUC_CONST;
@@ -91,6 +92,7 @@ void nautilus_search_provider_error (NautilusSearchProvider
const char *error_message);
gboolean nautilus_search_provider_is_running (NautilusSearchProvider *provider);
+gboolean nautilus_search_provider_is_finished (NautilusSearchProvider *provider);
G_END_DECLS
diff --git a/test/test-nautilus-search-engine.c b/test/test-nautilus-search-engine.c
index 2ed8af77e..fa30f352f 100644
--- a/test/test-nautilus-search-engine.c
+++ b/test/test-nautilus-search-engine.c
@@ -28,7 +28,6 @@ main (int argc,
char *argv[])
{
NautilusSearchEngine *engine;
- NautilusSearchEngineModel *model;
NautilusDirectory *directory;
NautilusQuery *query;
GFile *location;
@@ -52,8 +51,7 @@ main (int argc,
directory = nautilus_directory_get (location);
g_object_unref (location);
- model = nautilus_search_engine_get_model_provider (engine);
- nautilus_search_engine_model_set_model (model, directory);
+ nautilus_search_engine_set_model (engine, directory);
g_object_unref (directory);
nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (engine));