Asset poster page

This page shows how to use the asset database to download and assign a poster to a DVR asset.


var operationManager = null;
var selectedAsset = 0;
var assetIds = new Array();

function onLoad(){
    // Add the npruntime TOI/JS plugin
    var html = document.createElement("embed");
    html.type = "application/x-motorola-toi";
    html.setAttribute("hidden", "true");
    document.body.appendChild(html);

    operationManager = toi.assetManagerService.getAssetOperationManager();
    operationManager.addEventListener(operationManager.ON_OPERATION_RESULT, OnOperationResult);
    document.addEventListener("keydown", keyPress, false);

    //Refresh asset list
    GetAllAssets();    
}

function updateHighlight()
{
  for (var i=0; i < assetIds.length; i++) {
    document.getElementById(i).style["border"] = "1px solid black";
  }
  document.getElementById(selectedAsset).style["border"] = "2px solid red";
}

function keyPress(event)
{
  if (event.keyIdentifier == "Right") {
    selectedAsset++;
  }
  if (event.keyIdentifier == "Left") {
    selectedAsset--;
  }
  if (event.keyIdentifier == "Enter" || event.keyIdentifier == "Accept") {
    AssignPoster(assetIds[selectedAsset]);
    GetAllAssets();
  }
  updateHighlight();
}

//Asset search finished, refresh asset list.
function OnOperationResult(event)
{
  alert("Operation finished: " + event.operation.userData);
  if (event.operation.userData == "GetAllAssets") {
    var result = toi.assetManagerService.getAssetInfoResult(event.operation.id, 17);
    var assetList = "<h1>Assets:</h1>";
    assetList += "<p>Navigate with left and right, assign poster with OK/Enter.</p>";
    assetList += "<table><tr>";
    for (var i = 0; i < result.objects.length; i++){
      var assetId = result.objects[i].assetId;
      assetIds[i] = assetId;
      var posterAssetId = toi.assetManagerService.getProperties(assetId, [toi.assetManagerService.PROPERTY_INFO_COVER])[0].value;
      var posterUri = "";
      if (posterAssetId) {
        posterUri = toi.assetManagerService.getProperties(posterAssetId, [toi.assetManagerService.PROPERTY_SYSTEM_PLAYBACKURI])[0].value;
      }
      assetList += "<td id='" + i + "' style='border: 1px solid black; margin: 1em;'>"
      assetList += "<b>" + assetId + "</b><br/><img src='" + posterUri + "'/>";
      assetList += "</td>";
    }
    assetList += "</tr></table>";
    document.getElementById("assetlist").innerHTML = assetList;
    updateHighlight();
  }
  // remove operation when done with it
  operationManager.releaseOperation(event.operation.id);
}

//Get all assets linked to the given directory. Filter out only DVR assets.
function GetAllAssets()
{
  var opId = operationManager.createOperation("GetAllAssets");
  isPvr = toi.statics.ToiAssetManagerServiceQueryCondition.create(toi.assetManagerService.PROPERTY_SYSTEM_TYPE,
                                                                  toi.assetManagerService.EQUALS,
                                                                  toi.assetManagerService.ASSET_PVR + "");
  condList = [isPvr];
  propIds = new Array();
  sortConditions = new Array();
  toi.assetManagerService.runQuery(opId, condList, propIds, sortConditions);
}

//Import a new asset object, return an asset ID
function ImportAsset(uri)
{
  var assetId = toi.assetManagerService.createAsset(toi.assetManagerService.ASSET_IMAGE);
  var opId = this.operationManager.createOperation("ImportAsset");
  toi.assetManagerService.importAsset(opId, assetId, uri,
                                      toi.assetManagerService.IMPORT_POLICY_MOVE);
  return assetId;
}

//Fetch a file, synchronously. It will be written to the specified location.
function DownloadFile(uri, storageLocation)
{
  var request = new XMLHttpRequest();
  request.overrideMimeType('text/plain; charset=x-user-defined');
  request.setStorageLocation(storageLocation);
  request.open('GET', uri, false);
  request.send(null);
  if (request.status == 200) {
    return request.responseText;
  }
  else {
    alert("XMLHttpRequest was " + request.status);
  }
}

//Download a poster, create a poster asset, and assign it to the given asset.
function AssignPoster(assetId)
{
  var storageFile = toi.storageService.createFile("poster", toi.consts.ToiStorageFile.FILE_TYPE_TEMPORARY);
  var binaryData = DownloadFile("1.jpg", storageFile.getUri());
  alert("Image has been downloaded to " + storageFile.getUri());
  
  posterAssetId = ImportAsset(storageFile.getUri());
  var properties = [{id: toi.assetManagerService.PROPERTY_INFO_COVER, value: posterAssetId},
                    {id: toi.assetManagerService.PROPERTY_INFO_CHILDREN, value: posterAssetId}];
  toi.assetManagerService.setProperties(assetId, properties);
}