1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_framework.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
28*b1cdbd2cSJim Jagielski //	my own includes
29*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
30*b1cdbd2cSJim Jagielski #include <dispatch/mailtodispatcher.hxx>
31*b1cdbd2cSJim Jagielski #include <threadhelp/readguard.hxx>
32*b1cdbd2cSJim Jagielski #include <general.h>
33*b1cdbd2cSJim Jagielski #include <services.h>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
36*b1cdbd2cSJim Jagielski //	interface includes
37*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
38*b1cdbd2cSJim Jagielski #include <com/sun/star/system/SystemShellExecute.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/system/SystemShellExecuteFlags.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/DispatchResultState.hpp>
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
43*b1cdbd2cSJim Jagielski //	includes of other projects
44*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
49*b1cdbd2cSJim Jagielski //	namespace
50*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski namespace framework{
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
55*b1cdbd2cSJim Jagielski //	non exported const
56*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski #define PROTOCOL_VALUE      "mailto:"
59*b1cdbd2cSJim Jagielski #define PROTOCOL_LENGTH     7
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
62*b1cdbd2cSJim Jagielski //	non exported definitions
63*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
66*b1cdbd2cSJim Jagielski //	declarations
67*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
70*b1cdbd2cSJim Jagielski // XInterface, XTypeProvider, XServiceInfo
71*b1cdbd2cSJim Jagielski 
DEFINE_XINTERFACE_5(MailToDispatcher,OWeakObject,DIRECT_INTERFACE (css::lang::XTypeProvider),DIRECT_INTERFACE (css::lang::XServiceInfo),DIRECT_INTERFACE (css::frame::XDispatchProvider),DIRECT_INTERFACE (css::frame::XNotifyingDispatch),DIRECT_INTERFACE (css::frame::XDispatch))72*b1cdbd2cSJim Jagielski DEFINE_XINTERFACE_5(MailToDispatcher                                ,
73*b1cdbd2cSJim Jagielski                     OWeakObject                                     ,
74*b1cdbd2cSJim Jagielski                     DIRECT_INTERFACE(css::lang::XTypeProvider      ),
75*b1cdbd2cSJim Jagielski                     DIRECT_INTERFACE(css::lang::XServiceInfo       ),
76*b1cdbd2cSJim Jagielski                     DIRECT_INTERFACE(css::frame::XDispatchProvider ),
77*b1cdbd2cSJim Jagielski                     DIRECT_INTERFACE(css::frame::XNotifyingDispatch),
78*b1cdbd2cSJim Jagielski                     DIRECT_INTERFACE(css::frame::XDispatch         ))
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski DEFINE_XTYPEPROVIDER_5(MailToDispatcher              ,
81*b1cdbd2cSJim Jagielski                        css::lang::XTypeProvider      ,
82*b1cdbd2cSJim Jagielski                        css::lang::XServiceInfo       ,
83*b1cdbd2cSJim Jagielski                        css::frame::XDispatchProvider ,
84*b1cdbd2cSJim Jagielski                        css::frame::XNotifyingDispatch,
85*b1cdbd2cSJim Jagielski                        css::frame::XDispatch         )
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski DEFINE_XSERVICEINFO_MULTISERVICE_2(MailToDispatcher                   ,
88*b1cdbd2cSJim Jagielski                                    ::cppu::OWeakObject                ,
89*b1cdbd2cSJim Jagielski                                    SERVICENAME_PROTOCOLHANDLER        ,
90*b1cdbd2cSJim Jagielski                                    IMPLEMENTATIONNAME_MAILTODISPATCHER)
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski DEFINE_INIT_SERVICE(MailToDispatcher,
93*b1cdbd2cSJim Jagielski                     {
94*b1cdbd2cSJim Jagielski                         /*Attention
95*b1cdbd2cSJim Jagielski                             I think we don't need any mutex or lock here ... because we are called by our own static method impl_createInstance()
96*b1cdbd2cSJim Jagielski                             to create a new instance of this class by our own supported service factory.
97*b1cdbd2cSJim Jagielski                             see macro DEFINE_XSERVICEINFO_MULTISERVICE and "impl_initService()" for further informations!
98*b1cdbd2cSJim Jagielski                         */
99*b1cdbd2cSJim Jagielski                     }
100*b1cdbd2cSJim Jagielski                    )
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski /**
105*b1cdbd2cSJim Jagielski     @short      standard ctor
106*b1cdbd2cSJim Jagielski     @descr      These initialize a new instance of ths class with needed informations for work.
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski     @param      xContext
109*b1cdbd2cSJim Jagielski                     reference to uno component context
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski     @modified   30.04.2002 14:10, as96863
112*b1cdbd2cSJim Jagielski */
113*b1cdbd2cSJim Jagielski MailToDispatcher::MailToDispatcher( const css::uno::Reference< css::uno::XComponentContext >& xContext )
114*b1cdbd2cSJim Jagielski 		//	Init baseclasses first
115*b1cdbd2cSJim Jagielski         : ThreadHelpBase( &Application::GetSolarMutex() )
116*b1cdbd2cSJim Jagielski         , OWeakObject   (                               )
117*b1cdbd2cSJim Jagielski         // Init member
118*b1cdbd2cSJim Jagielski         , m_xContext    ( xContext                      )
119*b1cdbd2cSJim Jagielski {
120*b1cdbd2cSJim Jagielski }
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski /**
125*b1cdbd2cSJim Jagielski     @short      standard dtor
126*b1cdbd2cSJim Jagielski     @descr      -
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski     @modified   30.04.2002 14:10, as96863
129*b1cdbd2cSJim Jagielski */
~MailToDispatcher()130*b1cdbd2cSJim Jagielski MailToDispatcher::~MailToDispatcher()
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski     m_xContext = NULL;
133*b1cdbd2cSJim Jagielski }
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski /**
138*b1cdbd2cSJim Jagielski     @short      decide if this dispatch implementation can be used for requested URL or not
139*b1cdbd2cSJim Jagielski     @descr      A protocol handler is registerd for an URL pattern inside configuration and will
140*b1cdbd2cSJim Jagielski                 be asked by the generic dispatch mechanism inside framework, if he can handle this
141*b1cdbd2cSJim Jagielski                 special URL wich match his registration. He can agree by returning of a valid dispatch
142*b1cdbd2cSJim Jagielski                 instance or disagree by returning <NULL/>.
143*b1cdbd2cSJim Jagielski                 We don't create new dispatch instances here realy - we return THIS as result to handle it
144*b1cdbd2cSJim Jagielski                 at the same implementation.
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski     @modified   02.05.2002 15:25, as96863
147*b1cdbd2cSJim Jagielski */
queryDispatch(const css::util::URL & aURL,const::rtl::OUString &,sal_Int32)148*b1cdbd2cSJim Jagielski css::uno::Reference< css::frame::XDispatch > SAL_CALL MailToDispatcher::queryDispatch( const css::util::URL&  aURL    ,
149*b1cdbd2cSJim Jagielski                                                                                        const ::rtl::OUString& /*sTarget*/ ,
150*b1cdbd2cSJim Jagielski                                                                                              sal_Int32        /*nFlags*/  ) throw( css::uno::RuntimeException )
151*b1cdbd2cSJim Jagielski {
152*b1cdbd2cSJim Jagielski     css::uno::Reference< css::frame::XDispatch > xDispatcher;
153*b1cdbd2cSJim Jagielski     if (aURL.Complete.compareToAscii(PROTOCOL_VALUE,PROTOCOL_LENGTH)==0)
154*b1cdbd2cSJim Jagielski         xDispatcher = this;
155*b1cdbd2cSJim Jagielski     return xDispatcher;
156*b1cdbd2cSJim Jagielski }
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski /**
161*b1cdbd2cSJim Jagielski     @short      do the same like dispatch() but for multiple requests at the same time
162*b1cdbd2cSJim Jagielski     @descr      -
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski     @modified   02.05.2002 15:27, as96863
165*b1cdbd2cSJim Jagielski */
queryDispatches(const css::uno::Sequence<css::frame::DispatchDescriptor> & lDescriptor)166*b1cdbd2cSJim Jagielski css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL MailToDispatcher::queryDispatches( const css::uno::Sequence< css::frame::DispatchDescriptor >& lDescriptor ) throw( css::uno::RuntimeException )
167*b1cdbd2cSJim Jagielski {
168*b1cdbd2cSJim Jagielski     sal_Int32 nCount = lDescriptor.getLength();
169*b1cdbd2cSJim Jagielski     css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > lDispatcher( nCount );
170*b1cdbd2cSJim Jagielski     for( sal_Int32 i=0; i<nCount; ++i )
171*b1cdbd2cSJim Jagielski     {
172*b1cdbd2cSJim Jagielski         lDispatcher[i] = this->queryDispatch(
173*b1cdbd2cSJim Jagielski                             lDescriptor[i].FeatureURL,
174*b1cdbd2cSJim Jagielski                             lDescriptor[i].FrameName,
175*b1cdbd2cSJim Jagielski                             lDescriptor[i].SearchFlags);
176*b1cdbd2cSJim Jagielski     }
177*b1cdbd2cSJim Jagielski     return lDispatcher;
178*b1cdbd2cSJim Jagielski }
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski /**
183*b1cdbd2cSJim Jagielski     @short      dispatch URL with arguments
184*b1cdbd2cSJim Jagielski     @descr      We use threadsafe internal method to do so. It returns a state value - but we ignore it.
185*b1cdbd2cSJim Jagielski                 Because we doesn't support status listener notifications here. Status events are not guaranteed -
186*b1cdbd2cSJim Jagielski                 and we call another service internaly which doesn't return any notifications too.
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski     @param      aURL
189*b1cdbd2cSJim Jagielski                     mail URL which should be executed
190*b1cdbd2cSJim Jagielski     @param      lArguments
191*b1cdbd2cSJim Jagielski                     list of optional arguments for this mail request
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski     @modified   30.04.2002 14:15, as96863
194*b1cdbd2cSJim Jagielski */
dispatch(const css::util::URL & aURL,const css::uno::Sequence<css::beans::PropertyValue> & lArguments)195*b1cdbd2cSJim Jagielski void SAL_CALL MailToDispatcher::dispatch( const css::util::URL&                                  aURL       ,
196*b1cdbd2cSJim Jagielski                                           const css::uno::Sequence< css::beans::PropertyValue >& lArguments ) throw( css::uno::RuntimeException )
197*b1cdbd2cSJim Jagielski {
198*b1cdbd2cSJim Jagielski     // dispatch() is an [oneway] call ... and may our user release his reference to us immediatly.
199*b1cdbd2cSJim Jagielski     // So we should hold us self alive till this call ends.
200*b1cdbd2cSJim Jagielski     css::uno::Reference< css::frame::XNotifyingDispatch > xSelfHold(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY);
201*b1cdbd2cSJim Jagielski     implts_dispatch(aURL,lArguments);
202*b1cdbd2cSJim Jagielski     // No notification for status listener!
203*b1cdbd2cSJim Jagielski }
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski /**
208*b1cdbd2cSJim Jagielski     @short      dispatch with guaranteed notifications about success
209*b1cdbd2cSJim Jagielski     @descr      We use threadsafe internal method to do so. Return state of this function will be used
210*b1cdbd2cSJim Jagielski                 for notification if an optional listener is given.
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski     @param      aURL
213*b1cdbd2cSJim Jagielski                     mail URL which should be executed
214*b1cdbd2cSJim Jagielski     @param      lArguments
215*b1cdbd2cSJim Jagielski                     list of optional arguments for this mail request
216*b1cdbd2cSJim Jagielski     @param      xListener
217*b1cdbd2cSJim Jagielski                     reference to a valid listener for state events
218*b1cdbd2cSJim Jagielski 
219*b1cdbd2cSJim Jagielski     @modified   30.04.2002 14:49, as96863
220*b1cdbd2cSJim Jagielski */
dispatchWithNotification(const css::util::URL & aURL,const css::uno::Sequence<css::beans::PropertyValue> & lArguments,const css::uno::Reference<css::frame::XDispatchResultListener> & xListener)221*b1cdbd2cSJim Jagielski void SAL_CALL MailToDispatcher::dispatchWithNotification( const css::util::URL&                                             aURL      ,
222*b1cdbd2cSJim Jagielski                                                           const css::uno::Sequence< css::beans::PropertyValue >&            lArguments,
223*b1cdbd2cSJim Jagielski                                                           const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ) throw( css::uno::RuntimeException )
224*b1cdbd2cSJim Jagielski {
225*b1cdbd2cSJim Jagielski     // This class was designed to die by reference. And if user release his reference to us immediatly after calling this method
226*b1cdbd2cSJim Jagielski     // we can run into some problems. So we hold us self alive till this method ends.
227*b1cdbd2cSJim Jagielski     // Another reason: We can use this reference as source of sending event at the end too.
228*b1cdbd2cSJim Jagielski     css::uno::Reference< css::frame::XNotifyingDispatch > xThis(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY);
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski     sal_Bool bState = implts_dispatch(aURL,lArguments);
231*b1cdbd2cSJim Jagielski     if (xListener.is())
232*b1cdbd2cSJim Jagielski     {
233*b1cdbd2cSJim Jagielski         css::frame::DispatchResultEvent aEvent;
234*b1cdbd2cSJim Jagielski         if (bState)
235*b1cdbd2cSJim Jagielski             aEvent.State = css::frame::DispatchResultState::SUCCESS;
236*b1cdbd2cSJim Jagielski         else
237*b1cdbd2cSJim Jagielski             aEvent.State = css::frame::DispatchResultState::FAILURE;
238*b1cdbd2cSJim Jagielski         aEvent.Source = xThis;
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski         xListener->dispatchFinished( aEvent );
241*b1cdbd2cSJim Jagielski     }
242*b1cdbd2cSJim Jagielski }
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski /**
247*b1cdbd2cSJim Jagielski     @short      threadsafe helper for dispatch calls
248*b1cdbd2cSJim Jagielski     @descr      We support two interfaces for the same process - dispatch URLs. That the reason for this internal
249*b1cdbd2cSJim Jagielski                 function. It implements the real dispatch operation and returns a state value which inform caller
250*b1cdbd2cSJim Jagielski                 about success. He can notify listener then by using this return value.
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski     @param      aURL
253*b1cdbd2cSJim Jagielski                     mail URL which should be executed
254*b1cdbd2cSJim Jagielski     @param      lArguments
255*b1cdbd2cSJim Jagielski                     list of optional arguments for this mail request
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski     @return     <TRUE/> if dispatch could be started successfully
258*b1cdbd2cSJim Jagielski                 Note: Our internal used shell executor doesn't return any state value - so we must
259*b1cdbd2cSJim Jagielski                 belive that call was successfully.
260*b1cdbd2cSJim Jagielski                 <FALSE/> if neccessary ressource couldn't be created or an exception was thrown.
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski     @modified   30.04.2002 14:49, as96863
263*b1cdbd2cSJim Jagielski */
implts_dispatch(const css::util::URL & aURL,const css::uno::Sequence<css::beans::PropertyValue> &)264*b1cdbd2cSJim Jagielski sal_Bool MailToDispatcher::implts_dispatch( const css::util::URL&                                  aURL       ,
265*b1cdbd2cSJim Jagielski                                             const css::uno::Sequence< css::beans::PropertyValue >& /*lArguments*/ ) throw( css::uno::RuntimeException )
266*b1cdbd2cSJim Jagielski {
267*b1cdbd2cSJim Jagielski     sal_Bool bSuccess = sal_False;
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski     css::uno::Reference< css::uno::XComponentContext > xContext;
270*b1cdbd2cSJim Jagielski     /* SAFE */{
271*b1cdbd2cSJim Jagielski         ReadGuard aReadLock( m_aLock );
272*b1cdbd2cSJim Jagielski         xContext = m_xContext;
273*b1cdbd2cSJim Jagielski     /* SAFE */}
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski     css::uno::Reference< css::system::XSystemShellExecute > xSystemShellExecute(
276*b1cdbd2cSJim Jagielski         css::system::SystemShellExecute::create( xContext ) );
277*b1cdbd2cSJim Jagielski     if (xSystemShellExecute.is())
278*b1cdbd2cSJim Jagielski     {
279*b1cdbd2cSJim Jagielski         try
280*b1cdbd2cSJim Jagielski         {
281*b1cdbd2cSJim Jagielski             // start mail client
282*b1cdbd2cSJim Jagielski             // Because there is no notofocation about success - we use case of
283*b1cdbd2cSJim Jagielski             // no detected exception as SUCCESS - FAILED otherwhise.
284*b1cdbd2cSJim Jagielski             xSystemShellExecute->execute( aURL.Complete, ::rtl::OUString(), css::system::SystemShellExecuteFlags::DEFAULTS );
285*b1cdbd2cSJim Jagielski             bSuccess = sal_True;
286*b1cdbd2cSJim Jagielski         }
287*b1cdbd2cSJim Jagielski         catch (css::lang::IllegalArgumentException&)
288*b1cdbd2cSJim Jagielski         {
289*b1cdbd2cSJim Jagielski         }
290*b1cdbd2cSJim Jagielski         catch (css::system::SystemShellExecuteException&)
291*b1cdbd2cSJim Jagielski         {
292*b1cdbd2cSJim Jagielski         }
293*b1cdbd2cSJim Jagielski     }
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski     return bSuccess;
296*b1cdbd2cSJim Jagielski }
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski /**
301*b1cdbd2cSJim Jagielski     @short      add/remove listener for state events
302*b1cdbd2cSJim Jagielski     @descr      Because we use an external process to forward such mail URLs, and this process doesn't
303*b1cdbd2cSJim Jagielski                 return any notifications about success or failed state - we doesn't support such status
304*b1cdbd2cSJim Jagielski                 listener. We have no status to send.
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski     @param      xListener
307*b1cdbd2cSJim Jagielski                     reference to a valid listener for state events
308*b1cdbd2cSJim Jagielski     @param      aURL
309*b1cdbd2cSJim Jagielski                     URL about listener will be informed, if something occured
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski     @modified   30.04.2002 14:49, as96863
312*b1cdbd2cSJim Jagielski */
addStatusListener(const css::uno::Reference<css::frame::XStatusListener> &,const css::util::URL &)313*b1cdbd2cSJim Jagielski void SAL_CALL MailToDispatcher::addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& /*xListener*/ ,
314*b1cdbd2cSJim Jagielski                                                    const css::util::URL&                                     /*aURL*/      ) throw( css::uno::RuntimeException )
315*b1cdbd2cSJim Jagielski {
316*b1cdbd2cSJim Jagielski     // not suported yet
317*b1cdbd2cSJim Jagielski }
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
320*b1cdbd2cSJim Jagielski 
removeStatusListener(const css::uno::Reference<css::frame::XStatusListener> &,const css::util::URL &)321*b1cdbd2cSJim Jagielski void SAL_CALL MailToDispatcher::removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& /*xListener*/ ,
322*b1cdbd2cSJim Jagielski                                                       const css::util::URL&                                     /*aURL*/      ) throw( css::uno::RuntimeException )
323*b1cdbd2cSJim Jagielski {
324*b1cdbd2cSJim Jagielski     // not suported yet
325*b1cdbd2cSJim Jagielski }
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski } //  namespace framework
328