Ejemplo n.º 1
0
static const gchar *
_get_manager_for_protocol (EmpathyConnectionManagers *managers,
    const gchar *protocol)
{
  GList *cms = empathy_connection_managers_get_cms (managers);
  GList *l;
  TpConnectionManager *haze = NULL;
  TpConnectionManager *cm = NULL;

  for (l = cms; l; l = l->next)
    {
      TpConnectionManager *tp_cm = l->data;

      /* Only use haze if no other cm provides this protocol */
      if (!tp_strdiff (tp_connection_manager_get_name (tp_cm), "haze"))
        {
          haze = tp_cm;
          continue;
        }

      if (tp_connection_manager_has_protocol (tp_cm, protocol))
        {
          cm = tp_cm;
          goto out;
        }
    }

  if (haze != NULL && tp_connection_manager_has_protocol (haze, protocol))
    return tp_connection_manager_get_name (haze);

out:
  return cm != NULL ? tp_connection_manager_get_name (cm) : NULL;
}
gboolean
empathy_import_protocol_is_supported (const gchar *protocol,
    TpConnectionManager **cm)
{
  EmpathyConnectionManagers *manager;
  GList *cms;
  GList *l;
  gboolean proto_is_supported = FALSE;

  manager = empathy_connection_managers_dup_singleton ();
  cms = empathy_connection_managers_get_cms (manager);

  for (l = cms; l; l = l->next)
    {

      TpConnectionManager *tp_cm = l->data;
      if (tp_connection_manager_has_protocol (tp_cm,
          (const gchar*) protocol))
        {
          if (!tp_strdiff (protocol, "irc")
              && !tp_strdiff (tp_cm->name, "haze"))
              continue;

          if (!proto_is_supported)
            {
              *cm = tp_cm;
              proto_is_supported = TRUE;

              continue;
            }

          /* we have more than one CM for this protocol,
           * select the one which is not haze.
           */
          if (!tp_strdiff ((*cm)->name, "haze"))
            {
              *cm = tp_cm;
              break;
            }
        }
    }

  g_object_unref (manager);

  return proto_is_supported;
}