| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| /* |
| * Home action displays the Home page. Home could be status or publish view |
| * depending on the state of the P2B service. |
| * @fileoverview |
| */ |
| |
| import { Logger } from 'libs/logs/logger' |
| import { register, trigger } from 'libs/mvc/actions' |
| |
| import { publish, stopPublishing, state as publishState } from 'services/pipe-to-browser-server' |
| |
| import { displayError } from 'actions/display-error' |
| import { addPipeViewer } from 'actions/add-pipe-viewer' |
| |
| import { PublishView } from 'views/publish/view' |
| import { StatusView } from 'views/status/view' |
| |
| import { page } from 'runtime/context' |
| |
| var log = new Logger('actions/navigate-home-page'); |
| var ACTION_NAME = 'home'; |
| |
| /* |
| * Registers the home action |
| */ |
| export function registerNavigateHomePageAction() { |
| register(ACTION_NAME, actionHandler); |
| } |
| |
| /* |
| * Triggers the home action |
| */ |
| export function navigateHomePage() { |
| return trigger(ACTION_NAME); |
| } |
| |
| /* |
| * Handles the home action. |
| * |
| * @private |
| */ |
| function actionHandler() { |
| log.debug('home action triggered'); |
| |
| var mainView; |
| |
| // Show status view if already published, otherwise show publish view |
| if (publishState.published) { |
| showStatusView(); |
| } else { |
| showPublishView(); |
| } |
| } |
| |
| /* |
| * Displays the Status view |
| * |
| * @private |
| */ |
| function showStatusView() { |
| // Create a status view and bind (dynamic) publish state with the view |
| var statusView = new StatusView(publishState); |
| |
| // Stop when user tells us to stop the service |
| statusView.onStopAction(() => { |
| stopPublishing().then(function() { |
| navigateHomePage(); |
| }).catch((e) => { displayError(e); }); |
| }); |
| |
| // Display the status view in main content area and select the sidebar item |
| page.title = 'Status'; |
| page.setSubPageView('home', statusView); |
| } |
| |
| /* |
| * Displays the Publish view |
| * |
| * @private |
| */ |
| function showPublishView() { |
| // Create a publish view |
| var publishView = new PublishView(); |
| |
| // Publish p2b when user tells us to do so and then show status page. |
| publishView.onPublishAction((publishName) => { |
| publish(publishName, pipeRequestHandler).then(function() { |
| showStatusView(); |
| }).catch((e) => { displayError(e); }); |
| }); |
| |
| // Display the publish view in main content area and select the sidebar item |
| page.title = 'Publish'; |
| page.setSubPageView('home', publishView); |
| } |
| |
| /* |
| * pipeRequestHandler is called by the p2b service whenever a new request comes in. |
| * We simply delegate to the addPipeViewer action. |
| * @param {string} name Name of the Pipe Viewer that is requested to play the stream. |
| * @param {Vanadium.Stream} stream Stream of bytes from the p2b client. |
| * |
| * @private |
| */ |
| function pipeRequestHandler(name, stream) { |
| return addPipeViewer(name, stream); |
| } |