Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMarco 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)
commitd6a9f16ca828338c3269f32a6302d9380d754cc8 (patch)
tree2885515923f515e0a4c929570a0cb64f695bc9f4 /lib
parentad0621fa8235cdf10a651da57b63ec062ea4135b (diff)
Improve image name detection
Diffstat (limited to 'lib')
-rw-r--r--lib/src/sugar-browser.cpp44
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);
}
}