diff --git a/eMailerOOo.oxt b/eMailerOOo.oxt index 29118bb7..25076400 100644 Binary files a/eMailerOOo.oxt and b/eMailerOOo.oxt differ diff --git a/source/eMailerOOo/META-INF/manifest.xml b/source/eMailerOOo/META-INF/manifest.xml index fe53c97c..020c6e8f 100644 --- a/source/eMailerOOo/META-INF/manifest.xml +++ b/source/eMailerOOo/META-INF/manifest.xml @@ -33,10 +33,10 @@ - + + - diff --git a/source/eMailerOOo/dist/eMailerOOo.oxt b/source/eMailerOOo/dist/eMailerOOo.oxt index 29118bb7..25076400 100644 Binary files a/source/eMailerOOo/dist/eMailerOOo.oxt and b/source/eMailerOOo/dist/eMailerOOo.oxt differ diff --git a/source/eMailerOOo/idl/com/sun/star/mail/SpoolerService.idl b/source/eMailerOOo/idl/com/sun/star/mail/MailSpooler.idl similarity index 93% rename from source/eMailerOOo/idl/com/sun/star/mail/SpoolerService.idl rename to source/eMailerOOo/idl/com/sun/star/mail/MailSpooler.idl index f2d480a8..2752f190 100644 --- a/source/eMailerOOo/idl/com/sun/star/mail/SpoolerService.idl +++ b/source/eMailerOOo/idl/com/sun/star/mail/MailSpooler.idl @@ -24,14 +24,14 @@ ╚════════════════════════════════════════════════════════════════════════════════════╝ */ -#ifndef __com_sun_star_mail_SpoolerService_idl__ -#define __com_sun_star_mail_SpoolerService_idl__ +#ifndef __com_sun_star_mail_MailSpooler_idl__ +#define __com_sun_star_mail_MailSpooler_idl__ -#include +#include module com { module sun { module star { module mail { -service SpoolerService: XSpoolerService +service MailSpooler: XMailSpooler { create(); diff --git a/source/eMailerOOo/idl/com/sun/star/mail/MailServiceConfiguration.idl b/source/eMailerOOo/idl/com/sun/star/mail/MailUser.idl similarity index 89% rename from source/eMailerOOo/idl/com/sun/star/mail/MailServiceConfiguration.idl rename to source/eMailerOOo/idl/com/sun/star/mail/MailUser.idl index 53f69dfc..ee6ff1f0 100644 --- a/source/eMailerOOo/idl/com/sun/star/mail/MailServiceConfiguration.idl +++ b/source/eMailerOOo/idl/com/sun/star/mail/MailUser.idl @@ -24,17 +24,17 @@ ╚════════════════════════════════════════════════════════════════════════════════════╝ */ -#ifndef __com_sun_star_mail_MailServiceConfiguration_idl__ -#define __com_sun_star_mail_MailServiceConfiguration_idl__ +#ifndef __com_sun_star_mail_MailUser_idl__ +#define __com_sun_star_mail_MailUser_idl__ module com { module sun { module star { module mail { -interface XMailServiceConfiguration; +interface XMailUser; -service MailServiceConfiguration : XMailServiceConfiguration +service MailUser : XMailUser { /** - Constructs an instance of a MailServiceConfiguration. + Constructs an instance of a MailUser. This service use the Mozilla IspDB configuration as a backend. @param sSender @@ -42,7 +42,7 @@ service MailServiceConfiguration : XMailServiceConfiguration The e-mail address has to conform to RFC 822. @see com::sun::star::mail::XMailServiceProvider - @see com::sun::star::mail::XMailServiceConfiguration + @see com::sun::star::mail::XMailUser */ create([in] string sSender); diff --git a/source/eMailerOOo/idl/com/sun/star/mail/XSpoolerService.idl b/source/eMailerOOo/idl/com/sun/star/mail/XMailSpooler.idl similarity index 89% rename from source/eMailerOOo/idl/com/sun/star/mail/XSpoolerService.idl rename to source/eMailerOOo/idl/com/sun/star/mail/XMailSpooler.idl index 414527b6..771a9542 100644 --- a/source/eMailerOOo/idl/com/sun/star/mail/XSpoolerService.idl +++ b/source/eMailerOOo/idl/com/sun/star/mail/XMailSpooler.idl @@ -24,19 +24,16 @@ ╚════════════════════════════════════════════════════════════════════════════════════╝ */ -#ifndef __com_sun_star_mail_XSpoolerService_idl__ -#define __com_sun_star_mail_XSpoolerService_idl__ +#ifndef __com_sun_star_mail_XMailSpooler_idl__ +#define __com_sun_star_mail_XMailSpooler_idl__ -#include -#include +#include module com { module sun { module star { module mail { -interface XSpoolerService : com::sun::star::uno::XInterface +interface XMailSpooler : com::sun::star::io::XActiveDataControl { - void start(); - void stop(); boolean isStarted(); long addJob([in] string Sender, @@ -58,9 +55,6 @@ interface XSpoolerService : com::sun::star::uno::XInterface long getJobState([in] long JobId); sequence getJobIds([in] long BatchId); - void addListener([in] XSpoolerListener Listener); - void removeListener([in] XSpoolerListener Listener); - }; }; }; }; }; diff --git a/source/eMailerOOo/idl/com/sun/star/mail/XMailServiceConfiguration.idl b/source/eMailerOOo/idl/com/sun/star/mail/XMailUser.idl similarity index 94% rename from source/eMailerOOo/idl/com/sun/star/mail/XMailServiceConfiguration.idl rename to source/eMailerOOo/idl/com/sun/star/mail/XMailUser.idl index a2a61087..1855f475 100644 --- a/source/eMailerOOo/idl/com/sun/star/mail/XMailServiceConfiguration.idl +++ b/source/eMailerOOo/idl/com/sun/star/mail/XMailUser.idl @@ -24,8 +24,8 @@ ╚════════════════════════════════════════════════════════════════════════════════════╝ */ -#ifndef __com_sun_star_mail_XMailServiceConfiguration_idl__ -#define __com_sun_star_mail_XMailServiceConfiguration_idl__ +#ifndef __com_sun_star_mail_XMailUser_idl__ +#define __com_sun_star_mail_XMailUser_idl__ #include #include @@ -34,7 +34,7 @@ module com { module sun { module star { module mail { -interface XMailServiceConfiguration : com::sun::star::uno::XInterface +interface XMailUser : com::sun::star::uno::XInterface { boolean supportIMAP(); diff --git a/source/eMailerOOo/idl/com/sun/star/mail/XSpoolerListener.idl b/source/eMailerOOo/idl/com/sun/star/mail/XSpoolerListener.idl deleted file mode 100644 index ef210070..00000000 --- a/source/eMailerOOo/idl/com/sun/star/mail/XSpoolerListener.idl +++ /dev/null @@ -1,45 +0,0 @@ -/* -╔════════════════════════════════════════════════════════════════════════════════════╗ -║ ║ -║ Copyright (c) 2020 https://prrvchr.github.io ║ -║ ║ -║ Permission is hereby granted, free of charge, to any person obtaining ║ -║ a copy of this software and associated documentation files (the "Software"), ║ -║ to deal in the Software without restriction, including without limitation ║ -║ the rights to use, copy, modify, merge, publish, distribute, sublicense, ║ -║ and/or sell copies of the Software, and to permit persons to whom the Software ║ -║ is furnished to do so, subject to the following conditions: ║ -║ ║ -║ The above copyright notice and this permission notice shall be included in ║ -║ all copies or substantial portions of the Software. ║ -║ ║ -║ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ║ -║ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ║ -║ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ║ -║ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ║ -║ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ║ -║ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE ║ -║ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ║ -║ ║ -╚════════════════════════════════════════════════════════════════════════════════════╝ - */ - -#ifndef __com_sun_star_mail_XSpoolerListener_idl__ -#define __com_sun_star_mail_XSpoolerListener_idl__ - -#include -#include - -module com { module sun { module star { module mail { - -interface XSpoolerListener: com::sun::star::lang::XEventListener -{ - - void started([in] com::sun::star::lang::EventObject Event); - void stopped([in] com::sun::star::lang::EventObject Event); - -}; - -}; }; }; }; - -#endif diff --git a/source/eMailerOOo/resource/eMailer_en_US.properties b/source/eMailerOOo/resource/eMailer_en_US.properties index 576000a2..1a90687e 100644 --- a/source/eMailerOOo/resource/eMailer_en_US.properties +++ b/source/eMailerOOo/resource/eMailer_en_US.properties @@ -118,16 +118,17 @@ 507=HsqlDB driver version %s is obsolete.%sYou need to update this driver to version %s or higher. 508=%s - Configuration error -1000=SpoolerService.start() -1001=Starting the SpoolerService +1000=MailSpooler.start() +1001=Starting the MailSpooler 1002=Email cannot be send, network is offline... -1003=SpoolerService is started. +1003=MailSpooler is started. 1010=Spooler.run() 1011=Start sending %s emails... 1012=Sending %s out of %s email(s) 1013=No email to send... -1014=SpoolerService stopped +1014=MailSpooler is closed +1015=MailSpooler has been stopped 1020=Spooler._sendMails() 1021=Start sending email N\u00ba: %s diff --git a/source/eMailerOOo/resource/eMailer_fr_FR.properties b/source/eMailerOOo/resource/eMailer_fr_FR.properties index 1a55e04c..15900374 100644 --- a/source/eMailerOOo/resource/eMailer_fr_FR.properties +++ b/source/eMailerOOo/resource/eMailer_fr_FR.properties @@ -118,16 +118,17 @@ 507=La version %s du pilote HsqlDB est obsolte.%sVous devez mettre jour ce pilote vers une version %s ou suprieure. 508=%s - Erreur de configuration -1000=SpoolerService.start() -1001=D\u00e9marrage de SpoolerService +1000=MailSpooler.start() +1001=D\u00e9marrage de MailSpooler 1002=Le courriel ne peut \u00eatre envoy\u00e9, le r\u00e9seau est hors ligne... -1003=SpoolerService \u00e0 d\u00e9marr\u00e9. +1003=MailSpooler \u00e0 d\u00e9marr\u00e9. 1010=Spooler.run() 1011=Debut d'envoi de %s courriel(s)... 1012=Envoi de %s courriel(s) sur %s 1013=Aucun courriel \u00e0 envoyer... -1014=SpoolerService est arr\u00eat\u00e9 +1014=MailSpooler c'est ferm +1015=MailSpooler a t arret\u00e9 1020=Spooler._sendMails() 1021=Debut d'envoi du courriel N\u00ba: %s diff --git a/source/eMailerOOo/service/SpoolerService.py b/source/eMailerOOo/service/MailSpooler.py similarity index 90% rename from source/eMailerOOo/service/SpoolerService.py rename to source/eMailerOOo/service/MailSpooler.py index 79513365..4798cf85 100644 --- a/source/eMailerOOo/service/SpoolerService.py +++ b/source/eMailerOOo/service/MailSpooler.py @@ -32,7 +32,7 @@ from com.sun.star.lang import XServiceInfo -from com.sun.star.mail import XSpoolerService +from com.sun.star.mail import XMailSpooler from com.sun.star.logging.LogLevel import INFO from com.sun.star.logging.LogLevel import SEVERE @@ -44,35 +44,35 @@ # pythonloader looks for a static g_ImplementationHelper variable g_ImplementationHelper = unohelper.ImplementationHelper() -g_ImplementationName = 'com.sun.star.mail.SpoolerService' +g_ImplementationName = 'com.sun.star.mail.MailSpooler' -class SpoolerService(unohelper.Base, - XServiceInfo, - XSpoolerService): +class MailSpooler(unohelper.Base, + XServiceInfo, + XMailSpooler): def __init__(self, ctx): if self._spooler is None: with self._lock: if self._spooler is None: - SpoolerService.__spooler = Spooler(ctx, self) + MailSpooler.__spooler = Spooler(ctx, self) __lock = Lock() __spooler = None @property def _lock(self): - return SpoolerService.__lock + return MailSpooler.__lock @property def _spooler(self): - return SpoolerService.__spooler + return MailSpooler.__spooler - # XSpoolerService + # XMailSpooler def start(self): if not self.isStarted(): self._spooler.start() - def stop(self): + def terminate(self): if self.isStarted(): - self._spooler.stop() + self._spooler.terminate() def isStarted(self): return self._spooler.isStarted() @@ -107,6 +107,6 @@ def getSupportedServiceNames(self): return g_ImplementationHelper.getSupportedServiceNames(g_ImplementationName) -g_ImplementationHelper.addImplementation(SpoolerService, # UNO object class +g_ImplementationHelper.addImplementation(MailSpooler, # UNO object class g_ImplementationName, # Implementation name (g_ImplementationName,)) # List of implemented services diff --git a/source/eMailerOOo/service/MailServiceConfiguration.py b/source/eMailerOOo/service/MailUser.py similarity index 83% rename from source/eMailerOOo/service/MailServiceConfiguration.py rename to source/eMailerOOo/service/MailUser.py index 3a641aa1..4d9f0ea8 100644 --- a/source/eMailerOOo/service/MailServiceConfiguration.py +++ b/source/eMailerOOo/service/MailUser.py @@ -30,12 +30,12 @@ import uno import unohelper -from com.sun.star.mail import XMailServiceConfiguration +from com.sun.star.mail import XMailUser from com.sun.star.lang import XServiceInfo from emailer import DispatchListener -from emailer import MailUser +from emailer import User from emailer import executeDispatch from emailer import getPropertyValueSet @@ -44,23 +44,23 @@ # pythonloader looks for a static g_ImplementationHelper variable g_ImplementationHelper = unohelper.ImplementationHelper() -g_ImplementationName = 'org.openoffice.pyuno.MailServiceConfiguration' +g_ImplementationName = 'org.openoffice.pyuno.MailUser' -class MailServiceConfiguration(unohelper.Base, - XServiceInfo, - XMailServiceConfiguration): +class MailUser(unohelper.Base, + XServiceInfo, + XMailUser): def __init__(self, ctx, sender=''): self._ctx = ctx self._sender = sender - user = MailUser(ctx, sender) + user = User(ctx, sender) if user.isNew(): self._user = None else: self._user = user - print("MailServiceConfiguration.__init__() Sender: %s" % sender) + print("MailUser.__init__() Sender: %s" % sender) -# XMailServiceConfiguration +# XMailUser def supportIMAP(self): if self._user is None: self._initUser() @@ -79,18 +79,18 @@ def getReplyToAddress(self): def getAuthenticator(self, stype): if self._user is None: self._initUser() - print("MailServiceConfiguration.getAuthenticator() MailServerType: %s" % stype.value) + print("MailUser.getAuthenticator() MailServerType: %s" % stype.value) return self._user.getAuthenticator(stype.value) def getConnectionContext(self, stype): if self._user is None: self._initUser() - print("MailServiceConfiguration.getConnectionContext() MailServerType: %s" % stype.value) + print("MailUser.getConnectionContext() MailServerType: %s" % stype.value) return self._user.getConnectionContext(stype.value) # Internal method def setUser(self, sender): - self._user = MailUser(self._ctx, sender) + self._user = User(self._ctx, sender) def _initUser(self): listener = DispatchListener(self.setUser) @@ -106,6 +106,6 @@ def getSupportedServiceNames(self): return g_ImplementationHelper.getSupportedServiceNames(g_ImplementationName) -g_ImplementationHelper.addImplementation(MailServiceConfiguration, # UNO object class +g_ImplementationHelper.addImplementation(MailUser, # UNO object class g_ImplementationName, # Implementation name - ('com.sun.star.mail.MailServiceConfiguration',)) # List of implemented services + ('com.sun.star.mail.MailUser',)) # List of implemented services diff --git a/source/eMailerOOo/service/pythonpath/emailer/__init__.py b/source/eMailerOOo/service/pythonpath/emailer/__init__.py index 632c8742..e6ba103f 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/__init__.py +++ b/source/eMailerOOo/service/pythonpath/emailer/__init__.py @@ -39,7 +39,7 @@ from .unotool import getPropertyValueSet from .unotool import getConfiguration -from .mailuser import MailUser +from .user import User from .maildispatch import MailDispatch diff --git a/source/eMailerOOo/service/pythonpath/emailer/datasource.py b/source/eMailerOOo/service/pythonpath/emailer/datasource.py index 5a04aa3b..20d2e980 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/datasource.py +++ b/source/eMailerOOo/service/pythonpath/emailer/datasource.py @@ -106,7 +106,7 @@ def getFilterValue(self, value, dbtype): def getFilter(self, identifier, value, dbtype): return '"%s" = %s' % (identifier, self.getFilterValue(value, dbtype)) -# Procedures called by the SpoolerService +# Procedures called by the MailSpooler def insertJob(self, sender, subject, document, recipient, attachment): recipients = Array('VARCHAR', recipient) attachments = Array('VARCHAR', attachment) diff --git a/source/eMailerOOo/service/pythonpath/emailer/dbqueries.py b/source/eMailerOOo/service/pythonpath/emailer/dbqueries.py index 3800c0b7..6507f09d 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/dbqueries.py +++ b/source/eMailerOOo/service/pythonpath/emailer/dbqueries.py @@ -242,7 +242,7 @@ def getSqlQuery(ctx, name, format=None): """ # Delete Procedure Queries - # SpoolerService Delete Procedure Queries + # MailSpooler Delete Procedure Queries elif name == 'createDeleteJobs': query = """\ CREATE PROCEDURE "DeleteJobs"(IN JOBIDS INTEGER ARRAY) @@ -312,7 +312,7 @@ def getSqlQuery(ctx, name, format=None): END;""" # Insert Procedure Queries - # SpoolerService Insert Procedure Queries + # MailSpooler Insert Procedure Queries elif name == 'createInsertJob': query = """\ CREATE PROCEDURE "InsertJob"(IN SENDER VARCHAR(320), @@ -343,7 +343,7 @@ def getSqlQuery(ctx, name, format=None): SET BATCHID = ID; END;""" - # SpoolerService Insert Procedure Queries + # MailSpooler Insert Procedure Queries elif name == 'createInsertMergeJob': query = """\ CREATE PROCEDURE "InsertMergeJob"(IN SENDER VARCHAR(320), diff --git a/source/eMailerOOo/service/pythonpath/emailer/ispdb/ispdbmodel.py b/source/eMailerOOo/service/pythonpath/emailer/ispdb/ispdbmodel.py index 0417a2d5..ef2f616e 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/ispdb/ispdbmodel.py +++ b/source/eMailerOOo/service/pythonpath/emailer/ispdb/ispdbmodel.py @@ -71,7 +71,7 @@ from ..configuration import g_logourl from ..configuration import g_chunk -from ..mailuser import MailUser +from ..user import User from .ispdbserver import IspdbServer @@ -171,7 +171,7 @@ def _getServerConfig(self, progress, update): progress(20) mode = getConnectionMode(self._ctx, url.Server) progress(30) - user = MailUser(self._ctx, self.Sender) + user = User(self._ctx, self.Sender) progress(40) request = createService(self._ctx, g_service) progress(50) diff --git a/source/eMailerOOo/service/pythonpath/emailer/listener.py b/source/eMailerOOo/service/pythonpath/emailer/listener.py index 408b072e..79e79721 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/listener.py +++ b/source/eMailerOOo/service/pythonpath/emailer/listener.py @@ -42,7 +42,7 @@ def __init__(self, spooler): # XTerminateListener def queryTermination(self, event): try: - self._spooler.stop() + self._spooler.terminate() except Exception as e: msg = "TerminateListener Error: %s" % traceback.format_exc() print(msg) diff --git a/source/eMailerOOo/service/pythonpath/emailer/mailer/mailermanager.py b/source/eMailerOOo/service/pythonpath/emailer/mailer/mailermanager.py index 649a98ce..ef9c74a9 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/mailer/mailermanager.py +++ b/source/eMailerOOo/service/pythonpath/emailer/mailer/mailermanager.py @@ -37,7 +37,7 @@ from .mailerview import MailerView from .mailerhandler import DialogHandler -from ..unotool import createService +from ..mailertool import getMailSpooler import traceback @@ -95,9 +95,7 @@ def sendDocument(self): print("MailerManager.sendDocument() *************************** %s - %s" % (subject, attachments)) sender, recipients = self._view.getEmail() url = self._model.getUrl() - service = 'com.sun.star.mail.SpoolerService' - spooler = createService(self._ctx, service) - id = spooler.addJob(sender, subject, url, recipients, attachments) + id = getMailSpooler(self._ctx).addJob(sender, subject, url, recipients, attachments) self._view.endDialog() except Exception as e: msg = "Error: %s" % traceback.format_exc() diff --git a/source/eMailerOOo/service/pythonpath/emailer/mailertool.py b/source/eMailerOOo/service/pythonpath/emailer/mailertool.py index 9c922374..8f53c33a 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/mailertool.py +++ b/source/eMailerOOo/service/pythonpath/emailer/mailertool.py @@ -134,10 +134,15 @@ def getMailService(ctx, service): stype = uno.Enum('com.sun.star.mail.MailServiceType', service) return createService(ctx, name).create(stype) -def getMailConfiguration(ctx, sender): - service = 'com.sun.star.mail.MailServiceConfiguration' - config = createService(ctx, service, sender) - return config +def getMailUser(ctx, sender): + service = 'com.sun.star.mail.MailUser' + user = createService(ctx, service, sender) + return user + +def getMailSpooler(ctx): + service = 'com.sun.star.mail.MailSpooler' + spooler = createService(ctx, service) + return spooler def getMailMessage(ctx, sender, recipient, subject, body): service = 'com.sun.star.mail.MailMessage' diff --git a/source/eMailerOOo/service/pythonpath/emailer/merger/mergermodel.py b/source/eMailerOOo/service/pythonpath/emailer/merger/mergermodel.py index 44f2facb..203e98cd 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/merger/mergermodel.py +++ b/source/eMailerOOo/service/pythonpath/emailer/merger/mergermodel.py @@ -176,14 +176,9 @@ def saveGrids(self): # Procedures called by WizardPage1 # AddressBook methods - def _getDatabaseContext(self): - service = 'com.sun.star.sdb.DatabaseContext' - return createService(self._ctx, service) - def getAvailableAddressBooks(self): - names = self._getDatabaseContext().getElementNames() - print("MergerModel.getAvailableAddressBooks(): %s" % (names, )) - return names + service = 'com.sun.star.sdb.DatabaseContext' + return createService(self._ctx, service).getElementNames() def getDefaultAddressBook(self): book = '' diff --git a/source/eMailerOOo/service/pythonpath/emailer/merger/page3/mergermanager.py b/source/eMailerOOo/service/pythonpath/emailer/merger/page3/mergermanager.py index 3f8f63c8..a7e4b395 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/merger/page3/mergermanager.py +++ b/source/eMailerOOo/service/pythonpath/emailer/merger/page3/mergermanager.py @@ -46,7 +46,7 @@ from ...mail import MailManager from ...mail import WindowHandler -from ...unotool import createService +from ...mailertool import getMailSpooler from threading import Condition import traceback @@ -106,9 +106,7 @@ def sendDocument(self): sender, recipients = self._view.getEmail() url, datasource, query, table, filters = self._model.getDocumentInfo() print("MergerManager.sendDocument() %s: %s - %s - %s - %s - %s\n%s" % (sender, subject, url, datasource, query, table, recipients)) - service = 'com.sun.star.mail.SpoolerService' - spooler = createService(self._ctx, service) - id = spooler.addMergeJob(sender, subject, url, datasource, query, table, recipients, filters, attachments) + id = getMailSpooler(self._ctx).addMergeJob(sender, subject, url, datasource, query, table, recipients, filters, attachments) # MergerManager private setter methods def _closeDocument(self, document): diff --git a/source/eMailerOOo/service/pythonpath/emailer/options/optionsmanager.py b/source/eMailerOOo/service/pythonpath/emailer/options/optionsmanager.py index 6e6cfdbf..bdc4b38b 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/options/optionsmanager.py +++ b/source/eMailerOOo/service/pythonpath/emailer/options/optionsmanager.py @@ -38,7 +38,7 @@ from ..logger import LogManager -from ..spooler import SpoolerListener +from ..spooler import StreamListener from ..unotool import (executeDispatch, getDesktop) @@ -63,18 +63,24 @@ def __init__(self, ctx, window): infos = {111: version, 112: path} self._logger = LogManager(ctx, window.getPeer(), infos, g_identifier, g_defaultlog, g_spoolerlog, g_mailservicelog) window.addEventListener(OptionsListener(self)) - self._listener = SpoolerListener(self) - self._model.addSpoolerListener(self._listener) + self._listener = StreamListener(self) + self._model.addStreamListener(self._listener) def started(self): self._view.setSpoolerStatus(*self._model.getSpoolerStatus(1)) - def stopped(self): + def closed(self): self._view.setSpoolerStatus(*self._model.getSpoolerStatus(0)) + def terminated(self): + self._view.setSpoolerStatus(*self._model.getSpoolerStatus(0)) + + def error(self): + pass + def dispose(self): self._logger.dispose() - self._model.removeSpoolerListener(self._listener) + self._model.removeStreamListener(self._listener) def loadSetting(self): self._logger.loadSetting() diff --git a/source/eMailerOOo/service/pythonpath/emailer/options/optionsmodel.py b/source/eMailerOOo/service/pythonpath/emailer/options/optionsmodel.py index 97154d6f..97de1eec 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/options/optionsmodel.py +++ b/source/eMailerOOo/service/pythonpath/emailer/options/optionsmodel.py @@ -29,7 +29,8 @@ import unohelper -from ..unotool import createService +from ..mailertool import getMailSpooler + from ..unotool import getConfiguration from ..unotool import getResourceLocation from ..unotool import getSimpleFile @@ -49,17 +50,17 @@ class OptionsModel(): def __init__(self, ctx): self._ctx = ctx self._config = getConfiguration(ctx, g_identifier, True) - self._spooler = createService(ctx, 'com.sun.star.mail.SpoolerService') + self._spooler = getMailSpooler(ctx) self._resolver = getStringResource(ctx, g_identifier, g_extension, 'OptionsDialog') self._resources = {'SpoolerStatus': 'OptionsDialog.Label4.Label.%s'} folder = g_folder + g_separator + g_basename location = getResourceLocation(ctx, g_identifier, folder) self._url = location + '.odb' - def addSpoolerListener(self, listener): + def addStreamListener(self, listener): self._spooler.addListener(listener) - def removeSpoolerListener(self, listener): + def removeStreamListener(self, listener): self._spooler.removeListener(listener) def getViewData(self): @@ -77,7 +78,7 @@ def toogleSpooler(self, state): if state: self._spooler.start() else: - self._spooler.stop() + self._spooler.terminate() def getSpoolerStatus(self, started): resource = self._resources.get('SpoolerStatus') % started diff --git a/source/eMailerOOo/service/pythonpath/emailer/spooler/__init__.py b/source/eMailerOOo/service/pythonpath/emailer/spooler/__init__.py index 30410a83..60b0df21 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/spooler/__init__.py +++ b/source/eMailerOOo/service/pythonpath/emailer/spooler/__init__.py @@ -31,6 +31,6 @@ from .mailer import Mailer -from .listener import SpoolerListener +from .listener import StreamListener from .dialog import SpoolerManager diff --git a/source/eMailerOOo/service/pythonpath/emailer/spooler/dialog/spoolermanager.py b/source/eMailerOOo/service/pythonpath/emailer/spooler/dialog/spoolermanager.py index 41ef4dab..a8a92aef 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/spooler/dialog/spoolermanager.py +++ b/source/eMailerOOo/service/pythonpath/emailer/spooler/dialog/spoolermanager.py @@ -41,14 +41,15 @@ from .spoolerhandler import Tab1Handler from .spoolerhandler import Tab2Handler -from ..listener import SpoolerListener +from ..listener import StreamListener from ...grid import GridListener from ...grid import RowSetListener from ...dispatchlistener import DispatchListener -from ...unotool import createService +from ...mailertool import getMailSpooler + from ...unotool import executeDispatch from ...unotool import executeShell from ...unotool import getPropertyValueSet @@ -75,8 +76,8 @@ def __init__(self, ctx, datasource, parent): self._model = SpoolerModel(ctx, datasource) titles = self._model.getDialogTitles() self._view = SpoolerView(ctx, DialogHandler(self), Tab1Handler(self), Tab2Handler(self), parent, *titles) - self._spooler = createService(ctx, 'com.sun.star.mail.SpoolerService') - self._spoolerlistener = SpoolerListener(self) + self._spooler = getMailSpooler(ctx) + self._spoolerlistener = StreamListener(self) self._spooler.addListener(self._spoolerlistener) self._refreshSpoolerState() window = self._view.getGridWindow() @@ -117,10 +118,17 @@ def changeGridSelection(self, index, grid): def started(self): self._refreshSpoolerView(1) - def stopped(self): + def closed(self): self._model.executeRowSet() self._refreshSpoolerView(0) + def terminated(self): + self._model.executeRowSet() + self._refreshSpoolerView(0) + + def error(self): + pass + def saveGrid(self): self._model.saveGrid() @@ -169,7 +177,7 @@ def toogleSpooler(self, state): if state: self._spooler.start() else: - self._spooler.stop() + self._spooler.terminate() def closeSpooler(self): self._view.endDialog() diff --git a/source/eMailerOOo/service/pythonpath/emailer/spooler/listener.py b/source/eMailerOOo/service/pythonpath/emailer/spooler/listener.py index b37e423b..71d14369 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/spooler/listener.py +++ b/source/eMailerOOo/service/pythonpath/emailer/spooler/listener.py @@ -29,22 +29,28 @@ import unohelper -from com.sun.star.mail import XSpoolerListener +from com.sun.star.io import XStreamListener import traceback -class SpoolerListener(unohelper.Base, - XSpoolerListener): +class StreamListener(unohelper.Base, + XStreamListener): def __init__(self, manager): self._manager = manager - # XSpoolerListener - def started(self, source): + # XStreamListener + def started(self): self._manager.started() - def stopped(self, source): - self._manager.stopped() + def closed(self): + self._manager.closed() + + def terminated(self): + self._manager.terminated() + + def error(self, e): + self._manager.error(e) def disposing(self, source): pass diff --git a/source/eMailerOOo/service/pythonpath/emailer/spooler/mailer.py b/source/eMailerOOo/service/pythonpath/emailer/spooler/mailer.py index 717e93f4..5b727b66 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/spooler/mailer.py +++ b/source/eMailerOOo/service/pythonpath/emailer/spooler/mailer.py @@ -52,7 +52,7 @@ from ..dbtool import getRowDict -from ..mailertool import getMailConfiguration +from ..mailertool import getMailUser from ..mailertool import getMailMessage from ..mailertool import getMailService from ..mailertool import getMessageImage @@ -133,7 +133,7 @@ def _initMailer(self, job, recipient): self._url, self._urls = self._getUrls(recipient, job, document, merge) if self._send: sender = metadata.get('Sender') - user = getMailConfiguration(self._ctx, sender) + user = getMailUser(self._ctx, sender) self._server = self._getMailServer(user, SMTP) if self._needThread(user, merge): threadid = self._createThread(recipient.BatchId, user, document, sender, metadata) diff --git a/source/eMailerOOo/service/pythonpath/emailer/spooler/spooler.py b/source/eMailerOOo/service/pythonpath/emailer/spooler/spooler.py index 2f8f3577..4b6e3367 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/spooler/spooler.py +++ b/source/eMailerOOo/service/pythonpath/emailer/spooler/spooler.py @@ -63,21 +63,29 @@ class Spooler(): def __init__(self, ctx, source): self._ctx = ctx self._source = source - self._lock = Lock() self._stop = Event() self._listeners = [] self._logger = getLogger(ctx, g_spoolerlog) - self._thread = Thread(target=self._run) self.DataSource = None -# Procedures called by TerminateListener and SpoolerService - def stop(self): + __lock = Lock() + __thread = Thread() + + @property + def _lock(self): + return Spooler.__lock + @property + def _thread(self): + return Spooler.__thread + +# Procedures called by TerminateListener and MailSpooler + def terminate(self): with self._lock: if self._thread.is_alive(): self._stop.set() - self._thread.join() + #self._thread.join() -# Procedures called by SpoolerService +# Procedures called by MailSpooler def isStarted(self): with self._lock: return self._thread.is_alive() @@ -85,7 +93,7 @@ def isStarted(self): def start(self): with self._lock: if not self._thread.is_alive(): - self._thread = Thread(target=self._run) + Spooler.__thread = Thread(target=self._run) self._stop.clear() self._thread.start() self._started() @@ -148,14 +156,20 @@ def _logError(self, method, code, *args): self._logger.logprb(SEVERE, 'MailSpooler', method, code, *args) def _started(self): - event = uno.createUnoStruct('com.sun.star.lang.EventObject') for listener in self._listeners: - listener.started(event) + listener.started() + + def _closed(self): + for listener in self._listeners: + listener.closed() - def _stopped(self): - event = uno.createUnoStruct('com.sun.star.lang.EventObject') + def _terminated(self): for listener in self._listeners: - listener.stopped(event) + listener.terminated() + + def _error(self, e): + for listener in self._listeners: + listener.error(e) def _run(self): handler = RollerHandler(self._ctx, self._logger.Name) @@ -175,12 +189,15 @@ def _run(self): if total > 0: self._logger.logprb(INFO, 'MailSpooler', 'start()', 1011, total) count = self._sendMails(jobs) - self._logger.logprb(INFO, 'MailSpooler', 'stop()', 1012, count, total) + self._logger.logprb(INFO, 'MailSpooler', self._getMethod(), 1012, count, total) else: self._logger.logprb(INFO, 'MailSpooler', 'start()', 1013) - self._logger.logprb(INFO, 'MailSpooler', 'stop()', 1014) + self._logger.logprb(INFO, 'MailSpooler', self._getMethod(), self._getResource(1014)) self._logger.removeRollerHandler(handler) - self._stopped() + if self._stop.is_set(): + self._terminated() + else: + self._closed() def _sendMails(self, jobs): mailer = Mailer(self._ctx, self._source, self.DataSource.DataBase, self._logger, True) @@ -192,11 +209,16 @@ def _sendMails(self, jobs): break try: mail = mailer.getMail(job) + if self._stop.is_set(): + self._logger.logprb(INFO, 'MailSpooler', '_sendMails()', 1022, job) + break mailer.sendMail(mail) except UnoException as e: + self._error(e) self._logger.logprb(SEVERE, 'MailSpooler', '_sendMails()', 1023, job, e.Message) continue except Exception as e: + self._error(UnoException(str(e), self._source)) self._logger.logprb(SEVERE, 'MailSpooler', '_sendMails()', 1024, job, str(e), traceback.format_exc()) continue self.DataSource.DataBase.updateRecipient(1, mail.MessageId, job) @@ -209,3 +231,9 @@ def _isOffLine(self): mode = getConnectionMode(self._ctx, *g_dns) return mode == OFFLINE + def _getMethod(self): + return 'terminate()' if self._stop.is_set() else 'close()' + + def _getResource(self, code): + return code + int(self._stop.is_set()) + diff --git a/source/eMailerOOo/service/pythonpath/emailer/mailuser.py b/source/eMailerOOo/service/pythonpath/emailer/user.py similarity index 99% rename from source/eMailerOOo/service/pythonpath/emailer/mailuser.py rename to source/eMailerOOo/service/pythonpath/emailer/user.py index 2bd8f583..61d9c21f 100644 --- a/source/eMailerOOo/service/pythonpath/emailer/mailuser.py +++ b/source/eMailerOOo/service/pythonpath/emailer/user.py @@ -43,7 +43,7 @@ import traceback -class MailUser(unohelper.Base): +class User(unohelper.Base): def __init__(self, ctx, sender, new=False): self._sender = sender name, address = parseaddr(sender) diff --git a/source/eMailerOOo/types.rdb b/source/eMailerOOo/types.rdb index d30628bd..4249e661 100644 Binary files a/source/eMailerOOo/types.rdb and b/source/eMailerOOo/types.rdb differ