package co.touchlab.droidconandroid.presenter; import android.content.Context; import com.google.j2objc.annotations.Weak; import org.apache.commons.lang3.StringUtils; import co.touchlab.android.threading.tasks.TaskQueue; import co.touchlab.android.threading.tasks.utils.TaskQueueHelper; import co.touchlab.droidconandroid.data.AppPrefs; import co.touchlab.droidconandroid.tasks.AddRsvpTask; import co.touchlab.droidconandroid.tasks.EventDetailLoadTask; import co.touchlab.droidconandroid.tasks.EventVideoDetailsTask; import co.touchlab.droidconandroid.tasks.Queues; import co.touchlab.droidconandroid.tasks.RemoveRsvpTask; import co.touchlab.droidconandroid.tasks.StartWatchVideoTask; import co.touchlab.droidconandroid.utils.AnalyticsEvents; import co.touchlab.droidconandroid.utils.SlackUtils; /** * Created by kgalligan on 4/25/16. */ public class EventDetailPresenter extends AbstractEventBusPresenter { private final long eventId; @Weak private EventDetailHost host; private EventDetailLoadTask eventDetailLoadTask; private EventVideoDetailsTask eventVideoDetailsTask; public EventDetailPresenter(Context context, long eventId, EventDetailHost host) { super(context); this.eventId = eventId; this.host = host; } public void refreshData() { Queues.localQueue(getContext()).execute(new EventDetailLoadTask(this.eventId)); } public void callStartVideo(String link, String cover) { recordAnalytics(AnalyticsEvents.STREAM_CLICKED); TaskQueue.loadQueueNetwork(getContext()) .execute(new StartWatchVideoTask(eventId, link, cover)); } public void onEventMainThread(EventDetailLoadTask task) { eventDetailLoadTask = task; recordAnalytics(AnalyticsEvents.OPEN_EVENT); refreshVideoData(); host.dataRefresh(); } private void recordAnalytics(String analyticsKey) { String eventName = eventDetailLoadTask != null && eventDetailLoadTask.getEvent() != null ? StringUtils.trimToEmpty(eventDetailLoadTask.getEvent().getName()) : ""; AppManager.getPlatformClient().logEvent( analyticsKey, AnalyticsEvents.PARAM_ITEM_ID, Long.toString(eventId), AnalyticsEvents.PARAM_ITEM_NAME, eventName ); } public void refreshVideoData() { TaskQueue.loadQueueNetwork(getContext()).execute(new EventVideoDetailsTask(eventId)); } public void onEventMainThread(EventVideoDetailsTask task) { if(task.getEventId() == eventId && eventDetailLoadTask != null) { eventVideoDetailsTask = task; host.videoDataRefresh(); } } public void onEventMainThread(RemoveRsvpTask task) { refreshData(); } public void onEventMainThread(AddRsvpTask task) { refreshData(); } public void onEventMainThread(StartWatchVideoTask task) { host.resetStreamProgress(); if(task.videoOk) { recordAnalytics(AnalyticsEvents.STREAM_SUCCESS); host.callStreamActivity(task); } else if(task.unauthorized) { host.showTicketOptions(AppPrefs.getInstance(getContext()).getEventbriteEmail(), task.link, task.cover); } else { host.reportError("Couldn't start video. Either server or network issue."); } } public boolean isStreamStarting() { return TaskQueueHelper.hasTasksOfType(TaskQueue.loadQueueNetwork(getContext()), StartWatchVideoTask.class); } private boolean ready() { return eventDetailLoadTask != null; } public EventDetailLoadTask getEventDetailLoadTask() { return eventDetailLoadTask; } public EventVideoDetailsTask getEventVideoDetailsTask() { return eventVideoDetailsTask; } @Override public void unregister() { super.unregister(); host = null; } public void toggleRsvp() { if(! ready()) { return; } long eventId = eventDetailLoadTask.event.id; if(eventDetailLoadTask.event.isRsvped()) { Queues.localQueue(getContext()) .execute(new RemoveRsvpTask(eventId)); recordAnalytics(AnalyticsEvents.UNRSVP_EVENT); } else { Queues.localQueue(getContext()).execute(new AddRsvpTask(eventId)); recordAnalytics(AnalyticsEvents.RSVP_EVENT); } } public void setEventbriteEmail(String email, String link, String cover) { AppPrefs.getInstance(getContext()).setEventbriteEmail(email); callStartVideo(link, cover); } public void openSlack() { String slackLink = SlackUtils.createSlackLink(eventDetailLoadTask.event.venue); String slackLinkHttp = SlackUtils.createSlackLinkHttp(eventDetailLoadTask.event.venue); host.openSlack(slackLink, slackLinkHttp, AppPrefs.getInstance(getContext()).getShowSlackDialog()); } }