Revision: 1659
          http://gtkpod.svn.sourceforge.net/gtkpod/?rev=1659&view=rev
Author:   phantom_sf
Date:     2007-07-30 12:18:11 -0700 (Mon, 30 Jul 2007)

Log Message:
-----------
2007-07-30 P.G. Richardson <phantom_sf at users.sourceforge.net>

  * src/fetchcover.c: improved return status of net_retrieve_image function
    so that if one image fails to be retrieved then the dialog does not have
    to be cancelled. 

Modified Paths:
--------------
    gtkpod/trunk/ChangeLog_detailed
    gtkpod/trunk/src/fetchcover.c

Modified: gtkpod/trunk/ChangeLog_detailed
===================================================================
--- gtkpod/trunk/ChangeLog_detailed     2007-07-27 19:28:13 UTC (rev 1658)
+++ gtkpod/trunk/ChangeLog_detailed     2007-07-30 19:18:11 UTC (rev 1659)
@@ -1,3 +1,9 @@
+2007-07-30 P.G. Richardson <phantom_sf at users.sourceforge.net>
+
+  * src/fetchcover.c: improved return status of net_retrieve_image function
+    so that if one image fails to be retrieved then the dialog does not have
+    to be cancelled. 
+
 2007-07-26 Michael Tiffany <tiffman at users.sourceforge.net>
 
        * merge gapless_playback_branch back to HEAD.

Modified: gtkpod/trunk/src/fetchcover.c
===================================================================
--- gtkpod/trunk/src/fetchcover.c       2007-07-27 19:28:13 UTC (rev 1658)
+++ gtkpod/trunk/src/fetchcover.c       2007-07-30 19:18:11 UTC (rev 1659)
@@ -80,7 +80,7 @@
        static void *safe_realloc(void *ptr, size_t size);
        static size_t curl_write_fetchcover_func(void *ptr, size_t itemsize, 
size_t numitems, void *data);
        static void net_search_track ();
-       static void net_retrieve_image (GString *url);
+       static gboolean net_retrieve_image (GString *url);
        static void fetchcover_next_button_clicked (GtkWidget *widget, gpointer 
data);
        static void fetchcover_prev_button_clicked (GtkWidget *widget, gpointer 
data);
        static void fetchcover_cleanup();
@@ -300,7 +300,7 @@
         * save it to a file inside the track's parent directory then display
         * it as a pixbuf
         */
-       static void net_retrieve_image (GString *url)
+       static gboolean net_retrieve_image (GString *url)
        {
                gchar *path = NULL;
                
@@ -320,19 +320,24 @@
                curl_easy_perform(curl);
                curl_easy_cleanup(curl);
                
-               g_return_if_fail(fetchcover_curl_data.memory);
+               if (fetchcover_curl_data.memory == NULL)
+               {
+                       fetchcover_statusbar_update (_("Image could not be 
retrieved."));
+                       fetchcover_debug("fetchcover_next: 
fetchcover_curl_data.memory is null\n");
+                       return FALSE;
+               }
        
                /* Check that the page returned is a valid web page */  
                if (strstr(fetchcover_curl_data.memory, "<html>") != NULL)
                {
                        fetchcover_statusbar_update (_("Image appears to no 
longer exist at http location"));
                        fetchcover_debug("fetchcover_next: http error (probably 
404 or server error\n");
-                       return;
+                       return FALSE;
                }
                
                FILE *tmpf = NULL;
                ExtraTrackData *etd = fetchcover_track->userdata;
-               g_return_if_fail(etd);
+               g_return_val_if_fail(etd, FALSE);
                
                gchar *dir = g_path_get_dirname(etd->pc_path_utf8);
                gchar *template = prefs_get_string("coverart_template");
@@ -371,34 +376,43 @@
                
                displayed_cover->dir = dir;
                displayed_cover->filename = fname;
-                               
+
+               g_free(filename);
+                                               
                fetchcover_debug("fetchcover_next: saving tmp cover image to %s 
/ %s", displayed_cover->dir, displayed_cover->filename);
                
                path = g_build_filename(displayed_cover->dir, 
displayed_cover->filename, NULL);
                if ((tmpf = fopen(path, "wb")) == NULL)
                {
                        fetchcover_debug("fetchcover_next: fopen failed\n");
-                       fetchcover_statusbar_update (_("Downloaded image cover 
failed to open"));
+                       fetchcover_statusbar_update (_("A file could not be 
created for the downloaded image"));
                        if (fetchcover_curl_data.memory)
                        {
                                g_free(fetchcover_curl_data.memory);
                                fetchcover_curl_data.memory = NULL;
                                fetchcover_curl_data.size = 0;
                        }
+                       g_strfreev(template_items);
+                       g_free(template);
                        g_free (path);
-                       return;
+                       return FALSE;
                }
                g_free (path);
                
                if (fwrite(fetchcover_curl_data.memory, 
fetchcover_curl_data.size, 1, tmpf) != 1)
                {
                        fetchcover_debug("fetchcover_next: fwrite failed\n");
+                       fetchcover_statusbar_update (_("The downloaded image 
could not be saved to the filesystem"));
                        if (fetchcover_curl_data.memory)
                        {
                                g_free(fetchcover_curl_data.memory);
                                fetchcover_curl_data.memory = NULL;
                                fetchcover_curl_data.size = 0;
                        }
+                       fclose(tmpf);
+                       g_strfreev(template_items);
+                       g_free(template);
+                       return FALSE;
                }
                
                fclose(tmpf);
@@ -410,21 +424,28 @@
                {
                        g_error_free (error);
                        fetchcover_debug("fetchcover_next: 
gdk_pixbuf_new_from_file failed\n");
+                       fetchcover_statusbar_update (_("Downloaded image file 
could not be displayed"));
                        if (fetchcover_curl_data.memory)
                        {
                                g_free(fetchcover_curl_data.memory);
                                fetchcover_curl_data.memory = NULL;
                                fetchcover_curl_data.size = 0;
                        }
+                       g_strfreev(template_items);
+                       g_free(template);
+                       g_free(path);
+                       return FALSE;
                }
                
-               g_free(fetchcover_curl_data.memory);
+               if (fetchcover_curl_data.memory)
+                       g_free(fetchcover_curl_data.memory);
+               
                fetchcover_curl_data.memory = NULL;
                fetchcover_curl_data.size = 0;
                g_strfreev(template_items);
                g_free(template);
-               g_free(filename);
                g_free(path);
+               return TRUE;
        }
        
        /**
@@ -483,28 +504,25 @@
                /* Set the displayed cover to be the new image */       
                displayed_cover = g_list_nth_data (fetchcover_image_list, 
displayed_cover_index);
                
+               GdkPixbuf *scaled;
                /* If the image has not been retrieved then get it from the net 
*/
                if (displayed_cover->image == NULL)
                {
-                       net_retrieve_image (displayed_cover->url);
-                       if (displayed_cover->image == NULL)
+                       if (! net_retrieve_image (displayed_cover->url) || 
displayed_cover->image == NULL)
                        {
                                /* XML file downloaded ok but image could not 
be retrieved */
-                               gtk_widget_hide (prev_button);
-                               gtk_widget_set_sensitive (next_button, FALSE);
+                               gnome_canvas_item_hide (fetchcover_canvasitem);
                                gdk_window_set_cursor (window, NULL);
-                               fetchcover_statusbar_update (_("Failed to 
retrieve any images"));
-                               g_return_if_fail (displayed_cover->image);
+                               return;
                        }
                }
                
                fetchcover_debug("Displayed Image path: %s/%s\n", 
displayed_cover->dir, displayed_cover->filename);
                
-               GdkPixbuf *scaled = 
gdk_pixbuf_scale_simple(displayed_cover->image, IMGSCALE, IMGSCALE, 
GDK_INTERP_NEAREST);
+               scaled = gdk_pixbuf_scale_simple(displayed_cover->image, 
IMGSCALE, IMGSCALE, GDK_INTERP_NEAREST);
                gnome_canvas_item_set(fetchcover_canvasitem, "pixbuf", scaled, 
NULL);
-               
+               gnome_canvas_item_show (fetchcover_canvasitem);
                gdk_window_set_cursor (window, NULL);
-               
                return;
        }
        
@@ -541,20 +559,23 @@
                /* Set the displayed cover to be the new image */       
                displayed_cover = g_list_nth_data (fetchcover_image_list, 
displayed_cover_index);
                
+               GdkPixbuf *scaled;
                /* If the image has not been retrieved then get it from the net 
*/
                if (displayed_cover->image == NULL)
                {
-                       net_retrieve_image (displayed_cover->url);
-                       if (displayed_cover->image == NULL)
+                       if (! net_retrieve_image (displayed_cover->url) || 
displayed_cover->image == NULL)
                        {
-                               fetchcover_statusbar_update (_("Failed to 
retrieve image."));
-                               g_return_if_fail (displayed_cover->image);
+                               /* XML file downloaded ok but image could not 
be retrieved */
+                               gnome_canvas_item_hide (fetchcover_canvasitem);
+                               return;
                        }
                }
                
-               GdkPixbuf *scaled = 
gdk_pixbuf_scale_simple(displayed_cover->image, IMGSCALE, IMGSCALE, 
GDK_INTERP_NEAREST);
+               fetchcover_debug("Displayed Image path: %s/%s\n", 
displayed_cover->dir, displayed_cover->filename);
+               
+               scaled = gdk_pixbuf_scale_simple(displayed_cover->image, 
IMGSCALE, IMGSCALE, GDK_INTERP_NEAREST);
                gnome_canvas_item_set(fetchcover_canvasitem, "pixbuf", scaled, 
NULL);
-               
+               gnome_canvas_item_show (fetchcover_canvasitem);
                return;
        }
        


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to