Exemple #1
0
void
empathy_tp_chat_acknowledge_message (EmpathyTpChat *chat,
				     EmpathyMessage *message) {
	EmpathyTpChatPriv *priv = GET_PRIV (chat);
	GArray *message_ids;
	GList *m;
	guint id;

	g_return_if_fail (EMPATHY_IS_TP_CHAT (chat));
	g_return_if_fail (priv->ready);

	if (empathy_message_get_sender (message) == priv->user)
		goto out;

	message_ids = g_array_sized_new (FALSE, FALSE, sizeof (guint), 1);

	id = empathy_message_get_id (message);
	g_array_append_val (message_ids, id);
	acknowledge_messages (chat, message_ids);
	g_array_free (message_ids, TRUE);

out:
	m = g_queue_find (priv->pending_messages_queue, message);
	g_assert (m != NULL);
	g_queue_delete_link (priv->pending_messages_queue, m);
	g_object_unref (message);
}
Exemple #2
0
void
empathy_tp_chat_acknowledge_messages (EmpathyTpChat *chat,
				      const GList *messages) {
	EmpathyTpChatPriv *priv = GET_PRIV (chat);
	/* Copy messages as the messges list (probably is) our own */
	GList *msgs = g_list_copy ((GList *) messages);
	GList *l;
	guint length;
	GArray *message_ids;

	g_return_if_fail (EMPATHY_IS_TP_CHAT (chat));
	g_return_if_fail (priv->ready);

	length = g_list_length ((GList *) messages);

	if (length == 0)
		return;

	message_ids = g_array_sized_new (FALSE, FALSE, sizeof (guint), length);

	for (l = msgs; l != NULL; l = g_list_next (l)) {
		GList *m;

		EmpathyMessage *message = EMPATHY_MESSAGE (l->data);

		m = g_queue_find (priv->pending_messages_queue, message);
		g_assert (m != NULL);
		g_queue_delete_link (priv->pending_messages_queue, m);

		if (empathy_message_get_sender (message) != priv->user) {
			guint id = empathy_message_get_id (message);
			g_array_append_val (message_ids, id);
		}
		g_object_unref (message);
	}

	if (message_ids->len > 0)
		acknowledge_messages (chat, message_ids);

	g_array_free (message_ids, TRUE);
	g_list_free (msgs);
}
static gboolean
log_store_empathy_add_message (EmpathyLogStore *self,
                               const gchar *chat_id,
                               gboolean chatroom,
                               EmpathyMessage *message,
                               GError **error)
{
  FILE *file;
  TpAccount *account;
  EmpathyContact *sender;
  const gchar *body_str;
  const gchar *str;
  EmpathyAvatar *avatar;
  gchar *avatar_token = NULL;
  gchar *filename;
  gchar *basedir;
  gchar *body;
  gchar *timestamp;
  gchar *contact_name;
  gchar *contact_id;
  TpChannelTextMessageType msg_type;

  g_return_val_if_fail (EMPATHY_IS_LOG_STORE (self), FALSE);
  g_return_val_if_fail (chat_id != NULL, FALSE);
  g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), FALSE);

  sender = empathy_message_get_sender (message);
  account = empathy_contact_get_account (sender);
  body_str = empathy_message_get_body (message);
  msg_type = empathy_message_get_tptype (message);

  if (EMP_STR_EMPTY (body_str))
    return FALSE;

  filename = log_store_empathy_get_filename (self, account, chat_id, chatroom);
  basedir = g_path_get_dirname (filename);
  if (!g_file_test (basedir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))
    {
      DEBUG ("Creating directory:'%s'", basedir);
      g_mkdir_with_parents (basedir, LOG_DIR_CREATE_MODE);
    }
  g_free (basedir);

  DEBUG ("Adding message: '%s' to file: '%s'", body_str, filename);

  if (!g_file_test (filename, G_FILE_TEST_EXISTS))
    {
      file = g_fopen (filename, "w+");
      if (file != NULL)
        g_fprintf (file, LOG_HEADER);

      g_chmod (filename, LOG_FILE_CREATE_MODE);
    }
  else
    {
      file = g_fopen (filename, "r+");
      if (file != NULL)
        fseek (file, - strlen (LOG_FOOTER), SEEK_END);
    }

  body = g_markup_escape_text (body_str, -1);
  timestamp = log_store_empathy_get_timestamp_from_message (message);

  str = empathy_contact_get_name (sender);
  contact_name = g_markup_escape_text (str, -1);

  str = empathy_contact_get_id (sender);
  contact_id = g_markup_escape_text (str, -1);

  avatar = empathy_contact_get_avatar (sender);
  if (avatar != NULL)
    avatar_token = g_markup_escape_text (avatar->token, -1);

  g_fprintf (file,
       "<message time='%s' cm_id='%d' id='%s' name='%s' token='%s' isuser='******' type='%s'>"
       "%s</message>\n" LOG_FOOTER, timestamp,
       empathy_message_get_id (message),
       contact_id, contact_name,
       avatar_token ? avatar_token : "",
       empathy_contact_is_user (sender) ? "true" : "false",
       empathy_message_type_to_str (msg_type), body);

  fclose (file);
  g_free (filename);
  g_free (contact_id);
  g_free (contact_name);
  g_free (timestamp);
  g_free (body);
  g_free (avatar_token);

  return TRUE;
}