[XForms] Implement mediatype file filters in upload. Bug 313768, patch by msterlin, r=olli+aaronr

git-svn-id: svn://10.0.0.236/trunk@208025 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
aaronr%us.ibm.com
2006-08-21 18:51:05 +00:00
parent ae88e7449c
commit 4008764954

View File

@@ -207,8 +207,55 @@ nsXFormsUploadElement::PickFile()
rv = filePicker->Init(internal, filepickerTitle, nsIFilePicker::modeOpen);
NS_ENSURE_SUCCESS(rv, rv);
// set filter "All Files"
// XXX implement "@mediatype" file filters
// Set the file picker filters based on the mediatype attribute.
nsAutoString mediaType;
mElement->GetAttribute(NS_LITERAL_STRING("mediatype"), mediaType);
if (!mediaType.IsEmpty()) {
// The mediatype attribute contains a space delimited list of mime types.
nsresult rv;
nsCOMPtr<nsIMIMEService> mimeService =
do_GetService("@mozilla.org/mime;1", &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsAString::const_iterator start, end, iter;
mediaType.BeginReading(start);
mediaType.BeginReading(iter);
mediaType.EndReading(end);
nsAutoString fileFilter;
nsAutoString mimeType;
while (iter != end) {
if (FindCharInReadable(' ', iter, end)) {
mimeType = Substring(start, iter);
// Skip the space.
++iter;
// Save the starting position for the next mime type (if any).
start = iter;
} else {
// Only 1 media type or we've reached the end of the list.
mimeType = Substring(start, end);
}
// Map the mime type to a file extension and add the extension to the file
// type filter for the file dialog.
nsCAutoString fileExtension;
rv = mimeService->GetPrimaryExtension(NS_ConvertUTF16toUTF8(mimeType),
EmptyCString(), fileExtension);
if (NS_SUCCEEDED(rv) && !fileExtension.IsEmpty()) {
fileFilter.AppendLiteral("*.");
fileFilter.Append(NS_ConvertUTF8toUTF16(fileExtension));
if (iter != end) {
fileFilter.AppendLiteral(";");
}
}
}
// Append the file extension filter.
filePicker->AppendFilter(fileFilter, fileFilter);
}
// Always add 'All Files'
filePicker->AppendFilters(nsIFilePicker::filterAll);
// open dialog