25 #include <com/sun/star/mail/MailException.hpp>
26 #include <osl/diagnose.h>
34 class MailDeliveryNotifier
37 MailDeliveryNotifier(uno::Reference<mail::XMailMessage>
const & message) :
42 { listener->mailDelivered(message_); }
45 uno::Reference<mail::XMailMessage> message_;
48 class MailDeliveryErrorNotifier
51 MailDeliveryErrorNotifier(
53 uno::Reference<mail::XMailMessage>
const & message,
54 const OUString& error_message) :
55 m_mail_dispatcher(xMailDispatcher),
57 m_error_message(error_message)
61 { listener->mailDeliveryError(m_mail_dispatcher, m_message, m_error_message); }
65 uno::Reference<mail::XMailMessage> m_message;
66 OUString m_error_message;
72 m_xMailserver( mailserver ),
74 m_bShutdownRequested(
false )
80 throw uno::RuntimeException();
107 uno::Reference<mail::XMailMessage> message;
118 OSL_PRECOND(!
isStarted(),
"MailDispatcher is already started!");
128 thread_status_guard.clear();
134 OSL_PRECOND(
isStarted(),
"MailDispatcher not started!");
144 thread_status_guard.clear();
179 std::for_each( aClonedListenerVector.begin(), aClonedListenerVector.end(),
180 MailDeliveryNotifier(message) );
182 catch (
const mail::MailException&
ex)
185 std::for_each( aClonedListenerVector.begin(), aClonedListenerVector.end(),
186 MailDeliveryErrorNotifier(
this, message, ex.Message) );
188 catch (
const uno::RuntimeException& ex)
191 std::for_each( aClonedListenerVector.begin(), aClonedListenerVector.end(),
192 MailDeliveryErrorNotifier(
this, message, ex.Message) );
198 osl_setThreadName(
"MailDispatcher");
223 thread_status_guard.clear();
226 message_container_guard.clear();
232 message_container_guard.clear();
233 thread_status_guard.clear();
235 for(
const auto & l : aListenerListcloned)
std::vector< ::rtl::Reference< IMailDispatcherListener > > MailDispatcherListenerContainer_t
::osl::Mutex m_aListenerContainerMutex
css::uno::Reference< css::mail::XSmtpService > m_xMailserver
std::list< css::uno::Reference< css::mail::XMailMessage > > m_aXMessageList
virtual void SAL_CALL onTerminated() override
MailDispatcher(css::uno::Reference< css::mail::XSmtpService > const &xMailService)
virtual void SAL_CALL run() override
::osl::Condition m_aWakeupCondition
Reference< deployment::XPackageRegistry > create(Reference< deployment::XPackageRegistry > const &xRootRegistry, OUString const &context, OUString const &cachePath, Reference< XComponentContext > const &xComponentContext)
virtual ~MailDispatcher() override
Shutdown the mail dispatcher.
void shutdown()
Request shutdown of the mail dispatcher thread.
css::uno::Reference< css::mail::XMailMessage > dequeueMailMessage()
Dequeues a mail message.
std::vector<::rtl::Reference< IMailDispatcherListener > > m_aListenerVector
::osl::Mutex m_aThreadStatusMutex
void sendMailMessageNotifyListener(css::uno::Reference< css::mail::XMailMessage > const &message)
::osl::Condition m_aRunCondition
bool m_bShutdownRequested
::osl::Mutex m_aMessageContainerMutex
bool isStarted() const
Check whether the mail dispatcher is started or not.
std::vector<::rtl::Reference< IMailDispatcherListener > > cloneListener()
::rtl::Reference< MailDispatcher > m_xSelfReference
void start()
Start sending mail messages asynchronously.
void stop()
Stop sending mail messages.
void addListener(::rtl::Reference< IMailDispatcherListener > const &listener)
Register a listener for mail dispatcher events.
void enqueueMailMessage(css::uno::Reference< css::mail::XMailMessage > const &xMailMessage)
Enqueue a mail message for delivery.
bool m_bDetectedRangeSegmentation false