package tv.emby.embyatv.browsing;
import android.support.v17.leanback.widget.HeaderItem;
import android.support.v17.leanback.widget.ListRow;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import mediabrowser.apiinteraction.Response;
import mediabrowser.model.dto.BaseItemDto;
import mediabrowser.model.entities.LocationType;
import mediabrowser.model.livetv.RecordingGroupQuery;
import mediabrowser.model.livetv.RecordingQuery;
import mediabrowser.model.livetv.TimerInfoDto;
import mediabrowser.model.livetv.TimerQuery;
import mediabrowser.model.querying.ItemFields;
import mediabrowser.model.querying.ItemsResult;
import mediabrowser.model.results.TimerInfoDtoResult;
import tv.emby.embyatv.R;
import tv.emby.embyatv.TvApp;
import tv.emby.embyatv.itemhandling.ItemRowAdapter;
import tv.emby.embyatv.util.Utils;
/**
* Created by Eric on 9/3/2015.
*/
public class BrowseRecordingsFragment extends EnhancedBrowseFragment {
@Override
public void onResume() {
super.onResume();
}
@Override
protected void setupQueries(final IRowLoader rowLoader) {
mTitle.setText(TvApp.getApplication().getResources().getString(R.string.lbl_loading_elipses));
//Latest Recordings
RecordingQuery recordings = new RecordingQuery();
recordings.setFields(new ItemFields[]{ItemFields.Overview, ItemFields.PrimaryImageAspectRatio});
recordings.setUserId(TvApp.getApplication().getCurrentUser().getId());
recordings.setEnableImages(true);
recordings.setLimit(40);
//Do a straight query and then split the returned items into logical groups
TvApp.getApplication().getApiClient().GetLiveTvRecordingsAsync(recordings, new Response<ItemsResult>() {
@Override
public void onResponse(ItemsResult response) {
final ItemsResult recordingsResponse = response;
final long ticks24 = 1000 * 60 * 60 * 24;
// Also get scheduled recordings for next 24 hours
final TimerQuery scheduled = new TimerQuery();
TvApp.getApplication().getApiClient().GetLiveTvTimersAsync(scheduled, new Response<TimerInfoDtoResult>(){
@Override
public void onResponse(TimerInfoDtoResult response) {
List<BaseItemDto> nearTimers = new ArrayList<>();
long next24 = System.currentTimeMillis() + ticks24;
//Get scheduled items for next 24 hours
for (TimerInfoDto timer : response.getItems()) {
if (Utils.convertToLocalDate(timer.getStartDate()).getTime() <= next24) {
BaseItemDto programInfo = timer.getProgramInfo();
if (programInfo == null) {
programInfo = new BaseItemDto();
programInfo.setId(timer.getId());
programInfo.setChannelName(timer.getChannelName());
programInfo.setName(Utils.NullCoalesce(timer.getName(),"Unknown"));
TvApp.getApplication().getLogger().Warn("No program info for timer %s. Creating one...", programInfo.getName());
programInfo.setType("Program");
programInfo.setTimerId(timer.getId());
programInfo.setSeriesTimerId(timer.getSeriesTimerId());
programInfo.setStartDate(timer.getStartDate());
programInfo.setEndDate(timer.getEndDate());
}
programInfo.setLocationType(LocationType.Virtual);
nearTimers.add(programInfo);
}
}
if (recordingsResponse.getTotalRecordCount() > 0) {
List<BaseItemDto> dayItems = new ArrayList<>();
List<BaseItemDto> weekItems = new ArrayList<>();
long past24 = System.currentTimeMillis() - ticks24;
long pastWeek = System.currentTimeMillis() - (ticks24 * 7);
for (BaseItemDto item : recordingsResponse.getItems()) {
if (Utils.convertToLocalDate(item.getStartDate()).getTime() >= past24) {
dayItems.add(item);
} else if (Utils.convertToLocalDate(item.getStartDate()).getTime() >= pastWeek) {
weekItems.add(item);
}
}
//First put all recordings in and retrieve
//All Recordings by group
RecordingGroupQuery recordingGroups = new RecordingGroupQuery();
recordingGroups.setUserId(TvApp.getApplication().getCurrentUser().getId());
mRows.add(new BrowseRowDef("All Recordings", recordingGroups));
rowLoader.loadRows(mRows);
//Now insert our smart rows
if (weekItems.size() > 0) {
ItemRowAdapter weekAdapter = new ItemRowAdapter(weekItems, mCardPresenter, mRowsAdapter, true);
weekAdapter.Retrieve();
ListRow weekRow = new ListRow(new HeaderItem("Past Week"), weekAdapter);
mRowsAdapter.add(0, weekRow);
}
if (nearTimers.size() > 0) {
ItemRowAdapter scheduledAdapter = new ItemRowAdapter(nearTimers, mCardPresenter, mRowsAdapter, true);
scheduledAdapter.Retrieve();
ListRow scheduleRow = new ListRow(new HeaderItem("Scheduled in Next 24 Hours"), scheduledAdapter);
mRowsAdapter.add(0, scheduleRow);
}
if (dayItems.size() > 0) {
ItemRowAdapter dayAdapter = new ItemRowAdapter(dayItems, mCardPresenter, mRowsAdapter, true);
dayAdapter.Retrieve();
ListRow dayRow = new ListRow(new HeaderItem("Past 24 Hours"), dayAdapter);
mRowsAdapter.add(0, dayRow);
}
} else {
// no recordings
if (nearTimers.size() > 0) {
ItemRowAdapter scheduledAdapter = new ItemRowAdapter(nearTimers, mCardPresenter, mRowsAdapter, true);
scheduledAdapter.Retrieve();
ListRow scheduleRow = new ListRow(new HeaderItem("Scheduled in Next 24 Hours"), scheduledAdapter);
mRowsAdapter.add(0, scheduleRow);
} else {
mTitle.setText(R.string.lbl_no_recordings);
}
}
}
});
}
@Override
public void onError(Exception exception) {
Utils.showToast(mApplication, exception.getLocalizedMessage());
}
});
}
}