diff options
author | Marco Pesenti Gritti <mpg@redhat.com> | 2007-03-17 11:02:35 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <mpg@redhat.com> | 2007-03-17 11:02:35 (GMT) |
commit | d6a9f16ca828338c3269f32a6302d9380d754cc8 (patch) | |
tree | 2885515923f515e0a4c929570a0cb64f695bc9f4 /lib | |
parent | ad0621fa8235cdf10a651da57b63ec062ea4135b (diff) |
Improve image name detection
Diffstat (limited to 'lib')
-rw-r--r-- | lib/src/sugar-browser.cpp | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/lib/src/sugar-browser.cpp b/lib/src/sugar-browser.cpp index 3f0a1c3..bac70d0 100644 --- a/lib/src/sugar-browser.cpp +++ b/lib/src/sugar-browser.cpp @@ -399,26 +399,20 @@ NewURI(const char *uri, nsIURI **result) return ioService->NewURI (cSpec, nsnull, nsnull, result); } -static char * -get_image_name_from_cache(const char *uri) +static nsresult +ImageNameFromCache(nsIURI *imgURI, nsCString &imgName) { nsresult rv; - g_print(uri); - nsCOMPtr<nsIServiceManager> mgr; NS_GetServiceManager (getter_AddRefs (mgr)); - NS_ENSURE_TRUE(mgr, NULL); + NS_ENSURE_TRUE(mgr, NS_ERROR_FAILURE); nsCOMPtr<imgICache> imgCache; rv = mgr->GetServiceByContractID("@mozilla.org/image/cache;1", NS_GET_IID (imgICache), getter_AddRefs(imgCache)); - NS_ENSURE_SUCCESS(rv, NULL); - - nsCOMPtr<nsIURI> imgURI; - rv = NewURI(uri, getter_AddRefs(imgURI)); - NS_ENSURE_SUCCESS(rv, NULL); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); nsCOMPtr<nsIProperties> imgProperties; imgCache->FindEntryProperties(imgURI, getter_AddRefs(imgProperties)); @@ -435,7 +429,7 @@ get_image_name_from_cache(const char *uri) nsCOMPtr<nsIMIMEHeaderParam> mimehdrpar = do_GetService("@mozilla.org/network/mime-hdrparam;1"); - NS_ENSURE_TRUE(mimehdrpar, NULL); + NS_ENSURE_TRUE(mimehdrpar, NS_ERROR_FAILURE); nsString fileName; rv = mimehdrpar->GetParameter (contentDisposition, "filename", @@ -450,13 +444,33 @@ get_image_name_from_cache(const char *uri) if (NS_SUCCEEDED(rv) && fileName.Length()) { nsCString cFileName; - NS_UTF16ToCString (fileName, NS_CSTRING_ENCODING_UTF8, cFileName); - return g_strdup(cFileName.get()); + NS_UTF16ToCString (fileName, NS_CSTRING_ENCODING_UTF8, imgName); } } } +} + +static char * +get_image_name(const char *uri) +{ + nsresult rv; + + nsCString imgName; + + nsCOMPtr<nsIURI> imgURI; + rv = NewURI(uri, getter_AddRefs(imgURI)); + NS_ENSURE_SUCCESS(rv, NULL); + + ImageNameFromCache(imgURI, imgName); + + if (!imgName.Length()) { + nsCOMPtr<nsIURL> url(do_QueryInterface(imgURI)); + if (url) { + url->GetFileName(imgName); + } + } - return NULL; + return imgName.Length() ? g_strdup(imgName.get()) : NULL; } static gboolean @@ -504,7 +518,7 @@ dom_mouse_click_cb(GtkMozEmbed *embed, nsIDOMMouseEvent *mouseEvent) nsCString cImg; NS_UTF16ToCString (img, NS_CSTRING_ENCODING_UTF8, cImg); event->image_uri = g_strdup(cImg.get()); - event->image_name = get_image_name_from_cache(event->image_uri); + event->image_name = get_image_name(event->image_uri); } } |