package net.frontlinesms.messaging.mms.email; import java.util.Collection; import net.frontlinesms.data.DuplicateKeyException; import net.frontlinesms.data.domain.EmailAccount; import net.frontlinesms.data.domain.FrontlineMessage; import net.frontlinesms.data.repository.EmailAccountDao; import net.frontlinesms.email.receive.EmailReceiveProtocol; import net.frontlinesms.email.receive.EmailReceiver; import net.frontlinesms.events.EventBus; import net.frontlinesms.listener.SmsListener; import net.frontlinesms.messaging.mms.MmsService; import net.frontlinesms.messaging.mms.MmsServiceStatus; import net.frontlinesms.messaging.mms.MmsUtils; import net.frontlinesms.messaging.mms.events.MmsServiceStatusNotification; import net.frontlinesms.mms.MmsMessage; import net.frontlinesms.mms.MmsReceiveException; import net.frontlinesms.mms.email.receive.EmailMmsReceiver; public class MmsEmailService implements MmsService { private EmailMmsReceiver mmsEmailReceiver; private EmailAccount emailAccount; private MmsServiceStatus status = MmsEmailServiceStatus.READY; public MmsEmailService (EmailAccount emailAccount) { this.setEmailAccount(emailAccount); this.status = (emailAccount.isEnabled() ? MmsEmailServiceStatus.READY : MmsEmailServiceStatus.DISCONNECTED); mmsEmailReceiver = new EmailMmsReceiver(); populateReceiver(emailAccount); mmsEmailReceiver.addParsers(MmsUtils.getAllEmailMmsParsers()); } /** Update the email receiver with hte settings from an {@link EmailAccount} */ public void populateReceiver(EmailAccount emailAccount) { EmailReceiver receiver = new EmailReceiver(this.mmsEmailReceiver); receiver.setHostAddress(emailAccount.getAccountServer()); receiver.setHostPassword(emailAccount.getAccountPassword()); receiver.setHostPort(emailAccount.getAccountServerPort()); receiver.setHostUsername(emailAccount.getAccountName()); receiver.setUseSsl(emailAccount.useSsl()); receiver.setLastCheck(emailAccount.getLastCheck()); receiver.setProtocol(EmailReceiveProtocol.valueOf(emailAccount.getProtocol())); this.mmsEmailReceiver.setReceiver(receiver); } public Collection<MmsMessage> receive () throws MmsReceiveException { return this.mmsEmailReceiver.receive(); } public MmsServiceStatus getStatus() { return this.status; } public String getStatusDetail() { // TODO Auto-generated method stub return null; } public boolean isConnected() { return (!this.status.equals(MmsEmailServiceStatus.DISCONNECTED) && !this.status.equals(MmsEmailServiceStatus.FAILED_TO_CONNECT)); } public boolean isUseForReceiving() { // TODO Auto-generated method stub return false; } public void sendMMS(FrontlineMessage outgoingMessage) { // TODO Auto-generated method stub } public void setMmsListener(SmsListener smsListener) { // TODO Auto-generated method stub } public void setUseForReceiving(boolean use) { // TODO Auto-generated method stub } public String getServiceName () { return this.mmsEmailReceiver.getReceiver().getHostAddress(); } public String getUsername() { return this.mmsEmailReceiver.getReceiver().getHostUsername(); } public String getProtocol () { return this.mmsEmailReceiver.getReceiver().getProtocol().toString(); } public void setStatus(MmsServiceStatus status, EventBus eventBus) { this.status = status; if (eventBus != null) { eventBus.notifyObservers(new MmsServiceStatusNotification(this, this.status)); } } public void updateLastCheck(EmailAccountDao emailAccountDao) { long lastCheck = System.currentTimeMillis(); this.mmsEmailReceiver.getReceiver().setLastCheck(lastCheck); this.getEmailAccount().setLastCheck(lastCheck); try { emailAccountDao.updateEmailAccount(getEmailAccount()); } catch (DuplicateKeyException e) { } } public void setEmailAccount(EmailAccount emailAccount) { this.emailAccount = emailAccount; } public EmailAccount getEmailAccount() { return emailAccount; } public String getServiceIdentification() { return this.getUsername(); } public boolean isUseForSending() { return false; } public String getDisplayPort() { return String.valueOf(this.getEmailAccount().getAccountServerPort()); } }