NS_IMETHODIMP nsBaseFilePicker::AppendFilters(PRInt32 aFilterMask) { nsresult rv; nsCOMPtr<nsIStringBundleService> stringService = do_GetService(NS_STRINGBUNDLE_CONTRACTID); nsCOMPtr<nsIStringBundle> stringBundle; rv = stringService->CreateBundle(FILEPICKER_PROPERTIES, getter_AddRefs(stringBundle)); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; nsXPIDLString title; nsXPIDLString filter; if (aFilterMask & filterAll) { stringBundle->GetStringFromName(NS_LITERAL_STRING("allTitle").get(), getter_Copies(title)); stringBundle->GetStringFromName(NS_LITERAL_STRING("allFilter").get(), getter_Copies(filter)); AppendFilter(title,filter); } if (aFilterMask & filterHTML) { stringBundle->GetStringFromName(NS_LITERAL_STRING("htmlTitle").get(), getter_Copies(title)); stringBundle->GetStringFromName(NS_LITERAL_STRING("htmlFilter").get(), getter_Copies(filter)); AppendFilter(title,filter); } if (aFilterMask & filterText) { stringBundle->GetStringFromName(NS_LITERAL_STRING("textTitle").get(), getter_Copies(title)); stringBundle->GetStringFromName(NS_LITERAL_STRING("textFilter").get(), getter_Copies(filter)); AppendFilter(title,filter); } if (aFilterMask & filterImages) { stringBundle->GetStringFromName(NS_LITERAL_STRING("imageTitle").get(), getter_Copies(title)); stringBundle->GetStringFromName(NS_LITERAL_STRING("imageFilter").get(), getter_Copies(filter)); AppendFilter(title,filter); } if (aFilterMask & filterXML) { stringBundle->GetStringFromName(NS_LITERAL_STRING("xmlTitle").get(), getter_Copies(title)); stringBundle->GetStringFromName(NS_LITERAL_STRING("xmlFilter").get(), getter_Copies(filter)); AppendFilter(title,filter); } if (aFilterMask & filterXUL) { stringBundle->GetStringFromName(NS_LITERAL_STRING("xulTitle").get(), getter_Copies(title)); stringBundle->GetStringFromName(NS_LITERAL_STRING("xulFilter").get(), getter_Copies(filter)); AppendFilter(title, filter); } if (aFilterMask & filterApps) { stringBundle->GetStringFromName(NS_LITERAL_STRING("appsTitle").get(), getter_Copies(title)); // Pass the magic string "..apps" to the platform filepicker, which it // should recognize and do the correct platform behavior for. AppendFilter(title, NS_LITERAL_STRING("..apps")); } return NS_OK; }
nsresult nsBeckyFilters::ParseFilterFile(nsIFile *aFile, bool aIncoming) { nsresult rv; nsCOMPtr<nsILineInputStream> lineStream; rv = nsBeckyUtils::CreateLineInputStream(aFile, getter_AddRefs(lineStream)); NS_ENSURE_SUCCESS(rv, rv); bool more = true; nsAutoCString line; nsCOMPtr<nsIMsgFilter> filter; while (NS_SUCCEEDED(rv) && more) { rv = lineStream->ReadLine(line, &more); switch (line.CharAt(0)) { case ':': if (line.EqualsLiteral(":Begin \"\"")) { CreateFilter(aIncoming, getter_AddRefs(filter)); } else if (line.EqualsLiteral(":End \"\"")) { if (filter) AppendFilter(filter); filter = nullptr; } break; case '!': SetRuleAction(line, filter); break; case '@': SetSearchTerm(line, filter); break; case '$': // $X: disabled if (StringBeginsWith(line, NS_LITERAL_CSTRING("$X")) && filter) { filter->SetEnabled(false); } break; default: break; } } return NS_OK; }