package org.petabytes.awesomeblogs.digest;
import android.app.IntentService;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.petabytes.api.source.local.Entry;
import org.petabytes.awesomeblogs.AwesomeBlogsApp;
import org.petabytes.awesomeblogs.R;
import org.petabytes.awesomeblogs.fcm.Notifications;
import org.petabytes.awesomeblogs.feeds.FeedsActivity;
import org.petabytes.awesomeblogs.util.Analytics;
import org.petabytes.awesomeblogs.util.Preferences;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
import hugo.weaving.DebugLog;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
public class DigestService extends IntentService {
private static final String TYPE = "type";
@DebugLog
public DigestService() {
super("DigestService");
}
@DebugLog
@Override
protected void onHandleIntent(@Nullable Intent intent) {
if (!Preferences.digest().get()) {
return;
}
AwesomeBlogsApp.get().api().getFreshEntries()
.map(pair -> pair.second)
.filter(pair -> !pair.isEmpty())
.first()
.timeout(1, TimeUnit.MINUTES)
.onErrorResumeNext(Observable.empty())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(entries ->
Analytics.event(Analytics.Event.SEND_DIGEST, new HashMap<String, String>(2) {{
put(Analytics.Param.TYPE, getType(intent) == 0 ? "morning" : "evening");
put(Analytics.Param.SIZE, String.valueOf(entries.size()));
}}))
.subscribe(entries ->
Notifications.send(this, getString(R.string.digest_title, entries.size()),
createMessage(entries), FeedsActivity.intent(this, "all", entries.size())));
AwesomeBlogsApp.get().api().getFeed("all", false)
.onErrorResumeNext(Observable.empty())
.subscribe();
}
private String createMessage(@NonNull List<Entry> entries) {
String message;
switch (entries.size()) {
case 0:
throw new IllegalStateException("Size cannot be zero.");
case 1:
message = getString(R.string.digest_message_1, entries.get(0).getTitle());
break;
case 2:
message = getString(R.string.digest_message_2,
entries.get(0).getTitle(), entries.get(1).getTitle());
break;
case 3:
message = getString(R.string.digest_message_3,
entries.get(0).getTitle(), entries.get(1).getTitle(), entries.get(2).getTitle());
break;
default:
message = getString(R.string.digest_message_4,
entries.get(0).getTitle(), entries.get(1).getTitle(), entries.get(2).getTitle(), entries.size() - 3);
break;
}
return message;
}
private static int getType(@Nullable Intent intent) {
return intent == null ? 0 : intent.getIntExtra(TYPE, 0);
}
public static Intent intent(@NonNull Context context, @Schedulers.Type int type) {
Intent intent = new Intent(context, DigestService.class);
intent.putExtra(TYPE, type);
return intent;
}
}