var sessions = null;
// How to convert this to local?
var dateSessionFormat = d3.time.format("%H:%M:%S %d/%m/%Y");
var defaultTimelineHeight = $("#content").height() - 2.5 * $("#header").height();
//Object used for local storage of the user selections
var pageData = {
platform: "PS3",
gameType: $("select#session-game-type-select option:eq(0)").val(),
gamer: "",
//start: dateInputFormat(new Date()),
//end: dateInputFormat(new Date()),
}
//set true for disabled filter
var headerAndFilters = {
headerType: "header-sc", // social club filtering header
disabledFields: // disables header fields
[
false, // platforms
false, // locations
false, // age
false, // gamers
false, // game-types
false, // dates+builds
],
};
//Use this to map rest event names to more human readable ones and to respective css classes
var eventsMap = {
TelemetryEventDto: {name: "Telemetry Event", css: "telemetry-event"} ,
PositionalEventDto: {name: "Positional Event", css: "positional-event"},
WeaponEventDto: {name: "Weapon Event", css: "weapon-event"},
DeathEventDto: {name: "Death Event", css: "death-event"},
VehicleEventDto: {name: "Vehicle Event", css: "vehicle-event"},
WantedLevelEventDto: {name: "Wanted Level Event", css: "wanted-level-event"},
EmergencyServicesEventDto: {name: "Emergency Services Event", css: "emergency-services-event"},
CutsceneEventDto: {name: "Cutscene Event", css: "cutscene-event"},
MissionEventDto: {name: "Mission Event", css: "mission-event"},
RadioStationEventDto: {name: "Radio Station Event", css: "radio-station-event"},
}
function initSessionTimelinePage() {
// function from generic.js, variable from config file
initHeaderAndFilters(headerAndFilters);
var localData = retrieveLocalObject(config.currentFilename);
pageData = (localData) ? localData : pageData;
//block();
/*
// Gametypes List
$.ajax({
url: config.restHost + config.gametypesAll,
type: "GET",
data: {},
dataType: "xml",
success: function(xml, textStatus, jqXHR) {
var gametypes = convertGametypesXml(xml);
$.each(gametypes, function(i, gametype) {
$("select#session-game-type-select").append(
$("")
.text(gametype.Value)
.val(gametype.Value)
.attr("selected", function() {
return (pageData && pageData.gameType == gametype.Value) ? "selected" : false;
})
);
});
},
error: function (xhr, ajaxOptions, thrownError) {
console.error(this.url + "\n" + ajaxOptions + " " + xhr.status + " " + thrownError);
}
});
*/
var gameTypes = getGameTypes();
$.each(gameTypes, function(i, gametype) {
$("select#session-game-type-select").append(
$("")
.text(gametype.Name)
.val(gametype.Name)
.attr("selected", function() {
return (pageData && pageData.gameType == gametype.Name) ? "selected" : false;
})
);
});
// Platforms List
/*
$.ajax({
url: config.restHost + config.platformsAll,
type: "GET",
data: {},
dataType: "xml",
success: function(xml, textStatus, jqXHR) {
var platforms = convertPlatformsXml(xml);
$.each(platforms, function(i, platform) {
$("select#session-platform").append(
$("")
.text(platform.Value)
.val(platform.Value)
.attr("selected", function() {
return (pageData && pageData.platform == platform.Value) ? "selected" : false;
})
);
});
updateGamersList();
},
error: function (xhr, ajaxOptions, thrownError) {
console.error(this.url + "\n" + ajaxOptions + " " + xhr.status + " " + thrownError);
}
});
*/
var platforms = getPlatforms();
$.each(platforms, function(i, platform) {
$("select#session-platform").append(
$("")
.text(platform.Name)
.val(platform.Name)
.attr("selected", function() {
return (pageData && pageData.platform == platform.Name) ? "selected" : false;
})
);
});
updateGamersList();
/*
if (pageData && pageData.start)
$("input#start").val(pageData.start);
if (pageData && pageData.end)
$("input#end").val(pageData.end);
*/
//unBlock();
// Bind events to selectors
$("select#session-platform").change(function() {
pageData.platform = $(this).val();
storeLocalObject(config.currentFilename, pageData);
updateGamersList();
resetSessionList();
resetTimeline();
});
$("select#platform-gamer").change(function() {
pageData.gamer = $(this).val();
storeLocalObject(config.currentFilename, pageData);
$("#go").trigger("click");
});
/*
$("input#start").datepicker({
dateFormat: "dd/mm/yy",
});
$("input#end").datepicker({
dateFormat: "dd/mm/yy",
});
*/
$("#go").click(function() {
// store the dates
/*
pageData.start = $("input#start").val();
pageData.end = $("input#end").val();
storeLocalObject(config.currentFilename, pageData);
*/
// get the session list
updateSessions();
});
// Trigger click() on go button when pressing enter
$("#sub-header input").keypress(function(e) {
if (e.which == 13) {
$("#go").trigger("click");
}
});
$("select#session-game-type-select").change(function() {
pageData.gameType = $(this).val();
storeLocalObject(config.currentFilename, pageData);
updateSessionsList();
});
$("select#session-list-select").change(function() {
retrieveSessionSummary($("select#session-list-select :selected"));
});
$("#timeline").masonry({
itemSelector : ".item",
// isAnimated: true
});
// Post header filter addition
$("#filter").click(function() {
$("#go").trigger("click");
resetTimeline();
});
initTimeline();
}
function initTimeline() {
$("#timeline").height(defaultTimelineHeight);
}
function updateTimelineTime(startDate, endDate) {
$("#timeline-start-time").html(startDate);
$("#timeline-end-time").html(endDate);
}
function resetTimeline() {
$("#timeline div.item").remove();
initTimeline();
updateTimelineTime("", "");
}
function updateGamersList() {
block();
// Gamers List
$.ajax({
url: config.restHost + config.gamersPath + $("select#session-platform :selected").val(),
type: "GET",
data: {},
dataType: "xml",
success: function(xml, textStatus, jqXHR) {
var gamers = convertGamersXml(xml);
$("select#platform-gamer").empty();
$.each(gamers, function(i, gamer) {
$("select#platform-gamer").append(
$("")
.text(gamer.GamerTag)
.val(gamer.GamerTag)
.attr("selected", function() {
return (pageData && pageData.gamer == gamer.GamerTag) ? "selected" : false;
})
);
});
unBlock();
// try to fetch the sessions list (by firing the button click event) if everything is set
$("#go").trigger("click");
},
error: function (xhr, ajaxOptions, thrownError) {
unBlock();
console.error(this.url + "\n" + ajaxOptions + " " + xhr.status + " " + thrownError);
}
});
}
function updateSessions() {
var platform = $("select#session-platform :selected").val();
var gamer = $("select#platform-gamer :selected").val();
// Convert each inserted date to ISO string that the endpoint understands
var start = new Date(config.dateInputFormat.parse($("input#date-from").val())).toISOString();
//console.log(new Date(dateInputFormat.parse($("input#start").val())).toString());
var end = new Date(config.dateInputFormat.parse($("input#date-to").val())).toISOString();
//console.log(new Date(dateInputFormat.parse($("input#end").val())).toString());
if (platform && gamer && start && end) {
block();
$.ajax({
url: config.restHost + config.gamersPath + platform + "/" + gamer + config.sessionsSubPath,
type: "GET",
data: {
start: start,
end: end,
},
dataType: "xml",
success: function(xml, textStatus, jqXHR) {
sessions = convertSessionsXml(xml);
updateSessionsList();
},
error: function (xhr, ajaxOptions, thrownError) {
console.error(this.url + "\n" + ajaxOptions + " " + xhr.status + " " + thrownError);
},
complete: function() {
unBlock();
resetTimeline();
}
});
}
}
function updateSessionsList() {
var gameType = $("select#session-game-type-select :selected").val();
var sessionsList = [];
if (!sessions)
return;
if (gameType == $("select#session-game-type-select option:eq(0)").val()) {
sessionsList = sessions.SingleplayerSessions;
}
else if (gameType == $("select#session-game-type-select option:eq(1)").val()) {
sessionsList = sessions.MultiplayerSession;
}
resetSessionList();
$.each(sessionsList, function(i, session) {
$("select#session-list-select").append(
$('')
.text(++i + ". " + dateSessionFormat(new Date(session.Start))
+ " - " + dateSessionFormat(new Date(session.End)))
.val(session.Id)
.data({"start" : dateSessionFormat(new Date(session.Start)),
"end" : dateSessionFormat(new Date(session.End))
})
);
});
}
function resetSessionList() {
$("select#session-list-select").empty();
}
function retrieveSessionSummary(sessionElement) {
resetTimeline();
updateTimelineTime("
" + sessionElement.data("start"),
"
" + sessionElement.data("end"));
block();
$.ajax({
url: config.restHost + config.sessionsSummaryPath,
type: "GET",
data: {
gameType: $("select#session-game-type-select :selected").val(),
gamerId: sessions.GamerId,
sessionId: sessionElement.val()
},
dataType: "xml",
success: function(xml, textStatus, jqXHR) {
var sessionEvents = convertEventsXml(xml);
drawTimeline(sessionEvents);
},
error: function (xhr, ajaxOptions, thrownError) {
console.error(this.url + "\n" + ajaxOptions + " " + xhr.status + " " + thrownError);
},
complete: unBlock
});
}
function drawTimeline(sessionEvents) {
$.each(sessionEvents, function(i, event) {
var datetime = dateSessionFormat(new Date(event.Timestamp));
var header = "