Stefan Huber

chore: interface updated

...@@ -243,6 +243,8 @@ var PROGRAM_ITEM_TYPE_SLIDESHOW = "slideshow"; ...@@ -243,6 +243,8 @@ var PROGRAM_ITEM_TYPE_SLIDESHOW = "slideshow";
243 var PROGRAM_ITEM_TYPE_VIDEO = "video"; 243 var PROGRAM_ITEM_TYPE_VIDEO = "video";
244 var ProgramItem = (function () { 244 var ProgramItem = (function () {
245 function ProgramItem() { 245 function ProgramItem() {
246 + this._type = "";
247 + this._data = {};
246 } 248 }
247 Object.defineProperty(ProgramItem.prototype, "type", { 249 Object.defineProperty(ProgramItem.prototype, "type", {
248 get: function () { 250 get: function () {
...@@ -318,15 +320,17 @@ var ProgramItemFactory = (function () { ...@@ -318,15 +320,17 @@ var ProgramItemFactory = (function () {
318 var _this = this; 320 var _this = this;
319 return this._programRepository.findByIds(data.images) 321 return this._programRepository.findByIds(data.images)
320 .then(function (images) { 322 .then(function (images) {
321 - programItem.data = { 323 + programItem.data.speed = data.settings.speed;
322 - speed: data.settings.speed, 324 + programItem.data.effect = data.settings.effect;
323 - effect: data.settings.effect, 325 + programItem.data.images = [];
324 - images: [] 326 + if (images && images.length > 0) {
325 - };
326 for (var _i = 0, images_1 = images; _i < images_1.length; _i++) { 327 for (var _i = 0, images_1 = images; _i < images_1.length; _i++) {
327 var image = images_1[_i]; 328 var image = images_1[_i];
329 + if (image && image.filename) {
328 programItem.data.images.push(_this.basePath + image.filename); 330 programItem.data.images.push(_this.basePath + image.filename);
329 } 331 }
332 + }
333 + }
330 return programItem; 334 return programItem;
331 }); 335 });
332 }; 336 };
...@@ -334,9 +338,7 @@ var ProgramItemFactory = (function () { ...@@ -334,9 +338,7 @@ var ProgramItemFactory = (function () {
334 var _this = this; 338 var _this = this;
335 return this._programRepository.findById(data.video) 339 return this._programRepository.findById(data.video)
336 .then(function (data) { 340 .then(function (data) {
337 - programItem.data = { 341 + programItem.data.video = _this.basePath + data['filename'];
338 - video: _this.basePath + data['filename']
339 - };
340 return programItem; 342 return programItem;
341 }); 343 });
342 }; 344 };
......
1 -{"version":3,"file":"bundle.js","sources":["../src/util.ts","../src/player.ts","../src/program-manager.ts","../src/program-item/program-item.ts","../src/program-item/program-item-factory.ts"],"sourcesContent":["export class Util {\n\n static getISODate() : string {\n return (new Date()).toISOString().slice(0,10);\n }\n\n static getDateInMinutes() : number {\n let now = new Date();\n return (now.getHours() * 60) + now.getMinutes();\n }\n\n /**\n * convert a time input to minutes\n * e.g. 23:59 = 1439\n */\n static convertToMinutes(time:string) : number {\n let times = time.split(\":\");\n let convered = (parseInt(times[0]) * 60) + parseInt(times[1]);\n return (convered >= 0 && convered <= 1439) ? convered : 0;\n }\n\n static calculateNextMinute() : number {\n return (60 - (Math.round((new Date()).getTime() / 1000) % 60)) * 1000;\n }\n\n}","import { EventEmitter } from 'events';\nimport {ProgramRepository} from './program-repository';\nimport {ProgramManager} from './program-manager';\nimport {Util} from './util';\n\nconst STATE_START = \"start\";\nconst STATE_STOP = \"stop\";\n\nexport class Player extends EventEmitter {\n\n constructor() {\n super();\n }\n\n protected _programRepository:ProgramRepository;\n protected _programManager:ProgramManager;\n protected _minutesReplication:number = 3;\n protected _replicationRetry:number = 10000;\n\n protected _currentProgramItemId:string = '';\n protected _currentReplicationCounter:number = 0;\n protected _state = STATE_STOP;\n\n set state(st:string) {\n this._state = st;\n }\n\n set programManager(pm:ProgramManager) {\n this._programManager = pm;\n }\n\n get programManager() : ProgramManager {\n return this._programManager;\n }\n\n set programRepository(pr:ProgramRepository) {\n this._programRepository = pr;\n }\n\n get programRepository() : ProgramRepository {\n return this._programRepository;\n }\n\n set minutesReplication(mr:number) {\n this._minutesReplication = mr;\n }\n\n get minutesReplication() : number {\n return this._minutesReplication;\n }\n\n set replicationRetry(rr:number) {\n this._replicationRetry = rr;\n }\n\n get replicationRetry() : number {\n return this._replicationRetry;\n }\n\n triggerReplication() : Promise<void> {\n console.info(\"digsig-player-service: trigger replication\");\n\n return this.programRepository.replicate()\n .then(changes => { \n this._currentReplicationCounter = 0;\n this.trigger(() => { this.triggerProgramItemId(changes); });\n })\n .catch(error => { \n this.trigger(() => { this.triggerReplication(); }, this.replicationRetry);\n this.emit('error', error);\n });\n }\n\n triggerProgramItemId(changes:boolean = false) {\n console.info(\"digsig-player-service: trigger program item id\");\n\n this.programManager.getCurrentProgramItemId()\n .then(programItemId => {\n this._currentReplicationCounter++;\n\n // if there is a new program item id trigger play\n // else (1) calculate next potential program change point\n // or (2) trigger replication\n\n if (programItemId && (programItemId != this._currentProgramItemId || changes)) {\n this._currentProgramItemId = programItemId;\n this.emit('play', programItemId);\n }\n \n if (this._currentReplicationCounter >= this._minutesReplication) {\n this.triggerReplication();\n } else {\n this.trigger(() => { this.triggerProgramItemId(); }, Util.calculateNextMinute());\n }\n });\n }\n\n trigger(func:Function, milliseconds:number = 0) {\n if (this._state === STATE_START) { \n setTimeout(() => { func(); }, milliseconds);\n } \n }\n\n start() {\n if (this._state === STATE_STOP) {\n this.triggerReplication();\n this._state = STATE_START;\n }\n }\n\n stop() {\n this._state = STATE_STOP;\n }\n\n}","import {ProgramRepository} from './program-repository';\nimport {Util} from './util';\nimport {ProgramItem, PROGRAM_ITEM_TYPE_SLIDESHOW, PROGRAM_ITEM_TYPE_VIDEO } from './program-item/program-item'\n\nexport class ProgramManager {\n\n protected _programRepository:ProgramRepository;\n\n set programRepository(pr:ProgramRepository) {\n this._programRepository = pr;\n }\n\n get programRepository() : ProgramRepository {\n return this._programRepository;\n }\n\n getCurrentProgramItemId() : Promise<string> {\n return new Promise<string> ((resolve, reject) => {\n this.findCurrentProgramSegment().then(programSegment => {\n let currentProgramItemId = programSegment.default;\n if (programSegment.schedule) {\n currentProgramItemId = this.findCurrentProgramItem(programSegment.schedule, Util.getDateInMinutes());\n }\n resolve(currentProgramItemId);\n });\n }); \n }\n\n /**\n * find program item in schedule, which fits\n * according to current hh:mm\n */\n findCurrentProgramItem(schedule:any, dateInMinutes:number) : string {\n let timeList:any = [];\n let tmpSchedule:any = {};\n dateInMinutes--; // make it not so strict, which will start one minute earlier\n\n for (let startTime in schedule) {\n if (schedule.hasOwnProperty(startTime)) {\n let minutes = Util.convertToMinutes(startTime);\n timeList.push(minutes);\n tmpSchedule[minutes] = schedule[startTime];\n }\n }\n\n // sort ascending (-)\n timeList.sort((a,b) => { return a-b; });\n\n let last = 0;\n for (let i = 0; i < timeList.length; i++) {\n if (timeList[i] <= dateInMinutes) {\n last = timeList[i];\n } else {\n break;\n }\n }\n\n return tmpSchedule[last];\n }\n\n /**\n * Find the program segment\n * This is dependent on the date set on the device\n */\n findCurrentProgramSegment() : Promise<any> {\n return new Promise<any>((resolve, reject) => {\n let today = Util.getISODate();\n \n this.programRepository.findByType('program')\n .then(programs => {\n \n if (programs.length > 0) {\n let program:any = programs[0];\n let programSegmentId;\n\n // if there is a program_segment for today else default\n if (program.schedule && program.schedule[today]) {\n programSegmentId = program.schedule[today];\n } else {\n programSegmentId = program.default;\n }\n \n this.programRepository\n .findById(programSegmentId)\n .then(programSegment => { \n resolve(programSegment);\n }).catch(error => { \n reject(\"program segment not found\");\n });\n } else {\n reject('No Program found');\n }\n\n }).catch(error => {\n reject(error);\n });\n });\n }\n\n}","export const PROGRAM_ITEM_TYPE_SLIDESHOW = \"slideshow\";\nexport const PROGRAM_ITEM_TYPE_VIDEO = \"video\";\n\nexport class ProgramItem {\n\n protected _type:string;\n protected _data:any;\n\n set type(t:string) {\n this._type = t;\n }\n\n get type():string {\n return this._type;\n }\n\n set data(d:any) {\n this._data = d;\n }\n\n get data():any {\n return this._data;\n }\n\n}","import {ProgramItem, PROGRAM_ITEM_TYPE_SLIDESHOW, PROGRAM_ITEM_TYPE_VIDEO } from './program-item';\nimport { ProgramRepository } from './../program-repository';\n\nexport class ProgramItemFactory {\n\n protected _programRepository:ProgramRepository;\n protected _basePath:string;\n\n set basePath(bp:string) {\n this._basePath = bp;\n }\n \n get basePath() : string {\n return this._basePath;\n }\n\n set programRepository(pr:ProgramRepository) {\n this._programRepository = pr;\n }\n\n get programRepository() : ProgramRepository {\n return this._programRepository;\n }\n\n getProgramItem(programItemId:string) : Promise<ProgramItem> {\n return this.programRepository\n .findById(programItemId)\n .then((programItem) => {\n return this.prepareProgramItem(programItem.program_item_type, programItem);\n });\n }\n\n prepareProgramItem(type:string, data:any) : Promise<ProgramItem> {\n let programItem = new ProgramItem();\n programItem.type = type;\n\n if (data.infoboxes) {\n programItem.data.infoboxes = data.infoboxes;\n }\n\n if (type === PROGRAM_ITEM_TYPE_VIDEO) {\n return this.prepareVideoItem(programItem, data);\n } else if (type === PROGRAM_ITEM_TYPE_SLIDESHOW) {\n return this.prepareSlideshowItem(programItem, data);\n } else {\n return null;\n }\n } \n\n prepareSlideshowItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> {\n return this._programRepository.findByIds(data.images)\n .then(images => { \n programItem.data = {\n speed : data.settings.speed ,\n effect : data.settings.effect ,\n images : []\n }; \n\n for (let image of images) {\n programItem.data.images.push(this.basePath + image.filename);\n }\n\n return programItem;\n });\n }\n\n prepareVideoItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> {\n return this._programRepository.findById(data.video)\n .then((data) => { \n programItem.data = {\n video : this.basePath + data['filename']\n }; \n return programItem;\n });\n }\n\n}"],"names":["EventEmitter"],"mappings":"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"}
...\ No newline at end of file ...\ No newline at end of file
1 +{"version":3,"file":"bundle.js","sources":["../src/util.ts","../src/player.ts","../src/program-manager.ts","../src/program-item/program-item.ts","../src/program-item/program-item-factory.ts"],"sourcesContent":["export class Util {\n\n static getISODate() : string {\n return (new Date()).toISOString().slice(0,10);\n }\n\n static getDateInMinutes() : number {\n let now = new Date();\n return (now.getHours() * 60) + now.getMinutes();\n }\n\n /**\n * convert a time input to minutes\n * e.g. 23:59 = 1439\n */\n static convertToMinutes(time:string) : number {\n let times = time.split(\":\");\n let convered = (parseInt(times[0]) * 60) + parseInt(times[1]);\n return (convered >= 0 && convered <= 1439) ? convered : 0;\n }\n\n static calculateNextMinute() : number {\n return (60 - (Math.round((new Date()).getTime() / 1000) % 60)) * 1000;\n }\n\n}","import { EventEmitter } from 'events';\nimport {ProgramRepository} from './program-repository';\nimport {ProgramManager} from './program-manager';\nimport {Util} from './util';\n\nconst STATE_START = \"start\";\nconst STATE_STOP = \"stop\";\n\nexport class Player extends EventEmitter {\n\n constructor() {\n super();\n }\n\n protected _programRepository:ProgramRepository;\n protected _programManager:ProgramManager;\n protected _minutesReplication:number = 3;\n protected _replicationRetry:number = 10000;\n\n protected _currentProgramItemId:string = '';\n protected _currentReplicationCounter:number = 0;\n protected _state = STATE_STOP;\n\n set state(st:string) {\n this._state = st;\n }\n\n set programManager(pm:ProgramManager) {\n this._programManager = pm;\n }\n\n get programManager() : ProgramManager {\n return this._programManager;\n }\n\n set programRepository(pr:ProgramRepository) {\n this._programRepository = pr;\n }\n\n get programRepository() : ProgramRepository {\n return this._programRepository;\n }\n\n set minutesReplication(mr:number) {\n this._minutesReplication = mr;\n }\n\n get minutesReplication() : number {\n return this._minutesReplication;\n }\n\n set replicationRetry(rr:number) {\n this._replicationRetry = rr;\n }\n\n get replicationRetry() : number {\n return this._replicationRetry;\n }\n\n triggerReplication() : Promise<void> {\n console.info(\"digsig-player-service: trigger replication\");\n\n return this.programRepository.replicate()\n .then(changes => { \n this._currentReplicationCounter = 0;\n this.trigger(() => { this.triggerProgramItemId(changes); });\n })\n .catch(error => { \n this.trigger(() => { this.triggerReplication(); }, this.replicationRetry);\n this.emit('error', error);\n });\n }\n\n triggerProgramItemId(changes:boolean = false) {\n console.info(\"digsig-player-service: trigger program item id\");\n\n this.programManager.getCurrentProgramItemId()\n .then(programItemId => {\n this._currentReplicationCounter++;\n\n // if there is a new program item id trigger play\n // else (1) calculate next potential program change point\n // or (2) trigger replication\n\n if (programItemId && (programItemId != this._currentProgramItemId || changes)) {\n this._currentProgramItemId = programItemId;\n this.emit('play', programItemId);\n }\n \n if (this._currentReplicationCounter >= this._minutesReplication) {\n this.triggerReplication();\n } else {\n this.trigger(() => { this.triggerProgramItemId(); }, Util.calculateNextMinute());\n }\n });\n }\n\n trigger(func:Function, milliseconds:number = 0) {\n if (this._state === STATE_START) { \n setTimeout(() => { func(); }, milliseconds);\n } \n }\n\n start() {\n if (this._state === STATE_STOP) {\n this.triggerReplication();\n this._state = STATE_START;\n }\n }\n\n stop() {\n this._state = STATE_STOP;\n }\n\n}","import {ProgramRepository} from './program-repository';\nimport {Util} from './util';\nimport {ProgramItem, PROGRAM_ITEM_TYPE_SLIDESHOW, PROGRAM_ITEM_TYPE_VIDEO } from './program-item/program-item'\n\nexport class ProgramManager {\n\n protected _programRepository:ProgramRepository;\n\n set programRepository(pr:ProgramRepository) {\n this._programRepository = pr;\n }\n\n get programRepository() : ProgramRepository {\n return this._programRepository;\n }\n\n getCurrentProgramItemId() : Promise<string> {\n return new Promise<string> ((resolve, reject) => {\n this.findCurrentProgramSegment().then(programSegment => {\n let currentProgramItemId = programSegment.default;\n if (programSegment.schedule) {\n currentProgramItemId = this.findCurrentProgramItem(programSegment.schedule, Util.getDateInMinutes());\n }\n resolve(currentProgramItemId);\n });\n }); \n }\n\n /**\n * find program item in schedule, which fits\n * according to current hh:mm\n */\n findCurrentProgramItem(schedule:any, dateInMinutes:number) : string {\n let timeList:any = [];\n let tmpSchedule:any = {};\n dateInMinutes--; // make it not so strict, which will start one minute earlier\n\n for (let startTime in schedule) {\n if (schedule.hasOwnProperty(startTime)) {\n let minutes = Util.convertToMinutes(startTime);\n timeList.push(minutes);\n tmpSchedule[minutes] = schedule[startTime];\n }\n }\n\n // sort ascending (-)\n timeList.sort((a,b) => { return a-b; });\n\n let last = 0;\n for (let i = 0; i < timeList.length; i++) {\n if (timeList[i] <= dateInMinutes) {\n last = timeList[i];\n } else {\n break;\n }\n }\n\n return tmpSchedule[last];\n }\n\n /**\n * Find the program segment\n * This is dependent on the date set on the device\n */\n findCurrentProgramSegment() : Promise<any> {\n return new Promise<any>((resolve, reject) => {\n let today = Util.getISODate();\n \n this.programRepository.findByType('program')\n .then(programs => {\n \n if (programs.length > 0) {\n let program:any = programs[0];\n let programSegmentId;\n\n // if there is a program_segment for today else default\n if (program.schedule && program.schedule[today]) {\n programSegmentId = program.schedule[today];\n } else {\n programSegmentId = program.default;\n }\n \n this.programRepository\n .findById(programSegmentId)\n .then(programSegment => { \n resolve(programSegment);\n }).catch(error => { \n reject(\"program segment not found\");\n });\n } else {\n reject('No Program found');\n }\n\n }).catch(error => {\n reject(error);\n });\n });\n }\n\n}","export const PROGRAM_ITEM_TYPE_SLIDESHOW = \"slideshow\";\nexport const PROGRAM_ITEM_TYPE_VIDEO = \"video\";\n\nexport class ProgramItem {\n\n protected _type:string = \"\";\n protected _data:any = {};\n\n set type(t:string) {\n this._type = t;\n }\n\n get type():string {\n return this._type;\n }\n\n set data(d:any) {\n this._data = d;\n }\n\n get data():any {\n return this._data;\n }\n\n}","import {ProgramItem, PROGRAM_ITEM_TYPE_SLIDESHOW, PROGRAM_ITEM_TYPE_VIDEO } from './program-item';\nimport { ProgramRepository } from './../program-repository';\n\nexport class ProgramItemFactory {\n\n protected _programRepository:ProgramRepository;\n protected _basePath:string;\n\n set basePath(bp:string) {\n this._basePath = bp;\n }\n \n get basePath() : string {\n return this._basePath;\n }\n\n set programRepository(pr:ProgramRepository) {\n this._programRepository = pr;\n }\n\n get programRepository() : ProgramRepository {\n return this._programRepository;\n }\n\n getProgramItem(programItemId:string) : Promise<ProgramItem> {\n return this.programRepository\n .findById(programItemId)\n .then((programItem) => {\n return this.prepareProgramItem(programItem.program_item_type, programItem);\n });\n }\n\n prepareProgramItem(type:string, data:any) : Promise<ProgramItem> {\n let programItem = new ProgramItem();\n programItem.type = type;\n\n if (data.infoboxes) {\n programItem.data.infoboxes = data.infoboxes;\n }\n\n if (type === PROGRAM_ITEM_TYPE_VIDEO) {\n return this.prepareVideoItem(programItem, data);\n } else if (type === PROGRAM_ITEM_TYPE_SLIDESHOW) {\n return this.prepareSlideshowItem(programItem, data);\n } else {\n return null;\n }\n } \n\n prepareSlideshowItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> {\n return this._programRepository.findByIds(data.images)\n .then(images => { \n programItem.data.speed = data.settings.speed;\n programItem.data.effect = data.settings.effect;\n programItem.data.images = [];\n\n if (images && images.length > 0) {\n for (let image of images) {\n if (image && image.filename) {\n programItem.data.images.push(this.basePath + image.filename);\n }\n }\n } \n\n return programItem;\n });\n }\n\n prepareVideoItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> {\n return this._programRepository.findById(data.video)\n .then((data) => { \n programItem.data.video = this.basePath + data['filename']; \n return programItem;\n });\n }\n\n}"],"names":["EventEmitter"],"mappings":"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"}
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -2,7 +2,7 @@ interface ProgramRepository { ...@@ -2,7 +2,7 @@ interface ProgramRepository {
2 findById(id:string) : Promise<any>; 2 findById(id:string) : Promise<any>;
3 findByIds(ids:Array<string>) : Promise<Array<any>>; 3 findByIds(ids:Array<string>) : Promise<Array<any>>;
4 findByType(type:string) : Promise<Array<any>>; 4 findByType(type:string) : Promise<Array<any>>;
5 - replicate() : Promise<void>; 5 + replicate() : Promise<boolean>;
6 } 6 }
7 7
8 interface Player { 8 interface Player {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
7 "scripts": { 7 "scripts": {
8 "pretest": "tsc --target es5 --outDir .tmp spec/index.ts", 8 "pretest": "tsc --target es5 --outDir .tmp spec/index.ts",
9 "test": "jasmine .tmp/spec/index.js", 9 "test": "jasmine .tmp/spec/index.js",
10 - "posttest": "rm -R .tmp", 10 + "posttest": "rm -rf .tmp",
11 "build:tsc": "rollup -c rollup.config.js" 11 "build:tsc": "rollup -c rollup.config.js"
12 }, 12 },
13 "author": "Stefan Huber <stefan.huber@beyondit.at>", 13 "author": "Stefan Huber <stefan.huber@beyondit.at>",
......
...@@ -50,15 +50,17 @@ export class ProgramItemFactory { ...@@ -50,15 +50,17 @@ export class ProgramItemFactory {
50 prepareSlideshowItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> { 50 prepareSlideshowItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> {
51 return this._programRepository.findByIds(data.images) 51 return this._programRepository.findByIds(data.images)
52 .then(images => { 52 .then(images => {
53 - programItem.data = { 53 + programItem.data.speed = data.settings.speed;
54 - speed : data.settings.speed , 54 + programItem.data.effect = data.settings.effect;
55 - effect : data.settings.effect , 55 + programItem.data.images = [];
56 - images : []
57 - };
58 56
57 + if (images && images.length > 0) {
59 for (let image of images) { 58 for (let image of images) {
59 + if (image && image.filename) {
60 programItem.data.images.push(this.basePath + image.filename); 60 programItem.data.images.push(this.basePath + image.filename);
61 } 61 }
62 + }
63 + }
62 64
63 return programItem; 65 return programItem;
64 }); 66 });
...@@ -67,9 +69,7 @@ export class ProgramItemFactory { ...@@ -67,9 +69,7 @@ export class ProgramItemFactory {
67 prepareVideoItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> { 69 prepareVideoItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> {
68 return this._programRepository.findById(data.video) 70 return this._programRepository.findById(data.video)
69 .then((data) => { 71 .then((data) => {
70 - programItem.data = { 72 + programItem.data.video = this.basePath + data['filename'];
71 - video : this.basePath + data['filename']
72 - };
73 return programItem; 73 return programItem;
74 }); 74 });
75 } 75 }
......
...@@ -3,8 +3,8 @@ export const PROGRAM_ITEM_TYPE_VIDEO = "video"; ...@@ -3,8 +3,8 @@ export const PROGRAM_ITEM_TYPE_VIDEO = "video";
3 3
4 export class ProgramItem { 4 export class ProgramItem {
5 5
6 - protected _type:string; 6 + protected _type:string = "";
7 - protected _data:any; 7 + protected _data:any = {};
8 8
9 set type(t:string) { 9 set type(t:string) {
10 this._type = t; 10 this._type = t;
......