• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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