Re: Re: [evolution-patches] Bounty Hunt patch: Set wallpaper from mailer
- From: Jeffrey Stedfast <fejj ximian com>
- To: David Moore <davmre bellsouth net>
- Cc: Not Zed <notzed ximian com>, evolution-patches lists ximian com
- Subject: Re: Re: [evolution-patches] Bounty Hunt patch: Set wallpaper from mailer
- Date: Thu, 04 Dec 2003 00:06:24 -0500
a few minor changes and it looks good to me...
Jeff
On Wed, 2003-12-03 at 23:54, David Moore wrote:
> Here's an updated patch.
>
> ______________________________________________________________________
> Index: mail/ChangeLog
> ===================================================================
> RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
> retrieving revision 1.2922
> diff -u -r1.2922 ChangeLog
> --- mail/ChangeLog 3 Dec 2003 00:27:51 -0000 1.2922
> +++ mail/ChangeLog 4 Dec 2003 04:47:36 -0000
> @@ -1,3 +1,13 @@
> +2003-12-04 David Moore <davmre bellsouth net>
> +
> + * em-popup.c (emp_part_popup_set_background): Implemented; sets an
> + image attachment as the GNOME wallpaper.
> +
> + * em-utils.c (emu_save_part_done): Created a prototype at the top
> + of the file.
> + (em_utils_save_part_to_file): Added; save a message part to a
> + specified file on disk.
> +
> 2003-12-03 Not Zed <NotZed Ximian com>
>
> * mail-autofilter.c (rule_match_thread): changed to setup the rule
> Index: mail/em-popup.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/mail/em-popup.c,v
> retrieving revision 1.8
> diff -u -r1.8 em-popup.c
> --- mail/em-popup.c 3 Dec 2003 00:27:52 -0000 1.8
> +++ mail/em-popup.c 4 Dec 2003 04:47:37 -0000
> @@ -22,8 +22,15 @@
> #include <camel/camel-folder.h>
> #include <camel/camel-mime-message.h>
> #include <camel/camel-string-utils.h>
> +#include <camel/camel-mime-utils.h>
> +#include <camel/camel-mime-part.h>
> #include <camel/camel-url.h>
>
> +#include <gconf/gconf.h>
> +#include <gconf/gconf-client.h>
> +
> +#include <gal/util/e-util.h>
> +
> static void emp_standard_menu_factory(EMPopup *emp, EMPopupTarget *target, void *data);
>
> struct _EMPopupFactory {
> @@ -602,8 +609,62 @@
> static void
> emp_part_popup_set_background(GtkWidget *w, EMPopupTarget *t)
> {
> - /* set as background ... */
> - printf("UNIMPLEMENTED: set background, but it would be cool, no?\n");
> + GConfClient *gconf;
> + char *str, *filename, *path, *extension;
> + unsigned int i=1;
> +
> + filename = g_strdup(camel_mime_part_get_filename(t->data.part.part));
> +
> + /* if filename is blank, create a default filename based on MIME type */
> + if (!filename || !filename[0])
> + filename = g_strconcat(_("untitled_image."), camel_mime_part_get_content_type(t->data.part.part)->subtype, NULL);
> +
I'd prefer you do something more like:
CamelContentType *ct;
if (!filename || !filename[0]) {
ct = camel_mime_part_get_content_type(t->data.part.part);
g_free (filename);
filename = g_strdup_printf (_("untitled_image.%s"), ct->subtype);
}
it makes the code a bit clearer... also, you need to g_free (filename)
or it gets leaked if filename[0] == 0 :-)
> + e_filename_make_safe(filename);
> +
> + path = g_build_filename(g_get_home_dir(), ".gnome2", "wallpapers", filename, NULL);
> +
> + extension = strrchr(filename, '.');
> + if (extension)
> + *extension++ = 0;
> +
> + /* if file exists, stick a (number) on the end */
> + while (g_file_test(path, G_FILE_TEST_EXISTS)) {
> + char *name;
> + name = g_strdup_printf(extension?"%s (%d).%s":"%s (%d)", filename, i++, extension);
if extension is NULL, you have too many args here.
> + g_free(path);
> + path = g_build_filename(g_get_home_dir(), ".gnome2", "wallpapers", name, NULL);
> + g_free(name);
> + }
> +
> + g_free(filename);
> +
> + if (em_utils_save_part_to_file(w, path, t->data.part.part)) {
> + gconf = gconf_client_get_default();
> +
> + /* if the filename hasn't changed, blank the filename before
> + * setting it so that gconf detects a change and updates it */
> + if ((str = gconf_client_get_string(gconf, "/desktop/gnome/background/picture_filename", NULL)) != NULL
> + && strcmp (str, path) == 0) {
> + gconf_client_set_string(gconf, "/desktop/gnome/background/picture_filename", "", NULL);
> + }
> +
> + g_free (str);
> + gconf_client_set_string(gconf, "/desktop/gnome/background/picture_filename", path, NULL);
> +
> + /* if GNOME currently doesn't display a picture, set to "wallpaper"
> + * display mode, otherwise leave it alone */
> + if ((str = gconf_client_get_string(gconf, "/desktop/gnome/background/picture_options", NULL)) == NULL
> + || strcmp(str, "none") == 0) {
> + gconf_client_set_string(gconf, "/desktop/gnome/background/picture_options", "wallpaper", NULL);
> + }
> +
> + gconf_client_suggest_sync(gconf, NULL);
> +
> + g_free(str);
> + g_object_unref(gconf);
> + }
> +
> + g_free(path);
> }
>
> static void
> Index: mail/em-utils.c
> ===================================================================
> RCS file: /cvs/gnome/evolution/mail/em-utils.c,v
> retrieving revision 1.10
> diff -u -r1.10 em-utils.c
> --- mail/em-utils.c 3 Dec 2003 00:27:52 -0000 1.10
> +++ mail/em-utils.c 4 Dec 2003 04:47:40 -0000
> @@ -33,6 +33,7 @@
>
> #include <camel/camel-stream-fs.h>
> #include <camel/camel-url-scanner.h>
> +#include <camel/camel-file-utils.h>
>
> #include <filter/filter-editor.h>
>
> @@ -52,6 +53,7 @@
> #include "em-format-quote.h"
>
> static EAccount *guess_account (CamelMimeMessage *message);
> +static void emu_save_part_done (CamelMimePart *part, char *name, int done, void *data);
>
> /**
> * em_utils_prompt_user:
> @@ -1387,6 +1389,55 @@
> gtk_widget_show((GtkWidget *)filesel);
> }
>
> +/**
> + * em_utils_save_part_to_file:
> + * @parent: parent window
> + * @filename: filename to save to
> + * @part: part to save
> + *
> + * Save a part's content to a specific file
> + * Creates all needed directories and overwrites without prompting
> + *
> + * Returns %TRUE if saving succeeded, %FALSE otherwise
> + **/
> +gboolean
> +em_utils_save_part_to_file(GtkWidget *parent, const char *filename, CamelMimePart *part)
> +{
> + int done;
> + char *dirname;
> + struct stat st;
> +
> + if (filename[0] == 0)
> + return FALSE;
> +
> + dirname = g_path_get_dirname(filename);
> + if (camel_mkdir(dirname, 0777) == -1) {
> + e_notice(parent, GTK_MESSAGE_ERROR,
> + _("Cannot save to `%s'\n %s"), filename, g_strerror(errno));
> + g_free(dirname);
> + return FALSE;
> + }
> + g_free(dirname);
> +
> + if (access(filename, F_OK) == 0) {
> + if (access(filename, W_OK) != 0) {
> + e_notice(parent, GTK_MESSAGE_ERROR,
> + _("Cannot save to `%s'\n %s"), filename, g_strerror(errno));
> + return FALSE;
> + }
> + }
> +
> + if (stat(filename, &st) != -1 && !S_ISREG(st.st_mode)) {
> + e_notice(parent, GTK_MESSAGE_ERROR,
> + _("Error: '%s' exists and is not a regular file"), filename);
> + return FALSE;
> + }
> +
> + /* FIXME: This doesn't handle default charsets */
> + mail_msg_wait(mail_save_part(part, filename, emu_save_part_done, &done));
> +
> + return done;
> +}
>
> struct _save_messages_data {
> CamelFolder *folder;
> Index: mail/em-utils.h
> ===================================================================
> RCS file: /cvs/gnome/evolution/mail/em-utils.h,v
> retrieving revision 1.6
> diff -u -r1.6 em-utils.h
> --- mail/em-utils.h 3 Dec 2003 00:27:52 -0000 1.6
> +++ mail/em-utils.h 4 Dec 2003 04:47:40 -0000
> @@ -86,6 +86,7 @@
> void em_utils_post_reply_to_message_by_uid (struct _CamelFolder *folder, const char *uid);
>
> void em_utils_save_part(struct _GtkWidget *parent, const char *prompt, struct _CamelMimePart *part);
> +gboolean em_utils_save_part_to_file(struct _GtkWidget *parent, const char *filename, struct _CamelMimePart *part);
> void em_utils_save_messages (struct _GtkWidget *parent, struct _CamelFolder *folder, GPtrArray *uids);
>
> void em_utils_add_address(struct _GtkWidget *parent, const char *email);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]