Ejemplo n.º 1
0
static void
purple_smiley_set_data_impl(PurpleSmiley *smiley, guchar *smiley_data,
				size_t smiley_data_len)
{
	PurpleSmileyPrivate *priv = NULL;
	PurpleStoredImage *old_img, *new_img;
	const char *old_filename = NULL;
	const char *new_filename = NULL;

	g_return_if_fail(smiley     != NULL);
	g_return_if_fail(smiley_data != NULL);
	g_return_if_fail(smiley_data_len > 0);

	priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	old_img = priv->img;

	new_img = purple_smiley_data_new(smiley_data, smiley_data_len);

	g_object_set(G_OBJECT(smiley), "image", new_img, NULL);

	/* If the old and new image files have different names we need
	 * to unstore old image file. */
	if (!old_img)
		return;

	old_filename = purple_imgstore_get_filename(old_img);
	new_filename = purple_imgstore_get_filename(priv->img);

	if (g_ascii_strcasecmp(old_filename, new_filename))
		purple_smiley_data_unstore(old_filename);
	purple_imgstore_unref(old_img);
}
Ejemplo n.º 2
0
const gchar *
purple_smiley_get_shortcut(const PurpleSmiley *smiley)
{
	PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	g_return_val_if_fail(priv != NULL, NULL);

	return priv->shortcut;
}
Ejemplo n.º 3
0
const char *
purple_smiley_get_checksum(const PurpleSmiley *smiley)
{
	PurpleSmileyPrivate *priv = NULL;

	g_return_val_if_fail(smiley != NULL, NULL);

	priv = PURPLE_SMILEY_GET_PRIVATE(smiley);
	return priv->checksum;
}
Ejemplo n.º 4
0
PurpleImage *
purple_smiley_get_image(PurpleSmiley *smiley)
{
	PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	g_return_val_if_fail(priv != NULL, NULL);
	g_return_val_if_fail(priv->image != NULL, NULL);

	return priv->image;
}
Ejemplo n.º 5
0
const char *
purple_smiley_get_extension(const PurpleSmiley *smiley)
{
	PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	if (priv->img != NULL)
		return purple_imgstore_get_extension(priv->img);

	return NULL;
}
Ejemplo n.º 6
0
char *purple_smiley_get_full_path(PurpleSmiley *smiley)
{
	PurpleSmileyPrivate *priv = NULL;

	g_return_val_if_fail(smiley != NULL, NULL);

	priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	if (priv->img == NULL)
		return NULL;

	return get_file_full_path(purple_imgstore_get_filename(priv->img));
}
Ejemplo n.º 7
0
static void
purple_smiley_finalize(GObject *obj)
{
	PurpleSmiley *smiley = PURPLE_SMILEY(obj);
	PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	g_free(priv->shortcut);

	if (priv->image)
		g_object_unref(priv->image);

	PURPLE_DBUS_UNREGISTER_POINTER(smiley);

	G_OBJECT_CLASS(parent_class)->finalize(obj);
}
Ejemplo n.º 8
0
static void
purple_smiley_get_property(GObject *object, guint par_id, GValue *value,
	GParamSpec *pspec)
{
	PurpleSmiley *smiley = PURPLE_SMILEY(object);
	PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	switch (par_id) {
		case PROP_SHORTCUT:
			g_value_set_string(value, priv->shortcut);
			break;
		default:
			G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec);
			break;
	}
}
Ejemplo n.º 9
0
PurpleSmiley *
purple_smiley_new_remote(const gchar *shortcut)
{
	PurpleSmiley *smiley;
	PurpleSmileyPrivate *priv;

	g_return_val_if_fail(shortcut != NULL, NULL);

	smiley = g_object_new(PURPLE_TYPE_SMILEY,
		"shortcut", shortcut,
		NULL);
	priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	priv->image = purple_image_transfer_new();

	return smiley;
}
Ejemplo n.º 10
0
gconstpointer
purple_smiley_get_data(const PurpleSmiley *smiley, size_t *len)
{
	PurpleSmileyPrivate *priv = NULL;

	g_return_val_if_fail(smiley != NULL, NULL);

	priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	if (priv->img) {
		if (len != NULL)
			*len = purple_imgstore_get_size(priv->img);

		return purple_imgstore_get_data(priv->img);
	}

	return NULL;
}
Ejemplo n.º 11
0
static void
purple_smiley_finalize(GObject *obj)
{
	PurpleSmiley *smiley = PURPLE_SMILEY(obj);
	PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	if (g_hash_table_lookup(smiley_shortcut_index, priv->shortcut)) {
		g_hash_table_remove(smiley_shortcut_index, priv->shortcut);
		g_hash_table_remove(smiley_checksum_index, priv->checksum);
	}

	g_free(priv->shortcut);
	g_free(priv->checksum);
	if (priv->img)
		purple_smiley_data_unstore(purple_imgstore_get_filename(priv->img));
	purple_imgstore_unref(priv->img);

	PURPLE_DBUS_UNREGISTER_POINTER(smiley);

	purple_smileys_save();
}
Ejemplo n.º 12
0
static void
purple_smiley_load_file(const char *shortcut, const char *checksum, const char *filename)
{
	PurpleSmiley *smiley = NULL;
	PurpleSmileyPrivate *priv = NULL;
	guchar *smiley_data;
	size_t smiley_data_len;
	char *fullpath = NULL;

	g_return_if_fail(shortcut  != NULL);
	g_return_if_fail(checksum  != NULL);
	g_return_if_fail(filename != NULL);

	fullpath = get_file_full_path(filename);
	if (!fullpath) {
		purple_debug_error(SMILEYS_LOG_ID, "Path for filename %s doesn't exist\n", filename);
		return;
	}

	smiley = purple_smiley_create(shortcut);
	if (!smiley) {
		g_free(fullpath);
		return;
	}

	priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	priv->checksum = g_strdup(checksum);

	if (read_smiley_file(fullpath, &smiley_data, &smiley_data_len))
		purple_smiley_set_data_impl(smiley, smiley_data,
				smiley_data_len);
	else
		purple_smiley_delete(smiley);

	g_free(fullpath);

}
Ejemplo n.º 13
0
static void
purple_smiley_set_property(GObject *object, guint param_id, const GValue *value,
		GParamSpec *spec)
{
	PurpleSmiley *smiley = PURPLE_SMILEY(object);
	PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	switch (param_id) {
		case PROP_SHORTCUT:
			{
				const char *shortcut = g_value_get_string(value);
				purple_smiley_set_shortcut(smiley, shortcut);
			}
			break;
		case PROP_IMGSTORE:
			{
				PurpleStoredImage *img = g_value_get_pointer(value);

				purple_imgstore_unref(priv->img);
				g_free(priv->checksum);

				priv->img = img;
				if (img) {
					priv->checksum = g_compute_checksum_for_data(
							G_CHECKSUM_SHA1,
							purple_imgstore_get_data(img),
							purple_imgstore_get_size(img));
					purple_smiley_data_store(img);
				} else {
					priv->checksum = NULL;
				}
			}
			break;
		default:
			G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, spec);
			break;
	}
}
Ejemplo n.º 14
0
PurpleSmiley *
purple_smiley_new(const gchar *shortcut, const gchar *path)
{
	PurpleSmiley *smiley;
	PurpleSmileyPrivate *priv;

	g_return_val_if_fail(shortcut != NULL, NULL);
	g_return_val_if_fail(path != NULL, NULL);

	smiley = g_object_new(PURPLE_TYPE_SMILEY,
		"shortcut", shortcut,
		NULL);
	priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	priv->image = purple_image_new_from_file(path, FALSE);
	if (!priv->image) {
		purple_debug_error("smiley", "Couldn't load smiley data ");
		g_object_unref(smiley);
		return NULL;
	}

	return smiley;
}
Ejemplo n.º 15
0
void
purple_smiley_set_data(PurpleSmiley *smiley, guchar *smiley_data,
			   size_t smiley_data_len)
{
	PurpleSmileyPrivate *priv = NULL;

	g_return_if_fail(smiley     != NULL);
	g_return_if_fail(smiley_data != NULL);
	g_return_if_fail(smiley_data_len > 0);

	priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	/* Remove the previous entry */
	g_hash_table_remove(smiley_checksum_index, priv->checksum);

	/* Update the file data. This also updates the checksum. */
	purple_smiley_set_data_impl(smiley, smiley_data, smiley_data_len);

	/* Reinsert the index item. */
	g_hash_table_insert(smiley_checksum_index, g_strdup(priv->checksum), smiley);

	purple_smileys_save();
}
Ejemplo n.º 16
0
static PurpleXmlNode *
smiley_to_xmlnode(PurpleSmiley *smiley)
{
	PurpleSmileyPrivate *priv = NULL;
	PurpleXmlNode *smiley_node = NULL;

	smiley_node = purple_xmlnode_new(XML_SMILEY_TAG);

	if (!smiley_node)
		return NULL;

	priv = PURPLE_SMILEY_GET_PRIVATE(smiley);

	purple_xmlnode_set_attrib(smiley_node, XML_SHORTCUT_ATTRIB_TAG,
			priv->shortcut);

	purple_xmlnode_set_attrib(smiley_node, XML_CHECKSUM_ATRIB_TAG,
			priv->checksum);

	purple_xmlnode_set_attrib(smiley_node, XML_FILENAME_ATRIB_TAG,
			purple_imgstore_get_filename(priv->img));

	return smiley_node;
}
Ejemplo n.º 17
0
PurpleStoredImage *
purple_smiley_get_stored_image(const PurpleSmiley *smiley)
{
	PurpleSmileyPrivate *priv = PURPLE_SMILEY_GET_PRIVATE(smiley);
	return purple_imgstore_ref(priv->img);
}