static GdkPixbuf *
pixbuf_from_buddy_icon (PurpleBuddyIcon *buddy_icon)
{
	GdkPixbuf *icon;
	const guchar *data;
	size_t len;
	GdkPixbufLoader *loader;

	data = purple_buddy_icon_get_data (buddy_icon, &len);

	loader = gdk_pixbuf_loader_new ();
	gdk_pixbuf_loader_set_size (loader, 48, 48);
	gdk_pixbuf_loader_write (loader, data, len, NULL);
	gdk_pixbuf_loader_close (loader, NULL);

	icon = gdk_pixbuf_loader_get_pixbuf (loader);

	if (icon) {
		g_object_ref (icon);
	}

	g_object_unref (loader);

	return icon;
}
Esempio n. 2
0
void PurpleContactListMngr::UpdateBuddyIcon(PurpleBuddy *buddy)
{
	IMAccount *account = NULL;
	PurpleIMPresence *mIMPresence = NULL;
	PurpleAccount	*gAccount = purple_buddy_get_account(buddy);
	const char *gPrclId = purple_account_get_protocol_id(gAccount);
	
	account = _accountMngr->FindIMAccount(purple_account_get_username(gAccount),
		PurpleIMPrcl::GetEnumIMProtocol(gPrclId));

	if (!account)
		return;

	mIMPresence = _presenceMngr->FindIMPresence(*account);

	if (!mIMPresence)
	{
		LOG_FATAL("IMPresence not found!");
		return;
	}
	
	size_t size;
	OWPicture picture;
	const char *data = (const char *)purple_buddy_icon_get_data(buddy->icon, &size);
		
	if (data && size > 0)
		picture = OWPicture::pictureFromData(std::string(data, size));

	mIMPresence->contactIconChangedEvent(*mIMPresence, purple_buddy_get_name(buddy), picture);
}
Esempio n. 3
0
static VALUE buddy_get_avatar (VALUE self){
	
	PurpleBuddy *buddy = NULL;
	PURPLE_BUDDY( self, buddy );
	PurpleBuddyIcon *icon =	purple_buddy_get_icon(buddy);
	if (icon != NULL) {
		size_t size = NULL;
		gconstpointer data = purple_buddy_icon_get_data(icon, &size);	
		return rb_str_new(data, size);
	} else {
		return Qnil;
	}
	
}
Esempio n. 4
0
static void conv_icon_set_buddy_icon_data(TwitterConvIcon * conv_icon, PurpleBuddyIcon * buddy_icon)
{
    gsize           len;
    const guchar   *data;
    g_return_if_fail(conv_icon != NULL);

    conv_icon_clear(conv_icon);

    if (buddy_icon) {
        data = purple_buddy_icon_get_data(buddy_icon, &len);

        conv_icon->icon_url = g_strdup(purple_buddy_icon_get_checksum(buddy_icon));
        conv_icon->pixbuf = make_scaled_pixbuf(data, len);
    }

}
Esempio n. 5
0
Data IMInvoker::buddyToData(PurpleBuddy *buddy) {
	Data data;
	std::string buddyName = purple_buddy_get_name(buddy);

	if (purple_buddy_get_name(buddy))          data.compound["name"] = Data(purple_buddy_get_name(buddy), Data::VERBATIM);
	if (purple_buddy_get_alias(buddy))         data.compound["alias"] = Data(purple_buddy_get_alias(buddy), Data::VERBATIM);
	if (purple_buddy_get_alias_only(buddy))    data.compound["aliasOnly"] = Data(purple_buddy_get_alias_only(buddy), Data::VERBATIM);
	if (purple_buddy_get_server_alias(buddy))  data.compound["server"] = Data(purple_buddy_get_server_alias(buddy), Data::VERBATIM);

	PurpleGroup* group = purple_buddy_get_group(buddy);
	if (group) {
		if (purple_group_get_name(group))        data.compound["group"] = Data(purple_group_get_name(group), Data::VERBATIM);
	}

	PurpleBuddyIcon* icon = purple_buddy_get_icon(buddy);
	if (icon) {
		size_t iconSize = 0;
		gconstpointer iconData = purple_buddy_icon_get_data(icon, &iconSize);
		data.compound["icon"] = Data((char*)iconData, iconSize, "application/octet-stream", false);
	}

	PurplePresence* presence = purple_buddy_get_presence(buddy);

	if (presence) {
		GList *statusElem;
		GList *statusList = purple_presence_get_statuses(presence);
		PurpleStatus* status;

		for(statusElem = statusList; statusElem; statusElem = statusElem->next) {
			status = (PurpleStatus*)statusElem->data;
			const char* statusId = purple_status_get_id(status);
			PurpleStatusPrimitive statusPrimitive = purple_primitive_get_type_from_id(statusId);

			// only include active states
			if(statusPrimitive == PURPLE_STATUS_UNSET || !purple_presence_is_status_primitive_active(presence, statusPrimitive))
				continue;
			data.compound["status"].compound[statusId] = statusToData(status);
		}
	}

	return data;
}
Esempio n. 6
0
static void on_new_message(PurpleAccount *account, const char *remote,
    const char *message)
{
  const char *command = purple_prefs_get_path(PLUGIN_PREF_COMMAND);

  // the command should be never NULL
  g_return_if_fail(command);

  if (!command[0]) {
    // no command is set
    return;
  }

  const char *protocol = purple_account_get_protocol_name(account);
  char *local = g_strdup(purple_normalize(account,
        purple_account_get_username(account)));
  char *nohtml = purple_markup_strip_html(message);
  PurpleBuddy *buddy = purple_find_buddy(account, remote);
  char *icon_encoded = NULL;
  if (buddy) {
    // get buddy alias and icon
    remote = purple_buddy_get_alias(buddy);
    PurpleBuddyIcon *icon = purple_buddy_get_icon(buddy);
    if (icon) {
      size_t len;
      gconstpointer data = purple_buddy_icon_get_data(icon, &len);
      icon_encoded = g_base64_encode(data, len);
    }
  }

  char *argv[2];
  argv[0] = g_strdup(command);
  argv[1] = NULL;

  // prepare child's environment variables
  char **envp = g_get_environ();
  envp = g_environ_setenv(envp, "EVENT_TYPE", "msg", TRUE);
  envp = g_environ_setenv(envp, "EVENT_NETWORK", protocol, TRUE);
  envp = g_environ_setenv(envp, "EVENT_LOCAL_USER", local, TRUE);
  envp = g_environ_setenv(envp, "EVENT_REMOTE_USER", remote, TRUE);
  if (icon_encoded)
    envp = g_environ_setenv(envp, "EVENT_REMOTE_USER_ICON", icon_encoded, TRUE);
  envp = g_environ_setenv(envp, "EVENT_MESSAGE", nohtml, TRUE);
  envp = g_environ_setenv(envp, "EVENT_MESSAGE_HTML", message, TRUE);

  // spawn the command
  GError *err = NULL;
  if (!g_spawn_async(NULL, argv, envp, G_SPAWN_SEARCH_PATH
        | G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL, NULL, NULL,
        NULL, &err)) {
    purple_debug_error("extaction", "%s", err->message);
    g_clear_error(&err);
  }

  // free all resources
  g_free(argv[0]);
  g_strfreev(envp);

  g_free(local);
  g_free(nohtml);
  g_free(icon_encoded);
}