nsresult nsMessengerUnixIntegration::ShowAlertMessage(const nsAString& aAlertTitle, const nsAString& aAlertText, const nsACString& aFolderURI) { nsresult rv; // if we are already in the process of showing an alert, don't try to show another.... if (mAlertInProgress) return NS_OK; nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); bool showAlert = true; prefBranch->GetBoolPref(SHOW_ALERT_PREF, &showAlert); if (showAlert) { #ifdef MOZ_THUNDERBIRD nsCOMPtr<nsIAlertsService> alertsService(do_GetService(NS_SYSTEMALERTSERVICE_CONTRACTID, &rv)); if (NS_SUCCEEDED(rv)) { mAlertInProgress = PR_TRUE; rv = alertsService->ShowAlertNotification(NS_LITERAL_STRING(NEW_MAIL_ALERT_ICON), aAlertTitle, aAlertText, PR_FALSE, NS_ConvertASCIItoUTF16(aFolderURI), this, EmptyString()); if (NS_SUCCEEDED(rv)) return rv; } AlertFinished(); ShowNewAlertNotification(PR_FALSE); #else nsCOMPtr<nsIAlertsService> alertsService (do_GetService(NS_ALERTSERVICE_CONTRACTID, &rv)); if (NS_SUCCEEDED(rv)) { rv = alertsService->ShowAlertNotification(NS_LITERAL_STRING(NEW_MAIL_ALERT_ICON), aAlertTitle, aAlertText, PR_TRUE, NS_ConvertASCIItoUTF16(aFolderURI), this, EmptyString()); mAlertInProgress = PR_TRUE; } #endif } if (!showAlert || NS_FAILED(rv)) // go straight to showing the system tray icon. AlertFinished(); return rv; }
// Opening Thunderbird's new mail alert notification window for not supporting libnotify // aUserInitiated --> true if we are opening the alert notification in response to a user action // like clicking on the biff icon nsresult nsMessengerUnixIntegration::ShowNewAlertNotification(bool aUserInitiated) { nsresult rv; // if we are already in the process of showing an alert, don't try to show another.... if (mAlertInProgress) return NS_OK; nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); bool showAlert = true; prefBranch->GetBoolPref(SHOW_ALERT_PREF, &showAlert); if (showAlert) { nsCOMPtr<nsIMutableArray> argsArray = do_CreateInstance(NS_ARRAY_CONTRACTID); if (!argsArray) return NS_ERROR_FAILURE; // pass in the array of folders with unread messages nsCOMPtr<nsISupportsInterfacePointer> ifptr = do_CreateInstance(NS_SUPPORTS_INTERFACE_POINTER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); ifptr->SetData(mFoldersWithNewMail); ifptr->SetDataIID(&NS_GET_IID(nsISupportsArray)); argsArray->AppendElement(ifptr, PR_FALSE); // pass in the observer ifptr = do_CreateInstance(NS_SUPPORTS_INTERFACE_POINTER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr <nsISupports> supports = do_QueryInterface(static_cast<nsIMessengerOSIntegration*>(this)); ifptr->SetData(supports); ifptr->SetDataIID(&NS_GET_IID(nsIObserver)); argsArray->AppendElement(ifptr, PR_FALSE); // pass in the animation flag nsCOMPtr<nsISupportsPRBool> scriptableUserInitiated (do_CreateInstance(NS_SUPPORTS_PRBOOL_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); scriptableUserInitiated->SetData(aUserInitiated); argsArray->AppendElement(scriptableUserInitiated, PR_FALSE); nsCOMPtr<nsIWindowWatcher> wwatch(do_GetService(NS_WINDOWWATCHER_CONTRACTID)); nsCOMPtr<nsIDOMWindow> newWindow; rv = wwatch->OpenWindow(0, ALERT_CHROME_URL, "_blank", "chrome,dialog=yes,titlebar=no,popup=yes", argsArray, getter_AddRefs(newWindow)); mAlertInProgress = PR_TRUE; } // if the user has turned off the mail alert, or openWindow generated an error, // then go straight to the system tray. if (!showAlert || NS_FAILED(rv)) AlertFinished(); return rv; }
NS_IMETHODIMP nsMessengerUnixIntegration::Observe(nsISupports* aSubject, const char* aTopic, const PRUnichar* aData) { if (strcmp(aTopic, "alertfinished") == 0) return AlertFinished(); if (strcmp(aTopic, "alertclickcallback") == 0) return AlertClicked(); return NS_OK; }