1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5/** 6 * @fileoverview Keeps track of all the existing PlayerInfo and 7 * audio stream objects and is the entry-point for messages from the backend. 8 * 9 * The events captured by Manager (add, remove, update) are relayed 10 * to the clientRenderer which it can choose to use to modify the UI. 11 */ 12var Manager = (function() { 13 'use strict'; 14 15 function Manager(clientRenderer) { 16 this.players_ = {}; 17 this.audioComponents_ = []; 18 this.clientRenderer_ = clientRenderer; 19 } 20 21 Manager.prototype = { 22 /** 23 * Updates an audio-component. 24 * @param componentType Integer AudioComponent enum value; must match values 25 * from the AudioLogFactory::AudioComponent enum. 26 * @param componentId The unique-id of the audio-component. 27 * @param componentData The actual component data dictionary. 28 */ 29 updateAudioComponent: function(componentType, componentId, componentData) { 30 if (!(componentType in this.audioComponents_)) 31 this.audioComponents_[componentType] = {}; 32 if (!(componentId in this.audioComponents_[componentType])) { 33 this.audioComponents_[componentType][componentId] = componentData; 34 } else { 35 for (var key in componentData) { 36 this.audioComponents_[componentType][componentId][key] = 37 componentData[key]; 38 } 39 } 40 this.clientRenderer_.audioComponentAdded( 41 componentType, this.audioComponents_[componentType]); 42 }, 43 44 /** 45 * Removes an audio-stream from the manager. 46 * @param id The unique-id of the audio-stream. 47 */ 48 removeAudioComponent: function(componentType, componentId) { 49 if (!(componentType in this.audioComponents_) || 50 !(componentId in this.audioComponents_[componentType])) { 51 return; 52 } 53 54 delete this.audioComponents_[componentType][componentId]; 55 this.clientRenderer_.audioComponentRemoved( 56 componentType, this.audioComponents_[componentType]); 57 }, 58 59 /** 60 * Adds a player to the list of players to manage. 61 */ 62 addPlayer: function(id) { 63 if (this.players_[id]) { 64 return; 65 } 66 // Make the PlayerProperty and add it to the mapping 67 this.players_[id] = new PlayerInfo(id); 68 this.clientRenderer_.playerAdded(this.players_, this.players_[id]); 69 }, 70 71 /** 72 * Attempts to remove a player from the UI. 73 * @param id The ID of the player to remove. 74 */ 75 removePlayer: function(id) { 76 delete this.players_[id]; 77 this.clientRenderer_.playerRemoved(this.players_, this.players_[id]); 78 }, 79 80 updatePlayerInfoNoRecord: function(id, timestamp, key, value) { 81 if (!this.players_[id]) { 82 console.error('[updatePlayerInfo] Id ' + id + ' does not exist'); 83 return; 84 } 85 86 this.players_[id].addPropertyNoRecord(timestamp, key, value); 87 this.clientRenderer_.playerUpdated(this.players_, 88 this.players_[id], 89 key, 90 value); 91 }, 92 93 /** 94 * 95 * @param id The unique ID that identifies the player to be updated. 96 * @param timestamp The timestamp of when the change occured. This 97 * timestamp is *not* normalized. 98 * @param key The name of the property to be added/changed. 99 * @param value The value of the property. 100 */ 101 updatePlayerInfo: function(id, timestamp, key, value) { 102 if (!this.players_[id]) { 103 console.error('[updatePlayerInfo] Id ' + id + ' does not exist'); 104 return; 105 } 106 107 this.players_[id].addProperty(timestamp, key, value); 108 this.clientRenderer_.playerUpdated(this.players_, 109 this.players_[id], 110 key, 111 value); 112 } 113 }; 114 115 return Manager; 116}()); 117