program-item-factory.ts 2.46 KB
import {ProgramItem, PROGRAM_ITEM_TYPE_SLIDESHOW, PROGRAM_ITEM_TYPE_VIDEO } from './program-item';
import { ProgramRepository } from './../program-repository';

export class ProgramItemFactory {

    protected _programRepository:ProgramRepository;
    protected _basePath:string;

    set basePath(bp:string) {
        this._basePath = bp;
    }
    
    get basePath() : string {
        return this._basePath;
    }

    set programRepository(pr:ProgramRepository) {
        this._programRepository = pr;
    }

    get programRepository() : ProgramRepository {
        return this._programRepository;
    }

    getProgramItem(programItemId:string) : Promise<ProgramItem> {
         return this.programRepository
            .findById(programItemId)
            .then((programItem) => {
                return this.prepareProgramItem(programItem.program_item_type, programItem);
            });
    }

    prepareProgramItem(type:string, data:any) : Promise<ProgramItem> {
        let programItem = new ProgramItem();
        programItem.type = type;

        if (data.infoboxes) {
            programItem.data.infoboxes = data.infoboxes;
        }

        if (type === PROGRAM_ITEM_TYPE_VIDEO) {
            return this.prepareVideoItem(programItem, data);
        } else if (type === PROGRAM_ITEM_TYPE_SLIDESHOW) {
            return this.prepareSlideshowItem(programItem, data);
        } else {
            return null;
        }
    } 

    prepareSlideshowItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> {
        return this._programRepository.findByIds(data.images)
            .then(images => {            
                programItem.data.speed = data.settings.speed;
                programItem.data.effect = data.settings.effect;
                programItem.data.images = [];

                if (images && images.length > 0) {
                    for (let image of images) {
                        if (image && image.filename) {
                            programItem.data.images.push(this.basePath + image.filename);
                        }
                    }
                }                

                return programItem;
            });
    }

    prepareVideoItem(programItem:ProgramItem, data:any) : Promise<ProgramItem> {
        return this._programRepository.findById(data.video)
            .then((data) => {                
                programItem.data.video = this.basePath + data['filename']; 
                return programItem;
            });
    }

}