Proof of Concept on TV Guide, index.html now shows the guide for the current hour and next hour for up to 100 channels.

This commit is contained in:
Jeff Lamb 2017-03-04 00:34:58 -05:00
parent d95a9ec9e1
commit 4ef91a13be
5 changed files with 141 additions and 9 deletions

View File

@ -74,6 +74,7 @@ import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
import com.moparisthebest.rcrdit.requestbeans.GetScheduleRequest;
import com.moparisthebest.rcrdit.responsebeans.GetScheduleResponse;
/**
* Created by mopar on 2/16/17.
@ -437,7 +438,7 @@ public class RcrdIt extends ResourceConfig implements AutoCloseable {
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
//List<Channel>
public List<Channel> getSchedule(GetScheduleRequest scheduleRequest) {
public GetScheduleResponse getSchedule(GetScheduleRequest scheduleRequest) {
List<Channel> channelList = new ArrayList<>();
try{
int firstItemToLoad = ((scheduleRequest.getPageNum()-1) * scheduleRequest.getChannelsPerPage());
@ -449,8 +450,7 @@ public class RcrdIt extends ResourceConfig implements AutoCloseable {
}catch(Exception e){
log.error("Error in getSchedule",e);
}
return channelList;
return new GetScheduleResponse(scheduleRequest,channelList);
}
/* @GET

View File

@ -47,7 +47,6 @@ public class GetScheduleRequest {
}
public void setStartTimeString(String startTimeString) {
System.out.println("In setStartTimeString");
this.startTimeString = startTimeString;
if(startTimeString != null){
startTime = Instant.parse(startTimeString);
@ -60,7 +59,6 @@ public class GetScheduleRequest {
}
public void setEndTimeString(String endTime) {
System.out.println("In setEndTimeString");
this.endTimeString = endTime;
if(endTimeString != null){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateTimeFormatPattern).withZone( ZoneOffset.UTC );
@ -89,7 +87,6 @@ public class GetScheduleRequest {
}
public final void setStartTime(Instant startTime) {
System.out.println("In setStartTime");
this.startTime = startTime;
if(this.startTime != null){
this.startTimeString = DateTimeFormatter.ofPattern(dateTimeFormatPattern).withZone(ZoneOffset.UTC).format(this.startTime);
@ -101,7 +98,6 @@ public class GetScheduleRequest {
}
public final void setEndTime(Instant endTime) {
System.out.println("In setEndTime");
this.endTime = endTime;
if(this.endTime != null){
this.endTimeString = DateTimeFormatter.ofPattern(dateTimeFormatPattern).withZone(ZoneOffset.UTC).format(this.endTime);

View File

@ -0,0 +1,46 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.moparisthebest.rcrdit.responsebeans;
import com.moparisthebest.rcrdit.requestbeans.GetScheduleRequest;
import com.moparisthebest.rcrdit.xmltv.Channel;
import java.util.List;
/**
*
* @author Jeff
*/
public class GetScheduleResponse {
protected GetScheduleRequest requestObject;
protected List<Channel> schedule;
public GetScheduleResponse(GetScheduleRequest requestObject, List<Channel> schedule) {
this.requestObject = requestObject;
this.schedule = schedule;
}
public GetScheduleRequest getRequestObject() {
return requestObject;
}
public void setRequestObject(GetScheduleRequest requestObject) {
this.requestObject = requestObject;
}
public List<Channel> getSchedule() {
return schedule;
}
public void setSchedule(List<Channel> schedule) {
this.schedule = schedule;
}
}

View File

@ -19,10 +19,15 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<meta charset="UTF-8"/>
<title>Rcrdit</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="js/rcrdit.js"></script>
</head>
<body>
hi
<div id="guideGoesHere">
</div>
</body>
</html>

View File

@ -0,0 +1,85 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
$( document ).ready(function() {
getSchedule(null);
});
function padToTwoDigits(ss){
ss = ""+ss;
if(ss.length < 2){
ss= "0"+ss;
}
return ss;
}
function getSchedule(requestObject){
if(isNull(requestObject)){
requestObject = {"channelsPerPage" : "100", "pageNum" : "1"};
}
$.ajax({
url: 'rest/getSchedule',
type: 'post',
dataType: 'json',
contentType: "application/json",
data: JSON.stringify(requestObject),
success: function (data) {
$("#guideGoesHere").html("");
var guideTable = $("<table border='1' cellpadding='1' cellspacing='0' style='border-collapse: collapse;'></table>");
var channelList = data.schedule;
var requestObject = data.requestObject;
var requestStartTimeEpochSeconds = requestObject.startTime.epochSecond;
var requestEndTimeEpochSeconds = requestObject.endTime.epochSecond;
var requestStartDate = new Date(requestStartTimeEpochSeconds*1000);
var requestEndDate = new Date(requestEndTimeEpochSeconds*1000);
var nextDate = new Date(requestStartDate.getTime());
nextDate.setHours(nextDate.getHours()+1);
var timeDisplayRow = $("<tr><td></td><td colspan=60>"+padToTwoDigits(requestStartDate.getHours())+":"+padToTwoDigits(requestStartDate.getMinutes())+"</td><td colspan=60>"+padToTwoDigits(nextDate.getHours())+":"+padToTwoDigits(nextDate.getMinutes())+"</td></tr>");
guideTable.append(timeDisplayRow);
for(var idx in channelList){
var channel = channelList[idx];
var channelTableRow = $("<tr><td>"+channel.displayName+"</td></tr>");
for(var idx2 in channel.programs){
var program = channel.programs[idx2];
var durationSeconds = program.stop.epochSecond-program.start.epochSecond;
var durationMinutes = durationSeconds/60;
var displayDurationSeconds = durationSeconds;
if(program.start.epochSecond < requestStartTimeEpochSeconds){
displayDurationSeconds = displayDurationSeconds-(requestStartTimeEpochSeconds-program.start.epochSecond);
}
if(program.stop.epochSecond > requestEndTimeEpochSeconds){
displayDurationSeconds = displayDurationSeconds-(program.stop.epochSecond-requestEndTimeEpochSeconds);
}
var displayDurationMinutes = displayDurationSeconds/60;
var programText = program.title;
if(!isNull(program.subTitle)){
programText+="<br/><font style='font-size:8pt'>"+program.subTitle+"</font>";
}
channelTableRow.append("<td colspan='"+Math.ceil(displayDurationMinutes)+"'>"+programText+"</td>");
}
guideTable.append(channelTableRow);
}
$("#guideGoesHere").append(guideTable);
},
error: function ( jqXHR, textStatus, errorThrown ){
alert(errorThrown);
}
});
}
function isNull(item){
if(item === null || typeof item === "undefined"){
return true;
}
return false;
}