static gchar *
log_store_empathy_get_dir (EmpathyLogStore *self,
                           TpAccount *account,
                           const gchar *chat_id,
                           gboolean chatroom)
{
  gchar *basedir;
  gchar *escaped;
  EmpathyLogStoreEmpathyPriv *priv;

  priv = GET_PRIV (self);

  escaped = log_store_account_to_dirname (account);

  if (chatroom)
    basedir = g_build_path (G_DIR_SEPARATOR_S, priv->basedir, escaped,
        LOG_DIR_CHATROOMS, chat_id, NULL);
  else
    basedir = g_build_path (G_DIR_SEPARATOR_S, priv->basedir,
        escaped, chat_id, NULL);

  g_free (escaped);

  return basedir;
}
static EmpathyLogSearchHit *
log_store_empathy_search_hit_new (EmpathyLogStore *self,
                                  const gchar *filename)
{
  EmpathyLogStoreEmpathyPriv *priv = GET_PRIV (self);
  EmpathyLogSearchHit *hit;
  gchar *account_name;
  const gchar *end;
  gchar **strv;
  guint len;
  GList *accounts, *l;

  if (!g_str_has_suffix (filename, LOG_FILENAME_SUFFIX))
    return NULL;

  strv = g_strsplit (filename, G_DIR_SEPARATOR_S, -1);
  len = g_strv_length (strv);

  hit = g_slice_new0 (EmpathyLogSearchHit);

  end = strstr (strv[len-1], LOG_FILENAME_SUFFIX);
  hit->date = g_strndup (strv[len-1], end - strv[len-1]);
  hit->chat_id = g_strdup (strv[len-2]);
  hit->is_chatroom = (strcmp (strv[len-3], LOG_DIR_CHATROOMS) == 0);

  if (hit->is_chatroom)
    account_name = strv[len-4];
  else
    account_name = strv[len-3];

  /* FIXME: This assumes the account manager is prepared, but the
   * synchronous API forces this. See bug #599189. */
  accounts = tp_account_manager_get_valid_accounts (priv->account_manager);

  for (l = accounts; l != NULL; l = g_list_next (l))
    {
      TpAccount *account = TP_ACCOUNT (l->data);
      gchar *name;

      name = log_store_account_to_dirname (account);
      if (!tp_strdiff (name, account_name))
        {
          g_assert (hit->account == NULL);
          hit->account = account;
          g_object_ref (account);
        }
      g_object_unref (account);
      g_free (name);
    }
  g_list_free (accounts);

  hit->filename = g_strdup (filename);

  g_strfreev (strv);

  return hit;
}
static gchar *
get_log_dir_for_account (TpAccount *account)
{
  gchar *basedir;
  gchar *escaped;

  escaped = log_store_account_to_dirname (account);

  basedir = g_build_path (G_DIR_SEPARATOR_S, g_get_user_data_dir (),
    PACKAGE_NAME, "logs", escaped, NULL);

  g_free (escaped);

  return basedir;
}