plugin: new method to compare plugins
Instead of providing a method to get if a plugin is requesting to get sorted last, we provide a way to comparing two plugins, compatible with the GCompareFunc required in g_list_sort().
This commit is contained in:
@@ -549,25 +549,6 @@ out:
|
|||||||
return plugin;
|
return plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
|
||||||
compare_plugins (const MMPlugin *plugin_a,
|
|
||||||
const MMPlugin *plugin_b)
|
|
||||||
{
|
|
||||||
/* The order of the plugins in the list is the same order used to check
|
|
||||||
* whether the plugin can manage a given modem:
|
|
||||||
* - First, modems that will check vendor ID from udev.
|
|
||||||
* - Then, modems that report to be sorted last (those which will check
|
|
||||||
* vendor ID also from the probed ones..
|
|
||||||
*/
|
|
||||||
if (mm_plugin_get_sort_last (plugin_a) &&
|
|
||||||
!mm_plugin_get_sort_last (plugin_b))
|
|
||||||
return 1;
|
|
||||||
if (!mm_plugin_get_sort_last (plugin_a) &&
|
|
||||||
mm_plugin_get_sort_last (plugin_b))
|
|
||||||
return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
found_plugin (MMPlugin *plugin)
|
found_plugin (MMPlugin *plugin)
|
||||||
{
|
{
|
||||||
@@ -628,7 +609,7 @@ load_plugins (MMPluginManager *self,
|
|||||||
|
|
||||||
/* Sort last plugins that request it */
|
/* Sort last plugins that request it */
|
||||||
self->priv->plugins = g_slist_sort (self->priv->plugins,
|
self->priv->plugins = g_slist_sort (self->priv->plugins,
|
||||||
(GCompareFunc)compare_plugins);
|
(GCompareFunc)mm_plugin_cmp);
|
||||||
|
|
||||||
/* Make sure the generic plugin is last */
|
/* Make sure the generic plugin is last */
|
||||||
if (generic_plugin)
|
if (generic_plugin)
|
||||||
|
@@ -88,19 +88,36 @@ enum {
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
const char *
|
const gchar *
|
||||||
mm_plugin_get_name (MMPlugin *self)
|
mm_plugin_get_name (MMPlugin *self)
|
||||||
{
|
{
|
||||||
return self->priv->name;
|
return self->priv->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
/*****************************************************************************/
|
||||||
mm_plugin_get_sort_last (const MMPlugin *self)
|
|
||||||
|
gint
|
||||||
|
mm_plugin_cmp (const MMPlugin *plugin_a,
|
||||||
|
const MMPlugin *plugin_b)
|
||||||
{
|
{
|
||||||
/* If we have any post-probing filter, we need to sort the plugin last */
|
/* If we have any post-probing filter, we need to sort the plugin last */
|
||||||
return (self->priv->vendor_strings || self->priv->product_strings);
|
#define SORT_LAST(self) (self->priv->vendor_strings || self->priv->product_strings)
|
||||||
|
|
||||||
|
/* The order of the plugins in the list is the same order used to check
|
||||||
|
* whether the plugin can manage a given modem:
|
||||||
|
* - First, modems that will check vendor ID from udev.
|
||||||
|
* - Then, modems that report to be sorted last (those which will check
|
||||||
|
* vendor ID also from the probed ones..
|
||||||
|
*/
|
||||||
|
if (SORT_LAST (plugin_a) && !SORT_LAST (plugin_b))
|
||||||
|
return 1;
|
||||||
|
if (!SORT_LAST (plugin_a) && SORT_LAST (plugin_b))
|
||||||
|
return -1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
device_file_exists (const char *name)
|
device_file_exists (const char *name)
|
||||||
{
|
{
|
||||||
|
@@ -96,8 +96,9 @@ struct _MMPluginClass {
|
|||||||
|
|
||||||
GType mm_plugin_get_type (void);
|
GType mm_plugin_get_type (void);
|
||||||
|
|
||||||
const char *mm_plugin_get_name (MMPlugin *plugin);
|
const gchar *mm_plugin_get_name (MMPlugin *plugin);
|
||||||
gboolean mm_plugin_get_sort_last (const MMPlugin *plugin);
|
gint mm_plugin_cmp (const MMPlugin *plugin_a,
|
||||||
|
const MMPlugin *plugin_b);
|
||||||
|
|
||||||
void mm_plugin_supports_port (MMPlugin *plugin,
|
void mm_plugin_supports_port (MMPlugin *plugin,
|
||||||
GObject *device,
|
GObject *device,
|
||||||
|
Reference in New Issue
Block a user