void nsPop3Service::AlertServerBusy(nsIMsgMailNewsUrl *url) { nsresult rv; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService("@mozilla.org/intl/stringbundle;1", &rv)); if (NS_FAILED(rv)) return; nsCOMPtr<nsIStringBundle> bundle; rv = bundleService->CreateBundle("chrome://messenger/locale/localMsgs.properties", getter_AddRefs(bundle)); if (NS_FAILED(rv)) return; nsCOMPtr<nsIMsgWindow> msgWindow; nsCOMPtr<nsIPrompt> dialog; rv = url->GetMsgWindow(getter_AddRefs(msgWindow)); //it is ok to have null msgWindow, for example when biffing if (NS_SUCCEEDED(rv) && msgWindow) { rv = msgWindow->GetPromptDialog(getter_AddRefs(dialog)); if (NS_SUCCEEDED(rv)) { nsString alertString; bundle->GetStringFromID(POP3_MESSAGE_FOLDER_BUSY, getter_Copies(alertString)); if (!alertString.IsEmpty()) dialog->Alert(nsnull, alertString.get()); } } }
nsresult nsAppleMailImportMail::Initialize() { nsresult rv; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); return bundleService->CreateBundle(APPLEMAIL_MSGS_URL, getter_AddRefs(mBundle)); }
nsAppleMailImportModule::nsAppleMailImportModule() { // Init logging module. if (!APPLEMAILLOGMODULE) APPLEMAILLOGMODULE = PR_NewLogModule("APPLEMAILIMPORTLOG"); IMPORT_LOG0("nsAppleMailImportModule Created"); nsCOMPtr<nsIStringBundleService> bundleService(do_GetService(NS_STRINGBUNDLE_CONTRACTID)); if (bundleService) bundleService->CreateBundle(APPLEMAIL_MSGS_URL, getter_AddRefs(mBundle)); }
nsresult nsMsgDisplayMessageByID(nsIPrompt * aPrompt, PRInt32 msgID, const PRUnichar * windowTitle) { nsresult rv; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService("@mozilla.org/intl/stringbundle;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIStringBundle> bundle; rv = bundleService->CreateBundle("chrome://messenger/locale/messengercompose/composeMsgs.properties", getter_AddRefs(bundle)); NS_ENSURE_SUCCESS(rv, rv); nsString msg; bundle->GetStringFromID(NS_IS_MSG_ERROR(msgID) ? NS_ERROR_GET_CODE(msgID) : msgID, getter_Copies(msg)); return nsMsgDisplayMessageByString(aPrompt, msg.get(), windowTitle); }
nsresult nsMsgAskBooleanQuestionByID(nsIPrompt * aPrompt, PRInt32 msgID, PRBool *answer, const PRUnichar * windowTitle) { nsresult rv; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService("@mozilla.org/intl/stringbundle;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIStringBundle> bundle; rv = bundleService->CreateBundle("chrome://messenger/locale/messengercompose/composeMsgs.properties", getter_AddRefs(bundle)); NS_ENSURE_SUCCESS(rv, rv); nsString msg; bundle->GetStringFromID(msgID, getter_Copies(msg)); return nsMsgAskBooleanQuestionByString(aPrompt, msg.get(), answer, windowTitle); }
PRBool nsMapiHook::IsBlindSendAllowed() { PRBool enabled = PR_FALSE; PRBool warn = PR_TRUE; nsCOMPtr<nsIPrefBranch> prefBranch = do_GetService(NS_PREFSERVICE_CONTRACTID); if (prefBranch) { prefBranch->GetBoolPref(PREF_MAPI_WARN_PRIOR_TO_BLIND_SEND, &warn); prefBranch->GetBoolPref(PREF_MAPI_BLIND_SEND_ENABLED, &enabled); } if (!enabled) return PR_FALSE; if (!warn) return PR_TRUE; // Everything is okay. nsresult rv; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv)); if (NS_FAILED(rv) || !bundleService) return PR_FALSE; nsCOMPtr<nsIStringBundle> bundle; rv = bundleService->CreateBundle(MAPI_PROPERTIES_CHROME, getter_AddRefs(bundle)); if (NS_FAILED(rv) || !bundle) return PR_FALSE; nsString warningMsg; rv = bundle->GetStringFromName(NS_LITERAL_STRING("mapiBlindSendWarning").get(), getter_Copies(warningMsg)); if (NS_FAILED(rv)) return PR_FALSE; nsString dontShowAgainMessage; rv = bundle->GetStringFromName(NS_LITERAL_STRING("mapiBlindSendDontShowAgain").get(), getter_Copies(dontShowAgainMessage)); if (NS_FAILED(rv)) return PR_FALSE; nsCOMPtr<nsIPromptService> dlgService(do_GetService(NS_PROMPTSERVICE_CONTRACTID, &rv)); if (NS_FAILED(rv) || !dlgService) return PR_FALSE; PRBool continueToWarn = PR_TRUE; PRBool okayToContinue = PR_FALSE; dlgService->ConfirmCheck(nsnull, nsnull, warningMsg.get(), dontShowAgainMessage.get(), &continueToWarn, &okayToContinue); if (!continueToWarn && okayToContinue && prefBranch) prefBranch->SetBoolPref(PREF_MAPI_WARN_PRIOR_TO_BLIND_SEND, PR_FALSE); return okayToContinue; }
nsresult nsMsgMdnGenerator::GetStringFromName(const PRUnichar *aName, PRUnichar **aResultString) { DEBUG_MDN("nsMsgMdnGenerator::GetStringFromName"); nsresult rv; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv,rv); nsCOMPtr <nsIStringBundle> bundle; rv = bundleService->CreateBundle(MDN_STRINGBUNDLE_URL, getter_AddRefs(bundle)); NS_ENSURE_SUCCESS(rv,rv); rv = bundle->GetStringFromName(aName, aResultString); NS_ENSURE_SUCCESS(rv,rv); return rv; }
nsresult GetBrandName(nsACString& aBrandName) { // get the product brand name from localized strings nsresult rv; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService("@mozilla.org/intl/stringbundle;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIStringBundle> brandBundle; rv = bundleService->CreateBundle(BRAND_PROPERTIES, getter_AddRefs(brandBundle)); NS_ENSURE_TRUE(brandBundle, rv); nsString brandName; rv = brandBundle->GetStringFromName(MOZ_UTF16("brandShortName"), getter_Copies(brandName)); NS_ENSURE_SUCCESS(rv, rv); CopyUTF16toUTF8(brandName, aBrandName); return rv; }
nsresult nsMsgBuildErrorMessageByID(PRInt32 msgID, nsString& retval, nsString* param0, nsString* param1) { nsresult rv; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService("@mozilla.org/intl/stringbundle;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIStringBundle> bundle; rv = bundleService->CreateBundle("chrome://messenger/locale/messengercompose/composeMsgs.properties", getter_AddRefs(bundle)); NS_ENSURE_SUCCESS(rv, rv); nsString msg; rv = bundle->GetStringFromID(NS_IS_MSG_ERROR(msgID) ? NS_ERROR_GET_CODE(msgID) : msgID, getter_Copies(retval)); NS_ENSURE_SUCCESS(rv, rv); if (param0) retval.ReplaceSubstring(NS_LITERAL_STRING("%P0%"), *param0); if (param1) retval.ReplaceSubstring(NS_LITERAL_STRING("%P1%"), *param1); return rv; }
PRBool nsMapiHook::DisplayLoginDialog(PRBool aLogin, PRUnichar **aUsername, PRUnichar **aPassword) { nsresult rv; PRBool btnResult = PR_FALSE; nsCOMPtr<nsIPromptService> dlgService(do_GetService(NS_PROMPTSERVICE_CONTRACTID, &rv)); if (NS_SUCCEEDED(rv) && dlgService) { nsCOMPtr<nsIStringBundleService> bundleService(do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv)); if (NS_FAILED(rv) || !bundleService) return PR_FALSE; nsCOMPtr<nsIStringBundle> bundle; rv = bundleService->CreateBundle(MAPI_PROPERTIES_CHROME, getter_AddRefs(bundle)); if (NS_FAILED(rv) || !bundle) return PR_FALSE; nsCOMPtr<nsIStringBundle> brandBundle; rv = bundleService->CreateBundle( "chrome://branding/locale/brand.properties", getter_AddRefs(brandBundle)); if (NS_FAILED(rv)) return PR_FALSE; nsString brandName; rv = brandBundle->GetStringFromName( NS_LITERAL_STRING("brandFullName").get(), getter_Copies(brandName)); if (NS_FAILED(rv)) return PR_FALSE; nsString loginTitle; const PRUnichar *brandStrings[] = { brandName.get() }; NS_NAMED_LITERAL_STRING(loginTitlePropertyTag, "loginTitle"); const PRUnichar *dTitlePropertyTag = loginTitlePropertyTag.get(); rv = bundle->FormatStringFromName(dTitlePropertyTag, brandStrings, 1, getter_Copies(loginTitle)); if (NS_FAILED(rv)) return PR_FALSE; if (aLogin) { nsString loginText; rv = bundle->GetStringFromName(NS_LITERAL_STRING("loginTextwithName").get(), getter_Copies(loginText)); if (NS_FAILED(rv) || loginText.IsEmpty()) return PR_FALSE; rv = dlgService->PromptUsernameAndPassword(nsnull, loginTitle.get(), loginText.get(), aUsername, aPassword, nsnull, PR_FALSE, &btnResult); } else { //nsString loginString; nsString loginText; const PRUnichar *userNameStrings[] = { *aUsername }; NS_NAMED_LITERAL_STRING(loginTextPropertyTag, "loginText"); const PRUnichar *dpropertyTag = loginTextPropertyTag.get(); rv = bundle->FormatStringFromName(dpropertyTag, userNameStrings, 1, getter_Copies(loginText)); if (NS_FAILED(rv)) return PR_FALSE; rv = dlgService->PromptPassword(nsnull, loginTitle.get(), loginText.get(), aPassword, nsnull, PR_FALSE, &btnResult); } } return btnResult; }
nsresult nsMsgAttachmentHandler::UrlExit(nsresult status, const PRUnichar* aMsg) { NS_ASSERTION(m_mime_delivery_state != nsnull, "not-null m_mime_delivery_state"); // Close the file, but don't delete the disk file (or the file spec.) if (mOutFile) { mOutFile->Close(); mOutFile = nsnull; } // this silliness is because Windows nsILocalFile caches its file size // so if an output stream writes to it, it will still return the original // cached size. if (mTmpFile) { nsCOMPtr <nsIFile> tmpFile; mTmpFile->Clone(getter_AddRefs(tmpFile)); mTmpFile = do_QueryInterface(tmpFile); } mRequest = nsnull; // First things first, we are now going to see if this is an HTML // Doc and if it is, we need to see if we can determine the charset // for this part by sniffing the HTML file. // This is needed only when the charset is not set already. // (e.g. a charset may be specified in HTTP header) // if (!m_type.IsEmpty() && m_charset.IsEmpty() && m_type.LowerCaseEqualsLiteral(TEXT_HTML)) m_charset = nsMsgI18NParseMetaCharset(mTmpFile); nsresult mimeDeliveryStatus; m_mime_delivery_state->GetStatus(&mimeDeliveryStatus); if (mimeDeliveryStatus == NS_ERROR_ABORT) status = NS_ERROR_ABORT; if (NS_FAILED(status) && status != NS_ERROR_ABORT && NS_SUCCEEDED(mimeDeliveryStatus)) { // At this point, we should probably ask a question to the user // if we should continue without this attachment. // bool keepOnGoing = true; nsCString turl; nsString msg; PRUnichar *printfString = nsnull; nsresult rv; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService("@mozilla.org/intl/stringbundle;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIStringBundle> bundle; rv = bundleService->CreateBundle("chrome://messenger/locale/messengercompose/composeMsgs.properties", getter_AddRefs(bundle)); NS_ENSURE_SUCCESS(rv, rv); nsMsgDeliverMode mode = nsIMsgSend::nsMsgDeliverNow; m_mime_delivery_state->GetDeliveryMode(&mode); if (mode == nsIMsgSend::nsMsgSaveAsDraft || mode == nsIMsgSend::nsMsgSaveAsTemplate) bundle->GetStringFromID(NS_MSG_FAILURE_ON_OBJ_EMBED_WHILE_SAVING, getter_Copies(msg)); else bundle->GetStringFromID(NS_MSG_FAILURE_ON_OBJ_EMBED_WHILE_SENDING, getter_Copies(msg)); if (!m_realName.IsEmpty()) printfString = nsTextFormatter::smprintf(msg.get(), m_realName.get()); else if (NS_SUCCEEDED(mURL->GetSpec(turl)) && !turl.IsEmpty()) { nsCAutoString unescapedUrl; MsgUnescapeString(turl, 0, unescapedUrl); if (unescapedUrl.IsEmpty()) printfString = nsTextFormatter::smprintf(msg.get(), turl.get()); else printfString = nsTextFormatter::smprintf(msg.get(), unescapedUrl.get()); } else printfString = nsTextFormatter::smprintf(msg.get(), "?"); nsCOMPtr<nsIPrompt> aPrompt; if (m_mime_delivery_state) m_mime_delivery_state->GetDefaultPrompt(getter_AddRefs(aPrompt)); nsMsgAskBooleanQuestionByString(aPrompt, printfString, &keepOnGoing); PR_FREEIF(printfString); if (keepOnGoing) { status = 0; m_bogus_attachment = true; //That will cause this attachment to be ignored. } else { status = NS_ERROR_ABORT; m_mime_delivery_state->SetStatus(status); nsresult ignoreMe; m_mime_delivery_state->Fail(status, nsnull, &ignoreMe); m_mime_delivery_state->NotifyListenerOnStopSending(nsnull, status, 0, nsnull); SetMimeDeliveryState(nsnull); return status; } } m_done = true; // // Ok, now that we have the file here on disk, we need to see if there was // a need to do conversion to plain text...if so, the magic happens here, // otherwise, just move on to other attachments... // if (NS_SUCCEEDED(status) && !m_type.LowerCaseEqualsLiteral(TEXT_PLAIN) && m_desiredType.LowerCaseEqualsLiteral(TEXT_PLAIN)) { // // Conversion to plain text desired. // PRInt32 width = 72; nsCOMPtr<nsIPrefBranch> pPrefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID)); if (pPrefBranch) pPrefBranch->GetIntPref("mailnews.wraplength", &width); // Let sanity reign! if (width == 0) width = 72; else if (width < 10) width = 10; else if (width > 30000) width = 30000; // // Now use the converter service here to do the right // thing and convert this data to plain text for us! // nsAutoString conData; if (NS_SUCCEEDED(LoadDataFromFile(mTmpFile, conData, true))) { if (NS_SUCCEEDED(ConvertBufToPlainText(conData, UseFormatFlowed(m_charset.get())))) { if (mDeleteFile) mTmpFile->Remove(false); nsCOMPtr<nsIOutputStream> outputStream; nsresult rv = NS_NewLocalFileOutputStream(getter_AddRefs(outputStream), mTmpFile, PR_WRONLY | PR_CREATE_FILE, 00600); if (NS_SUCCEEDED(rv)) { nsCAutoString tData; if (NS_FAILED(ConvertFromUnicode(m_charset.get(), conData, tData))) LossyCopyUTF16toASCII(conData, tData); if (!tData.IsEmpty()) { PRUint32 bytesWritten; (void) outputStream->Write(tData.get(), tData.Length(), &bytesWritten); } outputStream->Close(); // this silliness is because Windows nsILocalFile caches its file size // so if an output stream writes to it, it will still return the original // cached size. if (mTmpFile) { nsCOMPtr <nsIFile> tmpFile; mTmpFile->Clone(getter_AddRefs(tmpFile)); mTmpFile = do_QueryInterface(tmpFile); } } } } m_type = m_desiredType; m_desiredType.Truncate(); m_encoding.Truncate(); } PRUint32 pendingAttachmentCount = 0; m_mime_delivery_state->GetPendingAttachmentCount(&pendingAttachmentCount); NS_ASSERTION (pendingAttachmentCount > 0, "no more pending attachment"); m_mime_delivery_state->SetPendingAttachmentCount(pendingAttachmentCount - 1); bool processAttachmentsSynchronously = false; m_mime_delivery_state->GetProcessAttachmentsSynchronously(&processAttachmentsSynchronously); if (NS_SUCCEEDED(status) && processAttachmentsSynchronously) { /* Find the next attachment which has not yet been loaded, if any, and start it going. */ PRUint32 i; nsMsgAttachmentHandler *next = 0; nsMsgAttachmentHandler *attachments = nsnull; PRUint32 attachmentCount = 0; m_mime_delivery_state->GetAttachmentCount(&attachmentCount); if (attachmentCount) m_mime_delivery_state->GetAttachmentHandlers(&attachments); for (i = 0; i < attachmentCount; i++) { if (!attachments[i].m_done) { next = &attachments[i]; // // rhp: We need to get a little more understanding to failed URL // requests. So, at this point if most of next is NULL, then we // should just mark it fetched and move on! We probably ignored // this earlier on in the send process. // if ( (!next->mURL) && (next->m_uri.IsEmpty()) ) { attachments[i].m_done = true; m_mime_delivery_state->GetPendingAttachmentCount(&pendingAttachmentCount); m_mime_delivery_state->SetPendingAttachmentCount(pendingAttachmentCount - 1); next->mPartUserOmissionOverride = true; next = nsnull; continue; } break; } } if (next) { int status = next->SnarfAttachment(mCompFields); if (NS_FAILED(status)) { nsresult ignoreMe; m_mime_delivery_state->Fail(status, nsnull, &ignoreMe); m_mime_delivery_state->NotifyListenerOnStopSending(nsnull, status, 0, nsnull); SetMimeDeliveryState(nsnull); return NS_ERROR_UNEXPECTED; } } } m_mime_delivery_state->GetPendingAttachmentCount(&pendingAttachmentCount); if (pendingAttachmentCount == 0) { // If this is the last attachment, then either complete the // delivery (if successful) or report the error by calling // the exit routine and terminating the delivery. if (NS_FAILED(status)) { nsresult ignoreMe; m_mime_delivery_state->Fail(status, aMsg, &ignoreMe); m_mime_delivery_state->NotifyListenerOnStopSending(nsnull, status, aMsg, nsnull); SetMimeDeliveryState(nsnull); return NS_ERROR_UNEXPECTED; } else { status = m_mime_delivery_state->GatherMimeAttachments (); if (NS_FAILED(status)) { nsresult ignoreMe; m_mime_delivery_state->Fail(status, aMsg, &ignoreMe); m_mime_delivery_state->NotifyListenerOnStopSending(nsnull, status, aMsg, nsnull); SetMimeDeliveryState(nsnull); return NS_ERROR_UNEXPECTED; } } } else { // If this is not the last attachment, but it got an error, // then report that error and continue if (NS_FAILED(status)) { nsresult ignoreMe; m_mime_delivery_state->Fail(status, aMsg, &ignoreMe); } } SetMimeDeliveryState(nsnull); return NS_OK; }
NS_IMETHODIMP nsGNOMEShellService::SetDesktopBackground(nsIDOMElement* aElement, int32_t aPosition) { // get the product brand name from localized strings nsresult rv; nsString brandName; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService("@mozilla.org/intl/stringbundle;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIStringBundle> brandBundle; rv = bundleService->CreateBundle(BRAND_PROPERTIES, getter_AddRefs(brandBundle)); NS_ENSURE_TRUE(brandBundle, rv); rv = brandBundle->GetStringFromName(NS_LITERAL_STRING("brandShortName").get(), getter_Copies(brandName)); NS_ENSURE_SUCCESS(rv, rv); // build the file name nsCString filePath(PR_GetEnv("HOME")); filePath.Append('/'); filePath.Append(NS_ConvertUTF16toUTF8(brandName)); filePath.AppendLiteral("_wallpaper.png"); // get the image container nsCOMPtr<nsIImageLoadingContent> imageContent(do_QueryInterface(aElement, &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<imgIRequest> request; rv = imageContent->GetRequest(nsIImageLoadingContent::CURRENT_REQUEST, getter_AddRefs(request)); NS_ENSURE_TRUE(request, rv); nsCOMPtr<imgIContainer> container; rv = request->GetImage(getter_AddRefs(container)); NS_ENSURE_TRUE(request, rv); nsCOMPtr<nsIImageToPixbuf> imgToPixbuf(do_GetService("@mozilla.org/widget/image-to-gdk-pixbuf;1")); if (!imgToPixbuf) return NS_ERROR_NOT_AVAILABLE; GdkPixbuf* pixbuf = imgToPixbuf->ConvertImageToPixbuf(container); if (!pixbuf) return NS_ERROR_NOT_AVAILABLE; // write the image to a file in the home dir gboolean res = gdk_pixbuf_save(pixbuf, filePath.get(), "png", NULL, NULL); g_object_unref(pixbuf); if (!res) return NS_ERROR_FAILURE; // set desktop wallpaper filling style const char* options; switch (aPosition) { case BACKGROUND_TILE: options = "wallpaper"; break; case BACKGROUND_STRETCH: options = "stretched"; break; case BACKGROUND_FILL: options = "zoom"; break; case BACKGROUND_FIT: options = "scaled"; break; default: options = "centered"; break; } // Try GSettings first. If we don't have GSettings or the right schema, fall back // to using GConf instead. Note that if GSettings works ok, the changes get // mirrored to GConf by the gsettings->gconf bridge in gnome-settings-daemon nsCOMPtr<nsIGSettingsService> gsettings(do_GetService(NS_GSETTINGSSERVICE_CONTRACTID)); if (gsettings) { nsCOMPtr<nsIGSettingsCollection> background_settings; gsettings->GetCollectionForSchema(NS_LITERAL_CSTRING(OGDB_SCHEMA), getter_AddRefs(background_settings)); if (background_settings) { gchar *file_uri = g_filename_to_uri(filePath.get(), NULL, NULL); if (!file_uri) return NS_ERROR_FAILURE; background_settings->SetString(NS_LITERAL_CSTRING(OGDB_OPTIONS), nsDependentCString(options)); background_settings->SetString(NS_LITERAL_CSTRING(OGDB_IMAGE), nsDependentCString(file_uri)); g_free(file_uri); background_settings->SetBoolean(NS_LITERAL_CSTRING(OGDB_DRAWBG), true); return NS_OK; } } // if the file was written successfully, set it as the system wallpaper nsCOMPtr<nsIGConfService> gconf(do_GetService(NS_GCONFSERVICE_CONTRACTID)); if (gconf) { gconf->SetString(NS_LITERAL_CSTRING(DGB_OPTIONS), nsDependentCString(options)); // Set the image to an empty string first to force a refresh (since we could // be writing a new image on top of an existing SeaMonkey_wallpaper.png // and nautilus doesn't monitor the file for changes). gconf->SetString(NS_LITERAL_CSTRING(DGB_IMAGE), EmptyCString()); gconf->SetString(NS_LITERAL_CSTRING(DGB_IMAGE), filePath); gconf->SetBool(NS_LITERAL_CSTRING(DGB_DRAWBG), true); } return NS_OK; }
/* nsresult displayReport (in nsIPrompt prompt, in boolean showErrorOnly, in boolean dontShowReportTwice); */ NS_IMETHODIMP nsMsgSendReport::DisplayReport(nsIPrompt *prompt, bool showErrorOnly, bool dontShowReportTwice, nsresult *_retval) { NS_ENSURE_ARG_POINTER(_retval); nsresult currError = NS_OK; mProcessReport[mCurrentProcess]->GetError(&currError); *_retval = currError; if (dontShowReportTwice && mAlreadyDisplayReport) return NS_OK; if (showErrorOnly && NS_SUCCEEDED(currError)) return NS_OK; nsString currMessage; mProcessReport[mCurrentProcess]->GetMessage(getter_Copies(currMessage)); nsresult rv; // don't step on currError. nsCOMPtr<nsIStringBundleService> bundleService(do_GetService("@mozilla.org/intl/stringbundle;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIStringBundle> bundle; rv = bundleService->CreateBundle("chrome://messenger/locale/messengercompose/composeMsgs.properties", getter_AddRefs(bundle)); if (NS_FAILED(rv)) { //TODO need to display a generic hardcoded message mAlreadyDisplayReport = true; return NS_OK; } nsString dialogTitle; nsString dialogMessage; if (NS_SUCCEEDED(currError)) { //TODO display a success error message return NS_OK; } //Do we have an explanation of the error? if no, try to build one... if (currMessage.IsEmpty()) { switch (currError) { case NS_BINDING_ABORTED: case NS_ERROR_SEND_FAILED: case NS_ERROR_SEND_FAILED_BUT_NNTP_OK: case NS_MSG_FAILED_COPY_OPERATION: case NS_MSG_UNABLE_TO_SEND_LATER: case NS_MSG_UNABLE_TO_SAVE_DRAFT: case NS_MSG_UNABLE_TO_SAVE_TEMPLATE: //Ignore, don't need to repeat ourself. break; default: nsMsgGetMessageByID(currError, currMessage); break; } } if (mDeliveryMode == nsIMsgCompDeliverMode::Now || mDeliveryMode == nsIMsgCompDeliverMode::SendUnsent) { // SMTP is taking care of it's own error message and will return NS_ERROR_BUT_DONT_SHOW_ALERT as error code. // In that case, we must not show an alert ourself. if (currError == NS_ERROR_BUT_DONT_SHOW_ALERT) { mAlreadyDisplayReport = true; return NS_OK; } bundle->GetStringFromID(NS_MSG_SEND_ERROR_TITLE, getter_Copies(dialogTitle)); PRInt32 preStrId = NS_ERROR_SEND_FAILED; bool askToGoBackToCompose = false; switch (mCurrentProcess) { case process_BuildMessage : preStrId = NS_ERROR_SEND_FAILED; askToGoBackToCompose = false; break; case process_NNTP : preStrId = NS_ERROR_SEND_FAILED; askToGoBackToCompose = false; break; case process_SMTP : bool nntpProceeded; mProcessReport[process_NNTP]->GetProceeded(&nntpProceeded); if (nntpProceeded) preStrId = NS_ERROR_SEND_FAILED_BUT_NNTP_OK; else preStrId = NS_ERROR_SEND_FAILED; askToGoBackToCompose = false; break; case process_Copy: preStrId = NS_MSG_FAILED_COPY_OPERATION; askToGoBackToCompose = (mDeliveryMode == nsIMsgCompDeliverMode::Now); break; case process_FCC: preStrId = NS_MSG_FAILED_COPY_OPERATION; askToGoBackToCompose = (mDeliveryMode == nsIMsgCompDeliverMode::Now); break; } bundle->GetStringFromID(preStrId, getter_Copies(dialogMessage)); //Do we already have an error message? if (!askToGoBackToCompose && currMessage.IsEmpty()) { //we don't have an error description but we can put a generic explanation bundle->GetStringFromID(NS_MSG_GENERIC_FAILURE_EXPLANATION, getter_Copies(currMessage)); } if (!currMessage.IsEmpty()) { //Don't need to repeat ourself! if (!currMessage.Equals(dialogMessage)) { if (!dialogMessage.IsEmpty()) dialogMessage.Append(PRUnichar('\n')); dialogMessage.Append(currMessage); } } if (askToGoBackToCompose) { bool oopsGiveMeBackTheComposeWindow = true; nsString text1; bundle->GetStringFromID(NS_MSG_ASK_TO_COMEBACK_TO_COMPOSE, getter_Copies(text1)); if (!dialogMessage.IsEmpty()) dialogMessage.AppendLiteral("\n"); dialogMessage.Append(text1); nsMsgAskBooleanQuestionByString(prompt, dialogMessage.get(), &oopsGiveMeBackTheComposeWindow, dialogTitle.get()); if (!oopsGiveMeBackTheComposeWindow) *_retval = NS_OK; } else nsMsgDisplayMessageByString(prompt, dialogMessage.get(), dialogTitle.get()); } else { PRInt32 titleID; PRInt32 preStrId; switch (mDeliveryMode) { case nsIMsgCompDeliverMode::Later: titleID = NS_MSG_SENDLATER_ERROR_TITLE; preStrId = NS_MSG_UNABLE_TO_SEND_LATER; break; case nsIMsgCompDeliverMode::AutoSaveAsDraft: case nsIMsgCompDeliverMode::SaveAsDraft: titleID = NS_MSG_SAVE_DRAFT_TITLE; preStrId = NS_MSG_UNABLE_TO_SAVE_DRAFT; break; case nsIMsgCompDeliverMode::SaveAsTemplate: titleID = NS_MSG_SAVE_TEMPLATE_TITLE; preStrId = NS_MSG_UNABLE_TO_SAVE_TEMPLATE; break; default: /* This should never happend! */ titleID = NS_MSG_SEND_ERROR_TITLE; preStrId = NS_ERROR_SEND_FAILED; break; } bundle->GetStringFromID(titleID, getter_Copies(dialogTitle)); // preStrId could be a string ID or it could be an error code...yuck. bundle->GetStringFromID(NS_IS_MSG_ERROR(preStrId) ? NS_ERROR_GET_CODE(preStrId) : preStrId, getter_Copies(dialogMessage)); //Do we have an error message... if (currMessage.IsEmpty()) { //we don't have an error description but we can put a generic explanation bundle->GetStringFromID(NS_MSG_GENERIC_FAILURE_EXPLANATION, getter_Copies(currMessage)); } if (!currMessage.IsEmpty()) { if (!dialogMessage.IsEmpty()) dialogMessage.Append(PRUnichar('\n')); dialogMessage.Append(currMessage); } nsMsgDisplayMessageByString(prompt, dialogMessage.get(), dialogTitle.get()); } mAlreadyDisplayReport = true; return NS_OK; }
NS_IMETHODIMP nsGNOMEShellService::SetDesktopBackground(nsIDOMElement* aElement, PRInt32 aPosition) { nsresult rv; nsCOMPtr<nsIImageLoadingContent> imageContent = do_QueryInterface(aElement, &rv); if (!imageContent) return rv; // get the image container nsCOMPtr<imgIRequest> request; rv = imageContent->GetRequest(nsIImageLoadingContent::CURRENT_REQUEST, getter_AddRefs(request)); if (!request) return rv; nsCOMPtr<imgIContainer> container; rv = request->GetImage(getter_AddRefs(container)); if (!container) return rv; // Write the background file to the home directory. nsCAutoString filePath(PR_GetEnv("HOME")); // get the product brand name from localized strings nsString brandName; nsCID bundleCID = NS_STRINGBUNDLESERVICE_CID; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService(bundleCID)); if (bundleService) { nsCOMPtr<nsIStringBundle> brandBundle; rv = bundleService->CreateBundle(BRAND_PROPERTIES, getter_AddRefs(brandBundle)); if (NS_SUCCEEDED(rv) && brandBundle) { rv = brandBundle->GetStringFromName(NS_LITERAL_STRING("brandShortName").get(), getter_Copies(brandName)); NS_ENSURE_SUCCESS(rv, rv); } } // build the file name filePath.Append('/'); filePath.Append(NS_ConvertUTF16toUTF8(brandName)); filePath.Append("_wallpaper.png"); // write the image to a file in the home dir rv = WriteImage(filePath, container); // if the file was written successfully, set it as the system wallpaper nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID); if (gconf) { nsCAutoString options; if (aPosition == BACKGROUND_TILE) options.Assign("wallpaper"); else if (aPosition == BACKGROUND_STRETCH) options.Assign("stretched"); else options.Assign("centered"); gconf->SetString(NS_LITERAL_CSTRING(kDesktopOptionsKey), options); // Set the image to an empty string first to force a refresh // (since we could be writing a new image on top of an existing // Firefox_wallpaper.png and nautilus doesn't monitor the file for changes) gconf->SetString(NS_LITERAL_CSTRING(kDesktopImageKey), EmptyCString()); gconf->SetString(NS_LITERAL_CSTRING(kDesktopImageKey), filePath); gconf->SetBool(NS_LITERAL_CSTRING(kDesktopDrawBGKey), PR_TRUE); } return rv; }
NS_IMETHODIMP nsMsgMdnGenerator::OnStopRunningUrl(nsIURI *url, nsresult aExitCode) { nsresult rv; DEBUG_MDN("nsMsgMdnGenerator::OnStopRunningUrl"); if (m_file) m_file->Remove(PR_FALSE); if (NS_SUCCEEDED(aExitCode)) return NS_OK; switch (aExitCode) { case NS_ERROR_UNKNOWN_HOST: case NS_ERROR_UNKNOWN_PROXY_HOST: aExitCode = NS_ERROR_SMTP_SEND_FAILED_UNKNOWN_SERVER; break; case NS_ERROR_CONNECTION_REFUSED: case NS_ERROR_PROXY_CONNECTION_REFUSED: aExitCode = NS_ERROR_SMTP_SEND_FAILED_REFUSED; break; case NS_ERROR_NET_INTERRUPT: aExitCode = NS_ERROR_SMTP_SEND_FAILED_INTERRUPTED; break; case NS_ERROR_NET_TIMEOUT: case NS_ERROR_NET_RESET: aExitCode = NS_ERROR_SMTP_SEND_FAILED_TIMEOUT; break; case NS_ERROR_SMTP_PASSWORD_UNDEFINED: // nothing to do, just keep the code break; default: if (aExitCode != NS_ERROR_ABORT && !NS_IS_MSG_ERROR(aExitCode)) aExitCode = NS_ERROR_SMTP_SEND_FAILED_UNKNOWN_REASON; break; } nsCOMPtr<nsISmtpService> smtpService(do_GetService(NS_SMTPSERVICE_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv,rv); // Get the smtp hostname and format the string. nsCString smtpHostName; nsCOMPtr<nsISmtpServer> smtpServer; rv = smtpService->GetSmtpServerByIdentity(m_identity, getter_AddRefs(smtpServer)); if (NS_SUCCEEDED(rv)) smtpServer->GetHostname(smtpHostName); nsAutoString hostStr; CopyASCIItoUTF16(smtpHostName, hostStr); const PRUnichar *params[] = { hostStr.get() }; nsCOMPtr<nsIStringBundle> bundle; nsCOMPtr<nsIStringBundleService> bundleService(do_GetService("@mozilla.org/intl/stringbundle;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); rv = bundleService->CreateBundle("chrome://messenger/locale/messengercompose/composeMsgs.properties", getter_AddRefs(bundle)); NS_ENSURE_SUCCESS(rv, rv); nsString failed_msg, dialogTitle; bundle->FormatStringFromID(NS_ERROR_GET_CODE(aExitCode), params, 1, getter_Copies(failed_msg)); bundle->GetStringFromID(NS_MSG_SEND_ERROR_TITLE, getter_Copies(dialogTitle)); nsCOMPtr<nsIPrompt> dialog; rv = m_window->GetPromptDialog(getter_AddRefs(dialog)); if (NS_SUCCEEDED(rv)) dialog->Alert(dialogTitle.get(),failed_msg.get()); return NS_OK; }
// Implementation of method that checks settings versus registry and prompts user // if out of synch. NS_IMETHODIMP nsWindowsHooks::CheckSettings( nsIDOMWindowInternal *aParent, PRBool *_retval ) { nsresult rv = NS_OK; *_retval = PR_FALSE; // Only do this once! static PRBool alreadyChecked = PR_FALSE; if ( alreadyChecked ) { return NS_OK; } else { alreadyChecked = PR_TRUE; // Don't check further if we don't have sufficient access. if ( isAccessRestricted() ) { return NS_OK; } } // Get settings. nsWindowsHooksSettings *settings; rv = this->GetSettings( &settings ); if ( NS_SUCCEEDED( rv ) && settings ) { // If not set previously, set to defaults so that they are // set properly when/if the user says to. if ( !settings->mHaveBeenSet ) { settings->mHandleHTTP = PR_TRUE; settings->mHandleHTTPS = PR_TRUE; settings->mHandleFTP = PR_TRUE; settings->mHandleCHROME = PR_TRUE; settings->mHandleGOPHER = PR_TRUE; settings->mHandleHTML = PR_TRUE; settings->mHandleJPEG = PR_FALSE; settings->mHandleGIF = PR_FALSE; settings->mHandlePNG = PR_FALSE; settings->mHandleXBM = PR_FALSE; settings->mHandleBMP = PR_FALSE; settings->mHandleICO = PR_FALSE; settings->mHandleXML = PR_TRUE; settings->mHandleXHTML = PR_TRUE; settings->mHandleXUL = PR_TRUE; settings->mShowDialog = PR_TRUE; } // If launched with "-installer" then override mShowDialog. PRBool installing = PR_FALSE; #ifndef MOZ_XUL_APP if ( !settings->mShowDialog ) { // Get command line service. nsCOMPtr<nsICmdLineService> cmdLineArgs (do_GetService(NS_COMMANDLINESERVICE_CONTRACTID, &rv)); if ( NS_SUCCEEDED( rv ) && cmdLineArgs ) { // See if "-installer" was specified. nsXPIDLCString installer; rv = cmdLineArgs->GetCmdLineValue( "-installer", getter_Copies( installer ) ); if ( NS_SUCCEEDED( rv ) && installer ) { installing = PR_TRUE; } } } #endif // First, make sure the user cares. if ( settings->mShowDialog || installing ) { // Look at registry setting for all things that are set. PRBool matches = PR_TRUE; settings->GetRegistryMatches( &matches ); if ( !matches ) { // Need to prompt user. // First: // o We need the common dialog service to show the dialog. // o We need the string bundle service to fetch the appropriate // dialog text. nsCOMPtr<nsIPromptService> promptService( do_GetService(NS_PROMPTSERVICE_CONTRACTID)); nsCOMPtr<nsIStringBundleService> bundleService( do_GetService( NS_STRINGBUNDLE_CONTRACTID, &rv ) ); if ( promptService && bundleService ) { // Next, get bundle that provides text for dialog. nsCOMPtr<nsIStringBundle> bundle; nsCOMPtr<nsIStringBundle> brandBundle; rv = bundleService->CreateBundle( "chrome://global-platform/locale/nsWindowsHooks.properties", getter_AddRefs( bundle ) ); rv = bundleService->CreateBundle( "chrome://branding/locale/brand.properties", getter_AddRefs( brandBundle ) ); if ( NS_SUCCEEDED( rv ) && bundle && brandBundle ) { nsXPIDLString text, label, shortName; if ( NS_SUCCEEDED( ( rv = brandBundle->GetStringFromName( NS_LITERAL_STRING( "brandShortName" ).get(), getter_Copies( shortName ) ) ) ) ) { const PRUnichar* formatStrings[] = { shortName.get() }; if ( NS_SUCCEEDED( ( rv = bundle->FormatStringFromName( NS_LITERAL_STRING( "promptText" ).get(), formatStrings, 1, getter_Copies( text ) ) ) ) && NS_SUCCEEDED( ( rv = bundle->GetStringFromName( NS_LITERAL_STRING( "checkBoxLabel" ).get(), getter_Copies( label ) ) ) ) ) { // Got the text, now show dialog. PRBool showDialog = settings->mShowDialog; PRInt32 dlgResult = -1; // No checkbox for initial display. const PRUnichar *labelArg = 0; if ( settings->mHaveBeenSet ) { // Subsequent display uses label string. labelArg = label; } // Note that the buttons need to be passed in this order: // o Yes // o Cancel // o No rv = promptService->ConfirmEx(aParent, shortName, text, (nsIPromptService::BUTTON_TITLE_YES * nsIPromptService::BUTTON_POS_0) + (nsIPromptService::BUTTON_TITLE_CANCEL * nsIPromptService::BUTTON_POS_1) + (nsIPromptService::BUTTON_TITLE_NO * nsIPromptService::BUTTON_POS_2), nsnull, nsnull, nsnull, labelArg, &showDialog, &dlgResult); if ( NS_SUCCEEDED( rv ) ) { // Dialog was shown *_retval = PR_TRUE; // Did they say go ahead? switch ( dlgResult ) { case 0: // User says: make the changes. // Remember "show dialog" choice. settings->mShowDialog = showDialog; // Apply settings; this single line of // code will do different things depending // on whether this is the first time (i.e., // when "haveBeenSet" is false). The first // time, this will set all prefs to true // (because that's how we initialized 'em // in GetSettings, above) and will update the // registry accordingly. On subsequent passes, // this will only update the registry (because // the settings we got from GetSettings will // not have changed). // // BTW, the term "prefs" in this context does not // refer to conventional Mozilla "prefs." Instead, // it refers to "Desktop Integration" prefs which // are stored in the windows registry. rv = SetSettings( settings ); #ifdef DEBUG_law printf( "Yes, SetSettings returned 0x%08X\n", (int)rv ); #endif break; case 2: // User says: Don't mess with Windows. // We update only the "showDialog" and // "haveBeenSet" keys. Note that this will // have the effect of setting all the prefs // *off* if the user says no to the initial // prompt. BoolRegistryEntry( "haveBeenSet" ).set(); if ( showDialog ) { BoolRegistryEntry( "showDialog" ).set(); } else { BoolRegistryEntry( "showDialog" ).reset(); } #ifdef DEBUG_law printf( "No, haveBeenSet=1 and showDialog=%d\n", (int)showDialog ); #endif break; default: // User says: I dunno. Make no changes (which // should produce the same dialog next time). #ifdef DEBUG_law printf( "Cancel\n" ); #endif break; } } } } } } } #ifdef DEBUG_law else { printf( "Registry and prefs match\n" ); } #endif } #ifdef DEBUG_law else { printf( "showDialog is false and not installing\n" ); } #endif // Release the settings. settings->Release(); } return rv; }