package com.hannesdorfmann.mosby3.sample.mail.model.mail.service;
import android.app.IntentService;
import android.content.Intent;
import com.hannesdorfmann.mosby3.sample.mail.MailApplication;
import com.hannesdorfmann.mosby3.sample.mail.dagger.NavigationModule;
import com.hannesdorfmann.mosby3.sample.mail.model.account.AccountManager;
import com.hannesdorfmann.mosby3.sample.mail.model.event.MailSentErrorEvent;
import com.hannesdorfmann.mosby3.sample.mail.model.event.MailSentEvent;
import com.hannesdorfmann.mosby3.sample.mail.model.mail.Label;
import com.hannesdorfmann.mosby3.sample.mail.model.mail.Mail;
import com.hannesdorfmann.mosby3.sample.mail.model.mail.MailGenerator;
import com.hannesdorfmann.mosby3.sample.mail.model.mail.MailProvider;
import com.hannesdorfmann.mosby3.sample.mail.model.mail.receiver.MailReceiver;
import de.greenrobot.event.EventBus;
import javax.inject.Inject;
import rx.Subscriber;
/**
* @author Hannes Dorfmann
*/
public class SendMailService extends IntentService {
public static final String KEY_MAIL =
"com.hannesdorfmann.mosby.sample.mail.model.mail.service.MailingService.MAIL";
@Inject MailProvider mailProvider;
@Inject EventBus eventBus;
@Inject AccountManager accountManager;
@Inject MailGenerator generator;
public SendMailService() {
super("MailingService");
DaggerServiceComponent.builder()
.mailAppComponent(MailApplication.getMailComponents())
.navigationModule(new NavigationModule())
.build()
.inject(this);
}
@Override protected void onHandleIntent(Intent intent) {
final Mail mail = intent.getParcelableExtra(KEY_MAIL);
mail.label(Label.SENT);
mailProvider.addMailWithDelay(mail).subscribe(new Subscriber<Mail>() {
@Override public void onCompleted() {
}
@Override public void onError(Throwable e) {
eventBus.post(new MailSentErrorEvent(mail, e));
}
@Override public void onNext(Mail mail) {
eventBus.post(new MailSentEvent(mail));
generateResponse(mail);
}
});
}
private void generateResponse(Mail mail) {
Mail response = generator.generateResponseMail(mail.getReceiver().getEmail());
if (response != null) {
response.subject("RE: " + mail.getSubject());
Intent gcmIntent = new Intent();
gcmIntent.setAction(MailReceiver.ACTION_RECEIVE);
gcmIntent.putExtra(MailReceiver.EXTRA_MAIL, response);
sendBroadcast(gcmIntent);
}
}
}