If we receive an application/octet-stream, check the mime type by looking at its extension.

This commit is contained in:
Tomeu 2007-03-30 14:32:07 +02:00
parent e179dbae14
commit 891624888f

View File

@ -3,11 +3,15 @@
#include <nsIFactory.h> #include <nsIFactory.h>
#include <nsIFile.h> #include <nsIFile.h>
#include <nsIFileURL.h> #include <nsIFileURL.h>
#include <nsServiceManagerUtils.h>
#include <nsIMIMEService.h>
#include "sugar-download-manager.h" #include "sugar-download-manager.h"
#include "GeckoDownload.h" #include "GeckoDownload.h"
#define APPLICATION_OCTET_STREAM "application/octet-stream"
class GeckoDownload : public nsITransfer class GeckoDownload : public nsITransfer
{ {
public: public:
@ -62,41 +66,63 @@ GeckoDownload::Init (nsIURI *aSource,
NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE);
file->GetNativePath (mTargetFileName); file->GetNativePath (mTargetFileName);
return NS_OK;
} }
NS_IMETHODIMP NS_IMETHODIMP
GeckoDownload::OnStateChange (nsIWebProgress *aWebProgress, GeckoDownload::OnStateChange(nsIWebProgress *aWebProgress,
nsIRequest *aRequest, nsIRequest *aRequest,
PRUint32 aStateFlags, PRUint32 aStateFlags,
nsresult aStatus) nsresult aStatus)
{ {
SugarDownloadManager *download_manager = sugar_get_download_manager (); SugarDownloadManager *download_manager = sugar_get_download_manager();
if (aStateFlags == STATE_START) { if(aStateFlags == STATE_START) {
nsCString url; nsCString url;
nsCString mimeType; nsCString mimeType;
mMIMEInfo->GetMIMEType (mimeType);
mSource->GetSpec (url);
sugar_download_manager_download_started (download_manager,
url.get (),
mimeType.get (),
mTargetFileName.get ());
} else if (aStateFlags == STATE_STOP) { mMIMEInfo->GetMIMEType(mimeType);
mSource->GetSpec(url);
if (NS_SUCCEEDED (aStatus)) {
sugar_download_manager_download_completed (download_manager,
mTargetFileName.get ());
} else {
sugar_download_manager_download_cancelled (download_manager,
mTargetFileName.get ());
}
}
return NS_OK; /* If the file is application/octet-stream, look up a better mime type
from the extension. */
if(mimeType.Equals(APPLICATION_OCTET_STREAM)) {
nsresult rv;
nsCOMPtr<nsIMIMEService> mimeService(
do_GetService("@mozilla.org/mime;1", &rv));
NS_ENSURE_SUCCESS(rv, rv);
const char *fileExt = strrchr(mTargetFileName.get(), '.');
if(fileExt) {
nsCString contentType;
mimeService->GetTypeFromExtension(nsCString(fileExt),
contentType);
if(!contentType.IsEmpty()) {
mimeType = contentType;
}
}
}
sugar_download_manager_download_started(download_manager,
url.get(),
mimeType.get(),
mTargetFileName.get());
} else if(aStateFlags == STATE_STOP) {
if(NS_SUCCEEDED(aStatus)) {
sugar_download_manager_download_completed(download_manager,
mTargetFileName.get());
} else {
sugar_download_manager_download_cancelled(download_manager,
mTargetFileName.get());
}
}
return NS_OK;
} }
NS_IMETHODIMP NS_IMETHODIMP