|
|
- // Entry component with image and sound
- enyo.kind({
- name: "VideoViewer.Item",
- kind: enyo.Control,
- published: {
- code: "",
- title: "",
- category: "",
- isFavorite: false,
- image: "",
- tojournal: false
- },
- events: {
- onVideoPlayed: ""
- },
- classes: "item",
- components: [
- { name: "spinner", kind: "Image", src: "images/spinner-dark.gif", classes: "spinner" },
- { name: "background", classes: "itemImage", kind: "Image", src: "images/notloaded.png" },
- { name: "itemImage", classes: "itemImage", kind: "Image", showing: false, onload: "imageLoaded", onerror: "defaultImage", ontap: "showVideo" },
- { name: "itemPlay", classes: "itemPlay", kind: "Image", showing: false, src: "icons/play.svg", ontap: "showVideo" },
- { name: "itemFavorite", classes: "itemFavorite", kind: "Image", src: "icons/notfavorite.svg", showing: false, ontap: "showVideo" },
- { name: "itemOverlay", classes: "itemOverlay" },
- { name: "itemTitle", classes: "itemTitle", content: "" }
- ],
-
- // Constructor
- create: function() {
- this.inherited(arguments);
- this.nameChanged();
- this.titleChanged();
- this.isFavoriteChanged();
- this.tojournalChanged();
- },
-
- // Item setup
- nameChanged: function() {
- var image = this.image ? this.image : "";
- var imgurl = this.replaceValues(Util.getImages());
- if (typeof chrome != 'undefined' && chrome.app && chrome.app.runtime) {
- // HACK: When in Chrome App image should be load using a XmlHttpRequest
- var xhr = new XMLHttpRequest();
- var that = this;
- xhr.open('GET', imgurl, true);
- xhr.responseType = 'blob';
- xhr.onload = function(e) {
- that.$.itemImage.setAttribute("src", window.URL.createObjectURL(this.response));
- };
- xhr.send();
- } else {
- this.$.itemImage.setAttribute("src", imgurl);
- }
- },
-
- titleChanged: function() {
- this.$.itemTitle.setContent(this.title);
- },
-
- isFavoriteChanged: function() {
- this.$.itemFavorite.setShowing(this.isFavorite);
- },
-
- imageLoaded: function() {
- this.$.itemImage.setShowing(true);
- this.$.itemPlay.setShowing(true);
- this.$.spinner.setShowing(false);
- this.$.background.setShowing(false);
- },
-
- tojournalChanged: function() {
- if (this.tojournal) {
- this.$.itemPlay.setSrc("icons/tojournal.svg");
- } else {
- this.$.itemPlay.setSrc("images/play.svg");
- }
- this.$.itemPlay.render();
- },
-
- defaultImage: function() {
- this.$.itemImage.setAttribute("src", "images/notloaded.png");
- this.$.itemImage.setShowing(true);
- this.$.itemPlay.setShowing(true);
- this.$.spinner.setShowing(false);
- this.$.background.setShowing(false);
- },
-
- replaceValues: function(template) {
- // Remplace values in the template
- var output = template;
- output = output.replace(new RegExp("%id%", "g"),this.code);
- output = output.replace(new RegExp("%image%", "g"), this.image);
- output = output.replace(new RegExp("%category%", "g"), this.category);
- output = output.replace(new RegExp("%title%", "g"), this.title);
- return output;
- },
-
- videoURL: function() {
- return this.replaceValues(Util.getVideos())+"."+constant.videoType;
- },
-
- exportToVideo: function() {
- // Load file
- var url =this.videoURL();
- var mimetype = (constant.videoType=="mp4"?"video/mp4":"video/webm");
- var request = new XMLHttpRequest();
- request.open("GET",url,true);
- request.setRequestHeader("Content-type",mimetype);
- request.responseType = "arraybuffer";
- var that = this;
- request.onload = function() {
- if (request.status == 200 || request.status == 0) {
- var blob = new Uint8Array(this.response);
- var base64 = "data:"+mimetype+";base64,"+Util.toBase64(blob);
- var metadata = {
- mimetype: mimetype,
- title: that.title+"."+constant.videoType,
- activity: "org.olpcfrance.MediaViewerActivity",
- timestamp: new Date().getTime(),
- creation_time: new Date().getTime(),
- file_size: 0
- };
- app.datastore.create(metadata, function() {
- console.log("video '"+that.title+"' saved in journal.");
- }, base64);
- }
- };
- request.send();
- },
-
- // Handle event
- showVideo: function() {
- if (this.tojournal) {
- this.exportToVideo();
- }
- this.doVideoPlayed();
-
- }
- });
|