Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
This commit is contained in:
commit
71d718e97b
@ -116,6 +116,30 @@ FilenameFromContentDisposition(nsCString contentDisposition, nsCString &fileName
|
|||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static nsresult
|
||||||
|
GetImageProperties(char *imgURIStr, nsIProperties **properties)
|
||||||
|
{
|
||||||
|
nsresult rv;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIURI> imageURI;
|
||||||
|
rv = NewURI(imgURIStr, getter_AddRefs(imageURI));
|
||||||
|
if(NS_FAILED(rv)) return rv;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIServiceManager> mgr;
|
||||||
|
NS_GetServiceManager(getter_AddRefs(mgr));
|
||||||
|
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));
|
||||||
|
if(NS_FAILED(rv)) return rv;
|
||||||
|
|
||||||
|
imgCache->FindEntryProperties(imageURI, properties);
|
||||||
|
NS_ENSURE_TRUE(mgr, NS_ERROR_FAILURE);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
GeckoDocumentObject::GetImageName()
|
GeckoDocumentObject::GetImageName()
|
||||||
{
|
{
|
||||||
@ -123,25 +147,16 @@ GeckoDocumentObject::GetImageName()
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(mImageName.Length()) {
|
||||||
|
return g_strdup(mImageName.get());
|
||||||
|
}
|
||||||
|
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
char *imgURIStr = GetImageURI();
|
char *imgURIStr = GetImageURI();
|
||||||
|
|
||||||
nsCOMPtr<nsIURI> imageURI;
|
|
||||||
rv = NewURI(imgURIStr, getter_AddRefs(imageURI));
|
|
||||||
NS_ENSURE_SUCCESS(rv, NULL);
|
|
||||||
|
|
||||||
nsCOMPtr<nsIServiceManager> mgr;
|
|
||||||
NS_GetServiceManager (getter_AddRefs (mgr));
|
|
||||||
NS_ENSURE_TRUE(mgr, NULL);
|
|
||||||
|
|
||||||
nsCOMPtr<imgICache> imgCache;
|
|
||||||
rv = mgr->GetServiceByContractID("@mozilla.org/image/cache;1",
|
|
||||||
NS_GET_IID (imgICache),
|
|
||||||
getter_AddRefs(imgCache));
|
|
||||||
NS_ENSURE_SUCCESS(rv, NULL);
|
|
||||||
|
|
||||||
nsCOMPtr<nsIProperties> imgProperties;
|
nsCOMPtr<nsIProperties> imgProperties;
|
||||||
imgCache->FindEntryProperties(imageURI, getter_AddRefs(imgProperties));
|
rv = GetImageProperties(imgURIStr, getter_AddRefs(imgProperties));
|
||||||
|
NS_ENSURE_SUCCESS(rv, NULL);
|
||||||
if (imgProperties) {
|
if (imgProperties) {
|
||||||
nsCOMPtr<nsISupportsCString> dispositionCString;
|
nsCOMPtr<nsISupportsCString> dispositionCString;
|
||||||
imgProperties->Get("content-disposition",
|
imgProperties->Get("content-disposition",
|
||||||
@ -155,6 +170,10 @@ GeckoDocumentObject::GetImageName()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!mImageName.Length()) {
|
if (!mImageName.Length()) {
|
||||||
|
nsCOMPtr<nsIURI> imageURI;
|
||||||
|
rv = NewURI(imgURIStr, getter_AddRefs(imageURI));
|
||||||
|
NS_ENSURE_SUCCESS(rv, NULL);
|
||||||
|
|
||||||
nsCOMPtr<nsIURL> url(do_QueryInterface(imageURI));
|
nsCOMPtr<nsIURL> url(do_QueryInterface(imageURI));
|
||||||
if (url) {
|
if (url) {
|
||||||
url->GetFileName(mImageName);
|
url->GetFileName(mImageName);
|
||||||
@ -164,6 +183,36 @@ GeckoDocumentObject::GetImageName()
|
|||||||
return mImageName.Length() ? g_strdup(mImageName.get()) : NULL;
|
return mImageName.Length() ? g_strdup(mImageName.get()) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
GeckoDocumentObject::GetImageMimeType()
|
||||||
|
{
|
||||||
|
if(!IsImage()) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mImageMimeType.Length()) {
|
||||||
|
return g_strdup(mImageMimeType.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult rv;
|
||||||
|
char *imgURIStr = GetImageURI();
|
||||||
|
|
||||||
|
nsCOMPtr<nsIProperties> imgProperties;
|
||||||
|
rv = GetImageProperties(imgURIStr, getter_AddRefs(imgProperties));
|
||||||
|
NS_ENSURE_SUCCESS(rv, NULL);
|
||||||
|
if (imgProperties) {
|
||||||
|
nsCOMPtr<nsISupportsCString> typeCString;
|
||||||
|
imgProperties->Get("type",
|
||||||
|
NS_GET_IID(nsISupportsCString),
|
||||||
|
getter_AddRefs(typeCString));
|
||||||
|
if (typeCString) {
|
||||||
|
typeCString->GetData(mImageMimeType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mImageMimeType.Length() ? g_strdup(mImageMimeType.get()) : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
GeckoDocumentObject::GetImageURI()
|
GeckoDocumentObject::GetImageURI()
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,7 @@ public:
|
|||||||
bool IsImage();
|
bool IsImage();
|
||||||
char *GetImageURI();
|
char *GetImageURI();
|
||||||
char *GetImageName();
|
char *GetImageName();
|
||||||
|
char *GetImageMimeType();
|
||||||
bool SaveImage(const char *filename);
|
bool SaveImage(const char *filename);
|
||||||
private:
|
private:
|
||||||
SugarBrowser *mBrowser;
|
SugarBrowser *mBrowser;
|
||||||
@ -22,6 +23,7 @@ private:
|
|||||||
nsCOMPtr<nsIDOMHTMLImageElement> mImage;
|
nsCOMPtr<nsIDOMHTMLImageElement> mImage;
|
||||||
nsCString mImageURI;
|
nsCString mImageURI;
|
||||||
nsCString mImageName;
|
nsCString mImageName;
|
||||||
|
nsCString mImageMimeType;
|
||||||
protected:
|
protected:
|
||||||
/* additional members */
|
/* additional members */
|
||||||
};
|
};
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include <nsServiceManagerUtils.h>
|
#include <nsServiceManagerUtils.h>
|
||||||
#include <nsIInterfaceRequestorUtils.h>
|
#include <nsIInterfaceRequestorUtils.h>
|
||||||
#include <nsIDOMMouseEvent.h>
|
#include <nsIDOMMouseEvent.h>
|
||||||
|
#include <nsIMIMEService.h>
|
||||||
|
|
||||||
#include "GeckoDragDropHooks.h"
|
#include "GeckoDragDropHooks.h"
|
||||||
#include "GeckoDocumentObject.h"
|
#include "GeckoDocumentObject.h"
|
||||||
@ -66,6 +67,9 @@ UriListDataProvider::GetFlavorData(nsITransferable *aTransferable,
|
|||||||
|
|
||||||
nsresult rv = NS_ERROR_NOT_IMPLEMENTED;
|
nsresult rv = NS_ERROR_NOT_IMPLEMENTED;
|
||||||
char *image_name;
|
char *image_name;
|
||||||
|
char *mime_type;
|
||||||
|
char *file_ext;
|
||||||
|
nsCString mime_ext;
|
||||||
timeval timestamp;
|
timeval timestamp;
|
||||||
|
|
||||||
*aData = nsnull;
|
*aData = nsnull;
|
||||||
@ -83,7 +87,31 @@ UriListDataProvider::GetFlavorData(nsITransferable *aTransferable,
|
|||||||
mFilePath.AppendInt(timestamp.tv_usec);
|
mFilePath.AppendInt(timestamp.tv_usec);
|
||||||
|
|
||||||
image_name = mDocumentObject->GetImageName();
|
image_name = mDocumentObject->GetImageName();
|
||||||
mFilePath.Append(image_name);
|
file_ext = strrchr(image_name, '.');
|
||||||
|
mime_type = mDocumentObject->GetImageMimeType();
|
||||||
|
|
||||||
|
nsCOMPtr<nsIMIMEService> mimeService(do_GetService("@mozilla.org/mime;1",
|
||||||
|
&rv));
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
rv = mimeService->GetPrimaryExtension(nsCString(mime_type),
|
||||||
|
EmptyCString(),
|
||||||
|
mime_ext);
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
if(!file_ext) {
|
||||||
|
mFilePath.Append(image_name);
|
||||||
|
mFilePath.Append(".");
|
||||||
|
mFilePath.Append(mime_ext);
|
||||||
|
} else if(strcmp(file_ext, mime_ext.get())) {
|
||||||
|
image_name[strlen(file_ext)] = 0;
|
||||||
|
mFilePath.Append(image_name);
|
||||||
|
mFilePath.Append(".");
|
||||||
|
mFilePath.Append(mime_ext);
|
||||||
|
} else {
|
||||||
|
mFilePath.Append(image_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free(mime_type);
|
||||||
g_free(image_name);
|
g_free(image_name);
|
||||||
|
|
||||||
if(!mDocumentObject->SaveImage(mFilePath.get())) {
|
if(!mDocumentObject->SaveImage(mFilePath.get())) {
|
||||||
|
Loading…
Reference in New Issue
Block a user