2018-09-02 19:22:28 +00:00
"use strict" ;
var Controller = require ( "./controller" ) ;
var Button = require ( "./button" ) ;
var Vocabulary = require ( "./vocabulary" ) ;
var Enum = require ( "../utils/enum" ) ;
var Player = Controller . inherit ( {
className : "Player" ,
constructor : function ( addr ) {
Controller . fn . constructor . call ( this , addr ) ;
this . controls = Object . create ( null ) ;
this . views = Object . create ( null ) ;
this . addHandler ( "get" ) ;
this . addHandler ( "viewsChange" ) ;
} ,
_addControl : function ( type , address ) {
var t = type . valueOf ( ) ;
if ( this . controls [ t ] !== undefined ) {
throw new Error ( "An attempt to add multiple instances of " + ItemType . reversed [ t ] + " into Player" ) ;
}
if ( ItemType . reversed [ t ] !== undefined ) {
switch ( t ) {
case ItemType . straight . playPause :
var btn = new Button ( address . clone ( ) ) ;
btn . itemType = t ;
this . controls [ t ] = btn ;
this . addController ( btn ) ;
2018-10-28 21:32:44 +00:00
this . trigger ( "newElement" , btn , t ) ;
2018-09-02 19:22:28 +00:00
break ;
default :
this . trigger ( "serviceMessage" , "An attempt to add ItemType " + ItemType . reversed [ t ] + " to controls of the Player, but it's not qualified to be a control" ) ;
}
} else {
this . trigger ( "serviceMessage" , "An unrecgnized item ItemType in Player: " + t ) ;
}
} ,
_addView : function ( type , address ) {
var t = type . valueOf ( ) ;
if ( this . views [ t ] !== undefined ) {
throw new Error ( "An attempt to add multiple instances of " + ItemType . reversed [ t ] + " into Player" ) ;
}
if ( ItemType . reversed [ t ] !== undefined ) {
switch ( t ) {
case ItemType . straight . queue :
this . trigger ( "serviceMessage" , "Queue is not supported yet in Player" ) ;
break ;
case ItemType . straight . currentPlayback :
var cpb = new Vocabulary ( address . clone ( ) ) ;
cpb . ItemType = t ;
this . views [ t ] = cpb ;
this . addController ( cpb ) ;
2018-10-28 21:32:44 +00:00
this . trigger ( "newElement" , cpb , t ) ;
break ;
2018-09-02 19:22:28 +00:00
default :
this . trigger ( "serviceMessage" , "An attempt to add ItemType " + ItemType . reversed [ t ] + " to views of the Player, but it's not qualified to be a view" ) ;
}
} else {
this . trigger ( "serviceMessage" , "An unrecgnized item ItemType in Player: " + t ) ;
}
} ,
_h _get : function ( ev ) {
var data = ev . getData ( ) ;
var controls = data . at ( "controls" ) ;
var views = data . at ( "views" ) ;
var size , i , vc ;
size = controls . length ( ) ;
for ( i = 0 ; i < size ; ++ i ) {
vc = controls . at ( i ) ;
this . _addControl ( vc . at ( "type" ) , vc . at ( "address" ) ) ;
}
size = views . length ( ) ;
for ( i = 0 ; i < size ; ++ i ) {
vc = views . at ( i ) ;
2018-10-28 21:32:44 +00:00
this . _addView ( vc . at ( "type" ) , vc . at ( "address" ) ) ;
2018-09-02 19:22:28 +00:00
}
2018-10-28 21:32:44 +00:00
this . initialized = true ;
this . trigger ( "data" ) ;
2018-09-02 19:22:28 +00:00
} ,
_h _viewsChange : function ( ev ) {
var data = ev . getData ( ) ;
var add = data . at ( "add" ) ;
var remove = data . at ( "remove" ) ;
var size , i , vc ;
size = remove . length ( ) ;
for ( i = 0 ; i < size ; ++ i ) {
this . _removeView ( remove . at ( i ) ) ;
}
size = add . length ( ) ;
for ( i = 0 ; i < size ; ++ i ) {
vc = add . at ( i ) ;
2018-10-28 21:32:44 +00:00
this . _addView ( vc . at ( "type" ) , vc . at ( "address" ) ) ;
2018-09-02 19:22:28 +00:00
}
} ,
_removeControl : function ( type ) {
//TODO
} ,
_removeView : function ( type ) {
//TODO
}
} ) ;
var ItemType = new Enum ( "ItemType" ) ;
ItemType . add ( "playPause" ) ;
ItemType . add ( "currentPlayback" ) ;
ItemType . add ( "queue" ) ;
Player . ItemType = ItemType ;
module . exports = Player ;