Changeset 1669808
- Timestamp:
- 06/02/2017 06:56:08 PM (9 years ago)
- Location:
- futusign/trunk
- Files:
-
- 60 added
- 15 deleted
- 31 edited
-
admin/class-futusign-admin.php (modified) (1 diff)
-
admin/screen (added)
-
admin/screen/.eslintrc.json (added)
-
admin/screen/.flowconfig (added)
-
admin/screen/data (added)
-
admin/screen/data/fs-endpoint (added)
-
admin/screen/dist (added)
-
admin/screen/dist/data (added)
-
admin/screen/dist/data/fs-endpoint (added)
-
admin/screen/dist/index.html (added)
-
admin/screen/dist/main.bundle.js (added)
-
admin/screen/dist/main.bundle.js.map (added)
-
admin/screen/index.html (added)
-
admin/screen/package.json (added)
-
admin/screen/postcss.config.js (added)
-
admin/screen/public (added)
-
admin/screen/public/index.html (added)
-
admin/screen/src (added)
-
admin/screen/src/apis (added)
-
admin/screen/src/apis/endpoint.js (added)
-
admin/screen/src/components (added)
-
admin/screen/src/components/App (added)
-
admin/screen/src/components/App/img (added)
-
admin/screen/src/components/App/img/image.png (added)
-
admin/screen/src/components/App/img/media_deck.png (added)
-
admin/screen/src/components/App/img/slide_deck.png (added)
-
admin/screen/src/components/App/img/web.png (added)
-
admin/screen/src/components/App/img/youtube_video.png (added)
-
admin/screen/src/components/App/index.jsx (added)
-
admin/screen/src/configureStore (added)
-
admin/screen/src/configureStore/index.js (added)
-
admin/screen/src/configureStore/reducers.js (added)
-
admin/screen/src/ducks (added)
-
admin/screen/src/ducks/appBlocking.js (added)
-
admin/screen/src/ducks/images.js (added)
-
admin/screen/src/ducks/imagesOverride.js (added)
-
admin/screen/src/ducks/layers.js (added)
-
admin/screen/src/ducks/mediaDecks.js (added)
-
admin/screen/src/ducks/mediaDecksOverride.js (added)
-
admin/screen/src/ducks/screen.js (added)
-
admin/screen/src/ducks/slideDecks.js (added)
-
admin/screen/src/ducks/slideDecksOverride.js (added)
-
admin/screen/src/ducks/webs.js (added)
-
admin/screen/src/ducks/websOverride.js (added)
-
admin/screen/src/ducks/youtubeVideos.js (added)
-
admin/screen/src/ducks/youtubeVideosOverride.js (added)
-
admin/screen/src/index.jsx (added)
-
admin/screen/src/strings.js (added)
-
admin/screen/src/util (added)
-
admin/screen/src/util/exceptions.js (added)
-
admin/screen/src/util/rest.js (added)
-
admin/screen/webpack.config.js (added)
-
admin/screen/yarn.lock (added)
-
common/class-futusign-common.php (modified) (1 diff)
-
common/class-futusign-screen.php (modified) (1 diff)
-
common/img/index.php (deleted)
-
futusign.php (modified) (1 diff)
-
inactive/class-futusign-inactive.php (modified) (2 diffs)
-
inactive/partials/futusign-missing-acf-to-rest-api.php (deleted)
-
inactive/partials/futusign-missing-acf.php (added)
-
includes/class-futusign-activator.php (modified) (1 diff)
-
includes/class-futusign.php (modified) (8 diffs)
-
public/class-futusign-public.php (modified) (1 diff)
-
public/partials (added)
-
public/partials/futusign-endpoint.php (added)
-
public/partials/index.php (added)
-
public/screen/data/fs-endpoint (added)
-
public/screen/data/fs-monitor.bak (deleted)
-
public/screen/data/wp (deleted)
-
public/screen/package.json (modified) (1 diff)
-
public/screen/src/apis/base.js (deleted)
-
public/screen/src/apis/endpoint.js (added)
-
public/screen/src/apis/images.js (deleted)
-
public/screen/src/apis/layers.js (deleted)
-
public/screen/src/apis/mediaDecks.js (deleted)
-
public/screen/src/apis/monitor.js (deleted)
-
public/screen/src/apis/ovWidgets.js (deleted)
-
public/screen/src/apis/overlay.js (deleted)
-
public/screen/src/apis/screen.js (deleted)
-
public/screen/src/apis/slideDecks.js (deleted)
-
public/screen/src/apis/webs.js (deleted)
-
public/screen/src/apis/youtubeVideos.js (deleted)
-
public/screen/src/components/App/Blocking/index.jsx (modified) (2 diffs)
-
public/screen/src/components/App/Player/PlayerYoutubeVideos/index.jsx (modified) (4 diffs)
-
public/screen/src/components/App/Player/index.jsx (modified) (5 diffs)
-
public/screen/src/components/App/index.jsx (modified) (17 diffs)
-
public/screen/src/configureStore/reducers.js (modified) (5 diffs)
-
public/screen/src/ducks/badPlaying.js (modified) (2 diffs)
-
public/screen/src/ducks/images.js (modified) (5 diffs)
-
public/screen/src/ducks/imagesOverride.js (modified) (4 diffs)
-
public/screen/src/ducks/layers.js (modified) (5 diffs)
-
public/screen/src/ducks/mediaDecks.js (modified) (5 diffs)
-
public/screen/src/ducks/mediaDecksOverride.js (modified) (5 diffs)
-
public/screen/src/ducks/monitor.js (modified) (2 diffs)
-
public/screen/src/ducks/ovWidgets.js (modified) (5 diffs)
-
public/screen/src/ducks/overlay.js (modified) (2 diffs)
-
public/screen/src/ducks/screen.js (modified) (3 diffs)
-
public/screen/src/ducks/slideDecks.js (modified) (5 diffs)
-
public/screen/src/ducks/slideDecksOverride.js (modified) (5 diffs)
-
public/screen/src/ducks/webs.js (modified) (5 diffs)
-
public/screen/src/ducks/websOverride.js (added)
-
public/screen/src/ducks/youtubeVideos.js (modified) (5 diffs)
-
public/screen/src/ducks/youtubeVideosOverride.js (added)
-
public/screen/src/index.html (modified) (1 diff)
-
public/screen/src/strings.js (modified) (1 diff)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
futusign/trunk/admin/class-futusign-admin.php
r1637139 r1669808 27 27 public function __construct() { 28 28 } 29 /** 30 * Render Currently Playing Metabox for Screen 31 * 32 * @since 2.2.0 33 */ 34 public function render_screen_playing( $post ) { 35 ?> 36 <div id="root"></div> 37 38 <script> 39 window.siteUrl = "<?php echo trailingslashit( site_url() );?>"; 40 window.screenId = <?php echo $post->ID; ?>; 41 window.priority = <?php echo class_exists( 'Futusign_Priority' ) ? 'true' : 'false'; ?>; 42 </script> 43 <?php 44 } 45 /** 46 * Add Currently Playing Metabox for Screen 47 * 48 * @since 2.2.0 49 */ 50 public function add_meta_boxes_futusign_screen() { 51 $screen = get_current_screen(); 52 if ( 'add' !== $screen->action ) { 53 add_meta_box( 54 'futusign_screen_playing', 55 __( 'Currently Playing', 'futusign'), 56 array($this, 'render_screen_playing'), 57 'futusign_screen', 58 'normal', 59 'default' 60 ); 61 } 62 } 63 /** 64 * Enqueue Admin Scripts for Screen 65 * 66 * @since 2.2.0 67 * @param string $hook_suffix The page. 68 */ 69 public function admin_enqueue_scripts ( $hook_suffix ) { 70 $cpt = 'futusign_screen'; 71 if( in_array( $hook_suffix, array( 'post.php' ) ) ){ 72 $screen = get_current_screen(); 73 if( is_object( $screen ) && $cpt == $screen->post_type ){ 74 wp_register_script('futusign_admin_screen', 75 plugin_dir_url( __FILE__ ) . 'screen/dist/main.bundle.js', 76 array(), 77 '2017053101', true 78 ); 79 wp_enqueue_script('futusign_admin_screen'); 80 } 81 } 82 } 29 83 } -
futusign/trunk/common/class-futusign-common.php
r1653754 r1669808 113 113 return $this->image; 114 114 } 115 // DUPLICATED IN INACTIVE 116 /** 117 * Add rewrite rules 118 * 119 * @since 2.1.2 120 */ 121 public function add_rewrite_rules() { 122 add_rewrite_rule( '^fs-endpoint/?', 'index.php?futusign_endpoint=1', 'top' ); 123 } 115 124 } -
futusign/trunk/common/class-futusign-screen.php
r1651645 r1669808 235 235 ) 236 236 ), 237 array ( 238 'key' => 'field_acf_fs_sc_polling', 239 'label' => __('Polling Cycle', 'futusign'), 240 'name' => 'polling', 241 'type' => 'number', 242 'instructions' => esc_html__('The number of minutes between polling for updates', 'futusign'), 243 'required' => 1, 244 'default_value' => 60, 245 'placeholder' => '', 246 'prepend' => '', 247 'append' => '', 248 'min' => 1, 249 'max' => '', 250 'step' => 1, 251 ), 237 252 ), 238 253 'location' => array ( -
futusign/trunk/futusign.php
r1665899 r1669808 11 11 * Plugin URI: https://github.com/larkintuckerllc/futusign 12 12 * Description: Manage and display digital signage content 13 * Version: 2. 1.113 * Version: 2.2.0 14 14 * Author: John Tucker 15 15 * Author URI: https://github.com/larkintuckerllc -
futusign/trunk/inactive/class-futusign-inactive.php
r1637139 r1669808 27 27 public function __construct() { 28 28 } 29 // DUPLICATED IN COMMON 30 /** 31 * Add rewrite rules 32 * 33 * @since 2.1.2 34 */ 35 public function add_rewrite_rules() { 36 add_rewrite_rule( '^fs-endpoint/?', 'index.php?futusign_endpoint=1', 'top' ); 37 } 29 38 /** 30 39 * Display missing plugin dependency notices. … … 33 42 */ 34 43 public function missing_plugins_notice() { 35 if ( ! Futusign::is_plugin_active( 'acf -to-rest-api' ) ) {36 include plugin_dir_path( __FILE__ ) . 'partials/futusign-missing-acf -to-rest-api.php';44 if ( ! Futusign::is_plugin_active( 'acf' ) ) { 45 include plugin_dir_path( __FILE__ ) . 'partials/futusign-missing-acf.php'; 37 46 } 38 47 } -
futusign/trunk/includes/class-futusign-activator.php
r1637139 r1669808 28 28 */ 29 29 public static function activate() { 30 // ENDPOINT 31 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'inactive/class-futusign-inactive.php'; 32 $plugin_inactive = new Futusign_Inactive(); 33 $plugin_inactive->add_rewrite_rules(); 34 // SCREEN, ETC 30 35 require_once plugin_dir_path( dirname( __FILE__ ) ) . 'common/class-futusign-common.php'; 31 36 $plugin_common = new Futusign_Common(); -
futusign/trunk/includes/class-futusign.php
r1665899 r1669808 28 28 */ 29 29 public static function is_plugin_active( $plugin ) { 30 if ( 'acf -to-rest-api' == $plugin ) {31 return class_exists( ' ACF_TO_REST_API' );30 if ( 'acf' == $plugin ) { 31 return class_exists( 'acf' ); 32 32 } elseif ( 'all' == $plugin ) { 33 return class_exists( ' WP_REST_Controller' ) && class_exists( 'acf' ) && class_exists ( 'ACF_TO_REST_API' );33 return class_exists( 'acf' ); 34 34 } 35 35 return false; … … 46 46 } 47 47 $paths = false; 48 if ( 'acf -to-rest-api' == $plugin ) {49 $paths = array( 'a cf-to-rest-api/class-acf-to-rest-api.php' );48 if ( 'acf' == $plugin ) { 49 $paths = array( 'advanced-custom-fields-pro/acf.php', 'acf-pro/acf.php', 'advanced-custom-fields/acf.php' ); 50 50 } 51 51 if ( $paths ) { … … 93 93 public function __construct() { 94 94 $this->plugin_name = 'futusign'; 95 $this->version = '2. 1.1';95 $this->version = '2.2.0'; 96 96 $this->load_dependencies(); 97 97 $this->set_locale(); … … 146 146 private function define_inactive_hooks() { 147 147 $plugin_inactive = new Futusign_Inactive(); 148 $this->loader->add_action('init', $plugin_inactive, 'add_rewrite_rules'); 148 149 $this->loader->add_action('admin_notices', $plugin_inactive, 'missing_plugins_notice' ); 149 150 } … … 156 157 private function define_common_hooks() { 157 158 $plugin_common = new Futusign_Common(); 159 // ENDPOINT 160 $this->loader->add_action('init', $plugin_common, 'add_rewrite_rules'); 158 161 // PLAYLIST 159 162 $this->loader->add_action('init', $plugin_common->get_playlist(), 'register', 20); … … 161 164 $screen = $plugin_common->get_screen(); 162 165 $this->loader->add_action('init', $screen, 'register'); 163 $this->loader->add_ filter('init', $screen, 'register_field_group');164 $this->loader->add_ filter('manage_futusign_screen_posts_custom_column', $screen, 'manage_posts_custom_column', 10, 2 );166 $this->loader->add_action('init', $screen, 'register_field_group'); 167 $this->loader->add_action('manage_futusign_screen_posts_custom_column', $screen, 'manage_posts_custom_column', 10, 2 ); 165 168 $this->loader->add_filter('manage_futusign_screen_posts_columns', $screen, 'manage_posts_columns'); 166 $this->loader->add_ filter('restrict_manage_posts', $screen, 'restrict_manage_posts');167 $this->loader->add_ filter('parse_query', $screen, 'parse_query');169 $this->loader->add_action('restrict_manage_posts', $screen, 'restrict_manage_posts'); 170 $this->loader->add_action('parse_query', $screen, 'parse_query'); 168 171 // SCREEN - OVERRIDE 169 $this->loader->add_ filter('restrict_manage_posts', $screen, 'restrict_manage_posts_override');170 $this->loader->add_ filter('parse_query', $screen, 'parse_query_override');172 $this->loader->add_action('restrict_manage_posts', $screen, 'restrict_manage_posts_override'); 173 $this->loader->add_action('parse_query', $screen, 'parse_query_override'); 171 174 // IMAGE 172 175 $image = $plugin_common->get_image(); 173 176 $this->loader->add_action('init', $image, 'register'); 174 $this->loader->add_ filter('init', $image, 'register_field_group');175 $this->loader->add_ filter('manage_futusign_image_posts_custom_column', $image, 'manage_posts_custom_column', 10, 2 );177 $this->loader->add_action('init', $image, 'register_field_group'); 178 $this->loader->add_action('manage_futusign_image_posts_custom_column', $image, 'manage_posts_custom_column', 10, 2 ); 176 179 $this->loader->add_filter('manage_futusign_image_posts_columns', $image, 'manage_posts_columns'); 177 $this->loader->add_ filter('restrict_manage_posts', $image, 'restrict_manage_posts');178 $this->loader->add_ filter('parse_query', $image, 'parse_query');180 $this->loader->add_action('restrict_manage_posts', $image, 'restrict_manage_posts'); 181 $this->loader->add_action('parse_query', $image, 'parse_query'); 179 182 // IMAGE - OVERRIDE 180 $this->loader->add_ filter('restrict_manage_posts', $image, 'restrict_manage_posts_override');181 $this->loader->add_ filter('parse_query', $image, 'parse_query_override');183 $this->loader->add_action('restrict_manage_posts', $image, 'restrict_manage_posts_override'); 184 $this->loader->add_action('parse_query', $image, 'parse_query_override'); 182 185 // SLIDE DECK 183 186 $slide_deck = $plugin_common->get_slide_deck(); 184 187 $this->loader->add_action('init', $slide_deck, 'register'); 185 $this->loader->add_ filter('init', $slide_deck, 'register_field_group');186 $this->loader->add_ filter('manage_futusign_slide_deck_posts_custom_column', $slide_deck, 'manage_posts_custom_column', 10, 2 );188 $this->loader->add_action('init', $slide_deck, 'register_field_group'); 189 $this->loader->add_action('manage_futusign_slide_deck_posts_custom_column', $slide_deck, 'manage_posts_custom_column', 10, 2 ); 187 190 $this->loader->add_filter('manage_futusign_slide_deck_posts_columns', $slide_deck, 'manage_posts_columns'); 188 $this->loader->add_ filter('restrict_manage_posts', $slide_deck, 'restrict_manage_posts');189 $this->loader->add_ filter('parse_query', $slide_deck, 'parse_query');191 $this->loader->add_action('restrict_manage_posts', $slide_deck, 'restrict_manage_posts'); 192 $this->loader->add_action('parse_query', $slide_deck, 'parse_query'); 190 193 // SLIDE DECK - OVERRIDE 191 $this->loader->add_ filter('restrict_manage_posts', $slide_deck, 'restrict_manage_posts_override');192 $this->loader->add_ filter('parse_query', $slide_deck, 'parse_query_override');194 $this->loader->add_action('restrict_manage_posts', $slide_deck, 'restrict_manage_posts_override'); 195 $this->loader->add_action('parse_query', $slide_deck, 'parse_query_override'); 193 196 } 194 197 /** … … 201 204 private function define_admin_hooks() { 202 205 $plugin_admin = new Futusign_Admin(); 206 $this->loader->add_action( 'add_meta_boxes_futusign_screen', $plugin_admin, 'add_meta_boxes_futusign_screen' ); 207 $this->loader->add_action('admin_enqueue_scripts', $plugin_admin, 'admin_enqueue_scripts'); 203 208 } 204 209 /** … … 212 217 $plugin_public = new Futusign_Public(); 213 218 $this->loader->add_action('single_template', $plugin_public, 'single_template'); 219 $this->loader->add_action('query_vars', $plugin_public, 'query_vars'); 220 $this->loader->add_action('parse_request', $plugin_public, 'parse_request'); 214 221 } 215 222 /** -
futusign/trunk/public/class-futusign-public.php
r1637139 r1669808 41 41 return $single; 42 42 } 43 /** 44 * Add to query variables 45 * 46 * @since 2.1.2 47 * @param array $query_vars query variables 48 * @return array query variables 49 */ 50 public function query_vars( $query_vars ) { 51 $query_vars[] = 'futusign_endpoint'; 52 $query_vars[] = 'futusign_screen_id'; 53 return $query_vars; 54 } 55 /** 56 * Define futusign-monitor endpoint 57 * 58 * @since 2.1.2 59 * @param array $query query 60 */ 61 public function parse_request( $query ) { 62 $query_vars = $query->query_vars; 63 if ( array_key_exists( 'futusign_endpoint', $query_vars ) ) { 64 if ( array_key_exists( 'futusign_screen_id', $query_vars ) ) { 65 include 'partials/futusign-endpoint.php'; 66 futusign_endpoint($query_vars['futusign_screen_id']); 67 } else { 68 status_header(400); 69 } 70 exit(); 71 } 72 return; 73 } 43 74 } -
futusign/trunk/public/screen/package.json
r1665899 r1669808 1 1 { 2 2 "name": "futusign-screen", 3 "version": "2. 1.1",3 "version": "2.2.0", 4 4 "description": "futusign screen", 5 5 "scripts": { -
futusign/trunk/public/screen/src/components/App/Blocking/index.jsx
r1602262 r1669808 3 3 import spinner from './spinner.png'; 4 4 5 // TODO: PUT BAK SPINNER 5 6 export default () => ( 6 7 <div … … 8 9 > 9 10 <img 10 id={styles.rootSpinner }11 id={styles.rootSpinnerZ} 11 12 src={spinner} 12 13 alt="spinner" -
futusign/trunk/public/screen/src/components/App/Player/PlayerYoutubeVideos/index.jsx
r1651254 r1669808 28 28 setBadPlaying, 29 29 setCover, 30 setOfflinePlaying,31 30 setNextIsReady, 32 31 youtubeVideos, … … 44 43 this.readyTimeout = window.setTimeout(() => { 45 44 if (window.futusignYoutubePlayer === undefined) { 46 set OfflinePlaying(true);45 setBadPlaying(true); 47 46 return; 48 47 } … … 147 146 } 148 147 handleYoutubeError() { 149 const { set OfflinePlaying } = this.props;150 set OfflinePlaying(true);148 const { setBadPlaying } = this.props; 149 setBadPlaying(true); 151 150 } 152 151 validVideos() { … … 178 177 setCurrentlyIsPlaying: PropTypes.func.isRequired, 179 178 setNextIsReady: PropTypes.func.isRequired, 180 setOfflinePlaying: PropTypes.func.isRequired,181 179 youtubeVideos: PropTypes.array.isRequired, 182 180 }; -
futusign/trunk/public/screen/src/components/App/Player/index.jsx
r1662779 r1669808 12 12 import * as fromCover from '../../../ducks/cover'; 13 13 import * as fromCounter from '../../../ducks/counter'; 14 import * as fromOfflinePlaying from '../../../ducks/offlinePlaying';15 14 import * as fromPriority from '../../../ducks/priority'; 16 15 import { getMinImagePriority } from '../../../ducks/minImagePriority'; … … 240 239 setCurrentlyIsPlaying, 241 240 setNextIsReady, 242 setOfflinePlaying,243 241 } = this.props; 244 242 return ( … … 291 289 setCurrentlyIsPlaying={setCurrentlyIsPlaying} 292 290 setNextIsReady={setNextIsReady} 293 setOfflinePlaying={setOfflinePlaying}294 291 youtubeVideos={this.filteredYoutubeVideos} 295 292 /> … … 324 321 setNextIsReady: PropTypes.func.isRequired, 325 322 setNextPlaying: PropTypes.func.isRequired, 326 setOfflinePlaying: PropTypes.func.isRequired,327 323 setPriority: PropTypes.func.isRequired, 328 324 slideDecks: PropTypes.array.isRequired, … … 347 343 setNextIsReady: fromNextIsReady.setNextIsReady, 348 344 setNextPlaying: fromNextPlaying.setNextPlaying, 349 setOfflinePlaying: fromOfflinePlaying.setOfflinePlaying,350 345 setPriority: fromPriority.setPriority, 351 346 } -
futusign/trunk/public/screen/src/components/App/index.jsx
r1662779 r1669808 4 4 import 'firebase/auth'; 5 5 import 'firebase/database'; 6 import { CACHE_INTERVAL, POLLING_INTERVAL, TRANSITION } from '../../strings'; 7 import { fetchBase } from '../../apis/base'; 6 import { CACHE_INTERVAL, ERROR_POLLING_INTERVAL, TRANSITION } from '../../strings'; 8 7 import { minLargerPriority } from '../../util/misc'; 9 8 import * as fromAppBlocking from '../../ducks/appBlocking'; … … 13 12 import * as fromSlideDecksOverride from '../../ducks/slideDecksOverride'; 14 13 import * as fromYoutubeVideos from '../../ducks/youtubeVideos'; 14 import * as fromYoutubeVideosOverride from '../../ducks/youtubeVideosOverride'; 15 15 import * as fromCover from '../../ducks/cover'; 16 16 import * as fromCounter from '../../ducks/counter'; … … 19 19 import * as fromLayers from '../../ducks/layers'; 20 20 import * as fromWebs from '../../ducks/webs'; 21 import * as fromWebsOverride from '../../ducks/websOverride'; 21 22 import * as fromOfflinePlaying from '../../ducks/offlinePlaying'; 22 23 import * as fromBadPlaying from '../../ducks/badPlaying'; … … 50 51 this.fetch = this.fetch.bind(this); 51 52 this.restartPlayingLoop = this.restartPlayingLoop.bind(this); 52 this.fetchSubscribed = this.fetchSubscribed.bind(this);53 53 } 54 54 componentDidMount() { … … 73 73 }; 74 74 this.fetch(); 75 window.setInterval(this.fetch, POLLING_INTERVAL * 1000);76 75 window.setInterval(check, CACHE_INTERVAL * 1000); 77 76 appCache.addEventListener('updateready', handleUpdateReady); 78 77 window.addEventListener('message', handleMessage); 79 78 } 80 fetchSubscribed(screen) {81 const {82 fetchImages,83 fetchMediaDecks,84 fetchSlideDecks,85 fetchWebs,86 fetchYoutubeVideos,87 fetchLayers,88 resetImages,89 resetMediaDecks,90 resetSlideDecks,91 resetWebs,92 resetYoutubeVideos,93 } = this.props;94 if (screen.subscribedPlaylistIds.length === 0) {95 resetImages();96 resetMediaDecks();97 resetWebs();98 resetYoutubeVideos();99 resetSlideDecks();100 return Promise.resolve([{101 response: {102 result: [],103 entities: {104 images: {},105 },106 },107 }, {108 response: {109 result: [],110 entities: {111 mediaDecks: {},112 },113 },114 }, {115 response: {116 result: [],117 entities: {118 webs: {},119 },120 },121 }, {122 response: {123 result: [],124 entities: {125 youtubeVideos: {},126 },127 },128 }, {129 response: {130 result: [],131 entities: {132 layers: {},133 },134 },135 }, {136 response: {137 result: [],138 entities: {139 slideDecks: {},140 },141 },142 }]);143 }144 return Promise.all([145 fetchImages(screen.subscribedPlaylistIds),146 fetchMediaDecks(screen.subscribedPlaylistIds),147 fetchWebs(screen.subscribedPlaylistIds),148 fetchYoutubeVideos(screen.subscribedPlaylistIds),149 fetchLayers(screen.subscribedPlaylistIds),150 fetchSlideDecks(screen.subscribedPlaylistIds),151 ]);152 }153 fetchSubscribedOverride(screen) {154 const {155 fetchImagesOverride,156 fetchMediaDecksOverride,157 fetchSlideDecksOverride,158 resetImagesOverride,159 resetMediaDecksOverride,160 resetSlideDecksOverride,161 } = this.props;162 if (screen.subscribedOverrideIds.length === 0) {163 resetImagesOverride();164 resetMediaDecksOverride();165 resetSlideDecksOverride();166 return Promise.resolve([{167 response: {168 result: [],169 entities: {170 images: {},171 },172 },173 }, {174 response: {175 result: [],176 entities: {177 mediaDecks: {},178 },179 },180 }, {181 response: {182 result: [],183 entities: {184 slideDecks: {},185 },186 },187 }]);188 }189 return Promise.all([190 fetchImagesOverride(screen.subscribedOverrideIds),191 fetchMediaDecksOverride(screen.subscribedOverrideIds),192 fetchSlideDecksOverride(screen.subscribedOverrideIds),193 ]);194 }195 79 fetch() { 196 80 const { 197 81 badPlaying, 198 fetchMonitor,199 fetchOverlay,200 fetchOvWidgets,201 82 fetchScreen, 202 83 images, 203 84 imagesOverride, 85 offlinePlaying, 86 override, 204 87 layers, 88 monitor, 205 89 mediaDecks, 206 90 mediaDecksOverride, 207 monitor, 208 offlinePlaying, 209 override, 210 resetOvWidgets, 91 webs, 92 websOverride, 93 youtubeVideos, 94 youtubeVideosOverride, 95 setConnected, 96 slideDecks, 97 slideDecksOverride, 211 98 setAppBlocking, 212 99 setBadPlaying, 213 set Connected,100 setOverride, 214 101 setOfflinePlaying, 215 setOverride,216 slideDecks,217 slideDecksOverride,218 webs,219 youtubeVideos,220 102 } = this.props; 221 fetchBase() 222 .then(() => { 223 // DETECT COMING BACK ONLINE 103 fetchScreen() 104 .then(response => { 224 105 if (offlinePlaying) { 225 106 window.location.reload(); 226 } 227 return fetchScreen(); 228 }) 229 .then(screen => { 230 if (screen.overlay === null) { 231 resetOvWidgets(); 232 return Promise.all([ 233 Promise.resolve(null), 234 Promise.resolve(screen), 235 ]); 236 } 237 return Promise.all([ 238 fetchOverlay(screen.overlay), 239 Promise.resolve(screen), 240 ]); 241 }) 242 .then(([overlay, screen]) => { 243 if (overlay === null) { 244 resetOvWidgets(); 245 return screen; 246 } 247 return fetchOvWidgets() 248 .then(() => screen); 249 }) 250 .then(screen => Promise.all([ 251 this.fetchSubscribed(screen), 252 this.fetchSubscribedOverride(screen), 253 fetchMonitor(), 254 Promise.resolve(screen), 255 ])) 256 .then(([ 257 [ 258 imagesResponse, 259 mediaDecksResponse, 260 websResponse, 261 youtubeVideosResponse, 262 layersResponse, 263 slideDecksResponse, 264 ], 265 [ 266 imagesOverrideResponse, 267 mediaDecksOverrideResponse, 268 slideDecksOverrideResponse, 269 ], 270 monitorResponse, 271 screen, 272 ]) => { 107 return; 108 } 109 const screen = response.screen; 273 110 let nextOverride = false; 274 let usedImagesResponse = imagesResponse; 275 let usedMediaDecksResponse = mediaDecksResponse; 276 let usedSlideDecksResponse = slideDecksResponse; 277 let usedWebsResponse = websResponse; 278 let usedYoutubeVideosResponse = youtubeVideosResponse; 111 let nextImages = response.images; 112 let nextMediaDecks = response.mediaDecks; 113 let nextSlideDecks = response.slideDecks; 114 let nextWebs = response.webs; 115 let nextYoutubeVideos = response.youtubeVideos; 116 const nextLayers = response.layers; 117 const nextMonitor = response.monitor; 279 118 if ( 280 imagesOverrideResponse.response.result.length !== 0 || 281 mediaDecksOverrideResponse.response.result.length !== 0 || 282 slideDecksOverrideResponse.response.result.length !== 0 119 response.imagesOverride.length !== 0 || 120 response.mediaDecksOverride.length !== 0 || 121 response.slideDecksOverride.length !== 0 || 122 response.websOverride.length !== 0 || 123 response.youtubeVideosOverride.length !== 0 283 124 ) { 284 125 nextOverride = true; 285 126 setOverride(true); 286 usedImagesResponse = imagesOverrideResponse; 287 usedMediaDecksResponse = mediaDecksOverrideResponse; 288 usedSlideDecksResponse = slideDecksOverrideResponse; 289 usedWebsResponse = { 290 response: { 291 result: [], 292 entities: { 293 webs: {}, 294 }, 295 }, 296 }; 297 usedYoutubeVideosResponse = { 298 response: { 299 result: [], 300 entities: { 301 youtubeVideos: {}, 302 }, 303 }, 304 }; 127 nextImages = response.imagesOverride; 128 nextMediaDecks = response.mediaDecksOverride; 129 nextSlideDecks = response.slideDecksOverride; 130 nextWebs = response.websOverride; 131 nextYoutubeVideos = response.youtubeVideosOverride; 305 132 } else { 306 133 setOverride(false); 307 134 } 308 // NEXT IMAGES309 let keys = usedImagesResponse.response.result;310 let lookup = usedImagesResponse.response.entities.images;311 let list = keys.map(o => lookup[o]);312 const nextImages = list;313 // NEXT MEDIA DECKS314 keys = usedMediaDecksResponse.response.result;315 lookup = usedMediaDecksResponse.response.entities.mediaDecks;316 list = keys.map(o => lookup[o]);317 const nextMediaDecks = list;318 // NEXT WEBS319 keys = usedWebsResponse.response.result;320 lookup = usedWebsResponse.response.entities.webs;321 list = keys.map(o => lookup[o]);322 const nextWebs = list;323 // NEXT YOUTUBE VIDEOS324 keys = usedYoutubeVideosResponse.response.result;325 lookup = usedYoutubeVideosResponse.response.entities.youtubeVideos;326 list = keys.map(o => lookup[o]);327 const nextYoutubeVideos = list;328 // NEXT LAYERS329 keys = layersResponse.response.result;330 lookup = layersResponse.response.entities.layers;331 list = keys.map(o => lookup[o]);332 const nextLayers = list;333 // NEXT SLIDE DECKS334 keys = usedSlideDecksResponse.response.result;335 lookup = usedSlideDecksResponse.response.entities.slideDecks;336 list = keys.map(o => lookup[o]);337 const nextSlideDecks = list;338 // MONITORING339 const nextMonitor = monitorResponse;340 135 // MONITORING - RELOAD 341 136 if ( … … 344 139 ) { 345 140 window.location.reload(); 346 return null;141 return; 347 142 } 348 143 // MONITORING - LOGIN AND CHECK-IN … … 408 203 usedImages = imagesOverride; 409 204 usedMediaDecks = mediaDecksOverride; 410 usedWebs = [];411 usedYoutubeVideos = [];205 usedWebs = websOverride; 206 usedYoutubeVideos = youtubeVideosOverride; 412 207 usedSlideDecks = slideDecksOverride; 413 208 } … … 425 220 this.restartPlayingLoop(); 426 221 } 427 return null;222 window.setTimeout(this.fetch, screen.polling * 60 * 1000); 428 223 }) 429 224 .catch(error => { … … 436 231 return; 437 232 } 233 window.setTimeout(this.fetch, ERROR_POLLING_INTERVAL * 1000); 438 234 }); 439 235 } … … 457 253 slideDecksOverride, 458 254 webs, 255 websOverride, 459 256 youtubeVideos, 257 youtubeVideosOverride, 460 258 } = this.props; 461 259 let usedSlideDecks = slideDecks; … … 468 266 usedMediaDecks = mediaDecksOverride; 469 267 usedImages = imagesOverride; 470 usedWebs = [];471 usedYoutubeVideos = [];268 usedWebs = websOverride; 269 usedYoutubeVideos = youtubeVideosOverride; 472 270 } 473 271 setNextIsReady(false); … … 508 306 slideDecksOverride, 509 307 webs, 308 websOverride, 510 309 youtubeVideos, 310 youtubeVideosOverride, 511 311 } = this.props; 512 312 const lastImageURL = window.localStorage.getItem('futusign_image_url'); … … 519 319 usedImages = imagesOverride; 520 320 usedMediaDecks = mediaDecksOverride; 521 usedWebs = [];522 usedYoutubeVideos = [];321 usedWebs = websOverride; 322 usedYoutubeVideos = youtubeVideosOverride; 523 323 usedSlideDecks = slideDecksOverride; 524 324 } … … 561 361 images: PropTypes.array.isRequired, 562 362 imagesOverride: PropTypes.array.isRequired, 563 fetchImages: PropTypes.func.isRequired,564 fetchImagesOverride: PropTypes.func.isRequired,565 fetchLayers: PropTypes.func.isRequired,566 fetchMediaDecks: PropTypes.func.isRequired,567 fetchMediaDecksOverride: PropTypes.func.isRequired,568 fetchOverlay: PropTypes.func.isRequired,569 fetchOvWidgets: PropTypes.func.isRequired,570 fetchMonitor: PropTypes.func.isRequired,571 363 fetchScreen: PropTypes.func.isRequired, 572 fetchSlideDecks: PropTypes.func.isRequired,573 fetchSlideDecksOverride: PropTypes.func.isRequired,574 fetchWebs: PropTypes.func.isRequired,575 fetchYoutubeVideos: PropTypes.func.isRequired,576 364 layers: PropTypes.array.isRequired, 577 365 layerBlocking: PropTypes.bool.isRequired, … … 584 372 ovWidgets: PropTypes.array.isRequired, 585 373 resetCurrentlyPlaying: PropTypes.func.isRequired, 586 resetImages: PropTypes.func.isRequired,587 resetImagesOverride: PropTypes.func.isRequired,588 resetMediaDecks: PropTypes.func.isRequired,589 resetMediaDecksOverride: PropTypes.func.isRequired,590 374 resetNextPlaying: PropTypes.func.isRequired, 591 resetOvWidgets: PropTypes.func.isRequired,592 resetSlideDecks: PropTypes.func.isRequired,593 resetSlideDecksOverride: PropTypes.func.isRequired,594 resetWebs: PropTypes.func.isRequired,595 resetYoutubeVideos: PropTypes.func.isRequired,596 375 setAppBlocking: PropTypes.func.isRequired, 597 376 setBadPlaying: PropTypes.func.isRequired, … … 610 389 slideDecksOverride: PropTypes.array.isRequired, 611 390 webs: PropTypes.array.isRequired, 391 websOverride: PropTypes.array.isRequired, 612 392 youtubeVideos: PropTypes.array.isRequired, 393 youtubeVideosOverride: PropTypes.array.isRequired, 613 394 }; 614 395 export default connect( … … 632 413 slideDecksOverride: fromSlideDecksOverride.getSlideDecksOverride(state), 633 414 webs: fromWebs.getWebs(state), 415 websOverride: fromWebsOverride.getWebsOverride(state), 634 416 youtubeVideos: fromYoutubeVideos.getYoutubeVideos(state), 417 youtubeVideosOverride: fromYoutubeVideosOverride.getYoutubeVideosOverride(state), 635 418 }), 636 419 { 637 fetchImages: fromImages.fetchImages,638 fetchImagesOverride: fromImagesOverride.fetchImagesOverride,639 fetchLayers: fromLayers.fetchLayers,640 fetchMediaDecks: fromMediaDecks.fetchMediaDecks,641 fetchMediaDecksOverride: fromMediaDecksOverride.fetchMediaDecksOverride,642 fetchMonitor: fromMonitor.fetchMonitor,643 fetchOverlay: fromOverlay.fetchOverlay,644 fetchOvWidgets: fromOvWidgets.fetchOvWidgets,645 420 fetchScreen: fromScreen.fetchScreen, 646 fetchSlideDecks: fromSlideDecks.fetchSlideDecks,647 fetchSlideDecksOverride: fromSlideDecksOverride.fetchSlideDecksOverride,648 fetchWebs: fromWebs.fetchWebs,649 fetchYoutubeVideos: fromYoutubeVideos.fetchYoutubeVideos,650 421 resetCurrentlyPlaying: fromCurrentlyPlaying.resetCurrentlyPlaying, 651 resetImages: fromImages.resetImages,652 resetImagesOverride: fromImagesOverride.resetImagesOverride,653 resetMediaDecks: fromMediaDecks.resetMediaDecks,654 resetMediaDecksOverride: fromMediaDecksOverride.resetMediaDecksOverride,655 422 resetNextPlaying: fromNextPlaying.resetNextPlaying, 656 resetOvWidgets: fromOvWidgets.resetOvWidgets,657 resetSlideDecks: fromSlideDecks.resetSlideDecks,658 resetSlideDecksOverride: fromSlideDecksOverride.resetSlideDecksOverride,659 resetWebs: fromWebs.resetWebs,660 resetYoutubeVideos: fromYoutubeVideos.resetYoutubeVideos,661 423 setAppBlocking: fromAppBlocking.setAppBlocking, 662 424 setBadPlaying: fromBadPlaying.setBadPlaying, -
futusign/trunk/public/screen/src/configureStore/reducers.js
r1662779 r1669808 7 7 import slideDecks from '../ducks/slideDecks'; 8 8 import youtubeVideos from '../ducks/youtubeVideos'; 9 import youtubeVideosOverride from '../ducks/youtubeVideosOverride'; 9 10 import currentlyPlaying from '../ducks/currentlyPlaying'; 10 11 import currentlyIsPlaying from '../ducks/currentlyIsPlaying'; … … 21 22 import minImagePriority from '../ducks/minImagePriority'; 22 23 import webs from '../ducks/webs'; 24 import websOverride from '../ducks/websOverride'; 23 25 import slideDecksOverride from '../ducks/slideDecksOverride'; 24 26 import imagesOverride from '../ducks/imagesOverride'; … … 34 36 screen, 35 37 slideDecks, 36 youtubeVideos,37 38 currentlyPlaying, 38 39 currentlyIsPlaying, … … 50 51 minImagePriority, 51 52 webs, 53 websOverride, 52 54 slideDecksOverride, 53 55 imagesOverride, … … 56 58 mediaDecks, 57 59 mediaDecksOverride, 60 youtubeVideos, 61 youtubeVideosOverride, 58 62 }); -
futusign/trunk/public/screen/src/ducks/badPlaying.js
r1602262 r1669808 1 import { ACTION_PREFIX } from '../strings';1 import { ACTION_PREFIX, ERROR_POLLING_INTERVAL } from '../strings'; 2 2 3 3 // API … … 24 24 export const setBadPlaying = (value) => { 25 25 if (!validBadPlaying(value)) throw new Error(); 26 if (value) { 27 window.setTimeout(() => { 28 window.location.reload(); 29 }, ERROR_POLLING_INTERVAL * 1000); 30 } 26 31 return ({ 27 32 type: SET_BAD_PLAYING, -
futusign/trunk/public/screen/src/ducks/images.js
r1626880 r1669808 4 4 import { ACTION_PREFIX } from '../strings'; 5 5 // API 6 import { get } from '../apis/images';7 6 8 7 // REDUCER MOUNT POINT 9 8 const reducerMountPoint = 'images'; 10 9 // ACTIONS 11 export const FETCH_IMAGES_REQUEST = `${ACTION_PREFIX}FETCH_IMAGES_REQUEST`;12 10 export const FETCH_IMAGES_SUCCESS = `${ACTION_PREFIX}FETCH_IMAGES_SUCCESS`; 13 export const RESET_IMAGES = `${ACTION_PREFIX}RESET_IMAGES`;14 11 // SCHEMA 15 12 const imageSchema = new Schema('images'); … … 24 21 }; 25 22 } 26 case RESET_IMAGES: {27 return {};28 }29 23 default: 30 24 return state; … … 35 29 case FETCH_IMAGES_SUCCESS: 36 30 return action.response.result; 37 case RESET_IMAGES:38 return [];39 default:40 return state;41 }42 };43 const isFetching = (state = false, action) => {44 switch (action.type) {45 case FETCH_IMAGES_REQUEST:46 return true;47 case FETCH_IMAGES_SUCCESS:48 return false;49 31 default: 50 32 return state; … … 54 36 byId, 55 37 ids, 56 isFetching,57 38 }); 58 39 // ACCESSORS AKA SELECTORS 59 export const getSlideDeck = (state, id) => state[reducerMountPoint].byId[id];60 40 const getImagesIds = state => state[reducerMountPoint].ids; 61 41 const getImagesById = state => state[reducerMountPoint].byId; … … 64 44 (imagesIds, imagesById) => imagesIds.map(id => imagesById[id]) 65 45 ); 66 export const getIsFetchingImages = (state) => state[reducerMountPoint].isFetching; 67 // ACTION CREATOR VALIDATORS 68 // ACTION CREATORS 69 export const fetchImages = (playlistIds) => (dispatch, getState) => { 70 if (!Array.isArray(playlistIds)) throw new Error(); 71 if (getIsFetchingImages(getState())) throw new Error(); 72 dispatch({ 73 type: FETCH_IMAGES_REQUEST, 74 }); 75 return get(playlistIds) 76 .then( 77 response => dispatch({ 78 type: FETCH_IMAGES_SUCCESS, 79 response: normalize(response, imagesSchema), 80 }) 81 ); 82 }; 83 export const resetImages = () => ({ 84 type: RESET_IMAGES, 46 export const setImages = response => ({ 47 type: FETCH_IMAGES_SUCCESS, 48 response: normalize(response, imagesSchema), 85 49 }); -
futusign/trunk/public/screen/src/ducks/imagesOverride.js
r1653754 r1669808 3 3 import { createSelector } from 'reselect'; 4 4 import { ACTION_PREFIX } from '../strings'; 5 import { ServerException } from '../util/exceptions';6 5 // API 7 import { get } from '../apis/images';8 6 9 7 // REDUCER MOUNT POINT 10 8 const reducerMountPoint = 'imagesOverride'; 11 9 // ACTIONS 12 export const FETCH_IMAGES_OVERRIDE_REQUEST 13 = `${ACTION_PREFIX}FETCH_IMAGES_OVERRIDE_REQUEST`; 14 export const FETCH_IMAGES_OVERRIDE_SUCCESS 15 = `${ACTION_PREFIX}FETCH_IMAGES_OVERRIDE_SUCCESS`; 16 export const FETCH_IMAGES_OVERRIDE_ERROR = `${ACTION_PREFIX}FETCH_IMAGES_OVERRIDE_ERROR`; 17 export const RESET_FETCH_IMAGES_OVERRIDE_ERROR 18 = `${ACTION_PREFIX}RESET_FETCH_IMAGES_OVERRIDE_ERROR`; 19 export const RESET_IMAGES_OVERRIDE = `${ACTION_PREFIX}RESET_IMAGES_OVERRIDE`; 10 export const FETCH_IMAGES_OVERRIDE_SUCCESS = `${ACTION_PREFIX}FETCH_IMAGES_OVERRIDE_SUCCESS`; 20 11 // SCHEMA 21 const image Schema = new Schema('images');22 const imagesOverrideSchema = arrayOf(image Schema);12 const imageOverrideSchema = new Schema('imagesOverride'); 13 const imagesOverrideSchema = arrayOf(imageOverrideSchema); 23 14 // REDUCERS 24 15 const byId = (state = {}, action) => { … … 27 18 return { 28 19 ...state, 29 ...action.response.entities.images ,20 ...action.response.entities.imagesOverride, 30 21 }; 31 }32 case RESET_IMAGES_OVERRIDE: {33 return {};34 22 } 35 23 default: … … 41 29 case FETCH_IMAGES_OVERRIDE_SUCCESS: 42 30 return action.response.result; 43 case RESET_IMAGES_OVERRIDE:44 return [];45 default:46 return state;47 }48 };49 const isFetching = (state = false, action) => {50 switch (action.type) {51 case FETCH_IMAGES_OVERRIDE_REQUEST:52 return true;53 case FETCH_IMAGES_OVERRIDE_SUCCESS:54 case FETCH_IMAGES_OVERRIDE_ERROR:55 return false;56 default:57 return state;58 }59 };60 const fetchErrorMessage = (state = null, action) => {61 switch (action.type) {62 case FETCH_IMAGES_OVERRIDE_ERROR:63 return action.message;64 case FETCH_IMAGES_OVERRIDE_REQUEST:65 case FETCH_IMAGES_OVERRIDE_SUCCESS:66 return null;67 31 default: 68 32 return state; … … 72 36 byId, 73 37 ids, 74 isFetching,75 fetchErrorMessage,76 38 }); 77 39 // ACCESSORS AKA SELECTORS 78 export const getImage = (state, id) => state[reducerMountPoint].byId[id];79 40 const getImagesOverrideIds = state => state[reducerMountPoint].ids; 80 41 const getImagesOverrideById = state => state[reducerMountPoint].byId; 81 42 export const getImagesOverride = createSelector( 82 43 [getImagesOverrideIds, getImagesOverrideById], 83 (imagesOverrideIds, imagesOverrideById) => imagesOverrideIds 84 .map(id => imagesOverrideById[id]) 44 (imagesOverrideIds, imagesOverrideById) => imagesOverrideIds.map(id => imagesOverrideById[id]) 85 45 ); 86 export const getIsFetchingImagesOverride = (state) => state[reducerMountPoint].isFetching; 87 export const getFetchImagesOverrideErrorMessage = (state) => state[reducerMountPoint] 88 .fetchErrorMessage; 89 // ACTION CREATOR VALIDATORS 90 // ACTION CREATORS 91 export const fetchImagesOverride = (overrideIds) => (dispatch, getState) => { 92 if (!Array.isArray(overrideIds)) throw new Error(); 93 if (getIsFetchingImagesOverride(getState())) throw new Error(); 94 dispatch({ 95 type: FETCH_IMAGES_OVERRIDE_REQUEST, 96 }); 97 return get(overrideIds, true) 98 .then( 99 response => dispatch({ 100 type: FETCH_IMAGES_OVERRIDE_SUCCESS, 101 response: normalize(response, imagesOverrideSchema), 102 }), 103 error => { 104 dispatch({ 105 type: FETCH_IMAGES_OVERRIDE_ERROR, 106 message: error.message, 107 }); 108 throw new ServerException(error.message); 109 } 110 ); 111 }; 112 export const resetFetchImagesOverrideError = () => ({ 113 type: RESET_FETCH_IMAGES_OVERRIDE_ERROR, 46 export const setImagesOverride = response => ({ 47 type: FETCH_IMAGES_OVERRIDE_SUCCESS, 48 response: normalize(response, imagesOverrideSchema), 114 49 }); 115 export const resetImagesOverride = () => ({116 type: RESET_IMAGES_OVERRIDE,117 }); -
futusign/trunk/public/screen/src/ducks/layers.js
r1641749 r1669808 4 4 import { ACTION_PREFIX } from '../strings'; 5 5 // API 6 import { get } from '../apis/layers';7 6 8 7 // REDUCER MOUNT POINT 9 8 const reducerMountPoint = 'layers'; 10 9 // ACTIONS 11 export const FETCH_LAYERS_REQUEST = `${ACTION_PREFIX}FETCH_LAYERS_REQUEST`;12 10 export const FETCH_LAYERS_SUCCESS = `${ACTION_PREFIX}FETCH_LAYERS_SUCCESS`; 13 export const RESET_LAYERS = `${ACTION_PREFIX}RESET_LAYERS`;14 11 // SCHEMA 15 12 const layerSchema = new Schema('layers'); … … 24 21 }; 25 22 } 26 case RESET_LAYERS: {27 return {};28 }29 23 default: 30 24 return state; … … 35 29 case FETCH_LAYERS_SUCCESS: 36 30 return action.response.result; 37 case RESET_LAYERS:38 return [];39 default:40 return state;41 }42 };43 const isFetching = (state = false, action) => {44 switch (action.type) {45 case FETCH_LAYERS_REQUEST:46 return true;47 case FETCH_LAYERS_SUCCESS:48 return false;49 31 default: 50 32 return state; … … 54 36 byId, 55 37 ids, 56 isFetching,57 38 }); 58 39 // ACCESSORS AKA SELECTORS 59 export const getSlideDeck = (state, id) => state[reducerMountPoint].byId[id];60 40 const getLayersIds = state => state[reducerMountPoint].ids; 61 41 const getLayersById = state => state[reducerMountPoint].byId; … … 64 44 (layersIds, layersById) => layersIds.map(id => layersById[id]) 65 45 ); 66 export const getIsFetchingLayers = (state) => state[reducerMountPoint].isFetching; 67 // ACTION CREATOR VALIDATORS 68 // ACTION CREATORS 69 export const fetchLayers = (playlistIds) => (dispatch, getState) => { 70 if (!Array.isArray(playlistIds)) throw new Error(); 71 if (getIsFetchingLayers(getState())) throw new Error(); 72 dispatch({ 73 type: FETCH_LAYERS_REQUEST, 74 }); 75 return get(playlistIds) 76 .then( 77 response => dispatch({ 78 type: FETCH_LAYERS_SUCCESS, 79 response: normalize(response, layersSchema), 80 }) 81 ); 82 }; 83 export const resetLayers = () => ({ 84 type: RESET_LAYERS, 46 export const setLayers = response => ({ 47 type: FETCH_LAYERS_SUCCESS, 48 response: normalize(response, layersSchema), 85 49 }); -
futusign/trunk/public/screen/src/ducks/mediaDecks.js
r1662779 r1669808 3 3 import { createSelector } from 'reselect'; 4 4 import { ACTION_PREFIX } from '../strings'; 5 import { ServerException } from '../util/exceptions';6 5 // API 7 import { get } from '../apis/mediaDecks';8 6 9 7 // REDUCER MOUNT POINT 10 8 const reducerMountPoint = 'mediaDecks'; 11 9 // ACTIONS 12 export const FETCH_MEDIA_DECKS_REQUEST = `${ACTION_PREFIX}FETCH_MEDIA_DECKS_REQUEST`;13 10 export const FETCH_MEDIA_DECKS_SUCCESS = `${ACTION_PREFIX}FETCH_MEDIA_DECKS_SUCCESS`; 14 export const FETCH_MEDIA_DECKS_ERROR = `${ACTION_PREFIX}FETCH_MEDIA_DECKS_ERROR`;15 export const RESET_FETCH_MEDIA_DECKS_ERROR = `${ACTION_PREFIX}RESET_FETCH_MEDIA_DECKS_ERROR`;16 export const RESET_MEDIA_DECKS = `${ACTION_PREFIX}RESET_MEDIA_DECKS`;17 11 // SCHEMA 18 12 const mediaDeckSchema = new Schema('mediaDecks'); … … 27 21 }; 28 22 } 29 case RESET_MEDIA_DECKS: {30 return {};31 }32 23 default: 33 24 return state; … … 38 29 case FETCH_MEDIA_DECKS_SUCCESS: 39 30 return action.response.result; 40 case RESET_MEDIA_DECKS:41 return [];42 default:43 return state;44 }45 };46 const isFetching = (state = false, action) => {47 switch (action.type) {48 case FETCH_MEDIA_DECKS_REQUEST:49 return true;50 case FETCH_MEDIA_DECKS_SUCCESS:51 case FETCH_MEDIA_DECKS_ERROR:52 return false;53 default:54 return state;55 }56 };57 const fetchErrorMessage = (state = null, action) => {58 switch (action.type) {59 case FETCH_MEDIA_DECKS_ERROR:60 return action.message;61 case FETCH_MEDIA_DECKS_REQUEST:62 case FETCH_MEDIA_DECKS_SUCCESS:63 return null;64 31 default: 65 32 return state; … … 69 36 byId, 70 37 ids, 71 isFetching,72 fetchErrorMessage,73 38 }); 74 39 // ACCESSORS AKA SELECTORS 75 export const getMediaDeck = (state, id) => state[reducerMountPoint].byId[id];76 40 const getMediaDecksIds = state => state[reducerMountPoint].ids; 77 41 const getMediaDecksById = state => state[reducerMountPoint].byId; … … 80 44 (mediaDecksIds, mediaDecksById) => mediaDecksIds.map(id => mediaDecksById[id]) 81 45 ); 82 export const getIsFetchingMediaDecks = (state) => state[reducerMountPoint].isFetching; 83 export const getFetchMediaDecksErrorMessage = (state) => state[reducerMountPoint].fetchErrorMessage; 84 // ACTION CREATOR VALIDATORS 85 // ACTION CREATORS 86 export const fetchMediaDecks = (playlistIds) => (dispatch, getState) => { 87 if (!Array.isArray(playlistIds)) throw new Error(); 88 if (getIsFetchingMediaDecks(getState())) throw new Error(); 89 dispatch({ 90 type: FETCH_MEDIA_DECKS_REQUEST, 91 }); 92 return get(playlistIds) 93 .then( 94 response => dispatch({ 95 type: FETCH_MEDIA_DECKS_SUCCESS, 96 response: normalize(response, mediaDecksSchema), 97 }), 98 error => { 99 dispatch({ 100 type: FETCH_MEDIA_DECKS_ERROR, 101 message: error.message, 102 }); 103 throw new ServerException(error.message); 104 } 105 ); 106 }; 107 export const resetFetchMediaDecksError = () => ({ 108 type: RESET_FETCH_MEDIA_DECKS_ERROR, 46 export const setMediaDecks = response => ({ 47 type: FETCH_MEDIA_DECKS_SUCCESS, 48 response: normalize(response, mediaDecksSchema), 109 49 }); 110 export const resetMediaDecks = () => ({111 type: RESET_MEDIA_DECKS,112 }); -
futusign/trunk/public/screen/src/ducks/mediaDecksOverride.js
r1662779 r1669808 3 3 import { createSelector } from 'reselect'; 4 4 import { ACTION_PREFIX } from '../strings'; 5 import { ServerException } from '../util/exceptions';6 5 // API 7 import { get } from '../apis/mediaDecks';8 6 9 7 // REDUCER MOUNT POINT 10 8 const reducerMountPoint = 'mediaDecksOverride'; 11 9 // ACTIONS 12 export const FETCH_MEDIA_DECKS_OVERRIDE_REQUEST 13 = `${ACTION_PREFIX}FETCH_MEDIA_DECKS_OVERRIDE_REQUEST`; 14 export const FETCH_MEDIA_DECKS_OVERRIDE_SUCCESS 15 = `${ACTION_PREFIX}FETCH_MEDIA_DECKS_OVERRIDE_SUCCESS`; 16 export const FETCH_MEDIA_DECKS_OVERRIDE_ERROR = `${ACTION_PREFIX}FETCH_MEDIA_DECKS_OVERRIDE_ERROR`; 17 export const RESET_FETCH_MEDIA_DECKS_OVERRIDE_ERROR 18 = `${ACTION_PREFIX}RESET_FETCH_MEDIA_DECKS_OVERRIDE_ERROR`; 19 export const RESET_MEDIA_DECKS_OVERRIDE = `${ACTION_PREFIX}RESET_MEDIA_DECKS_OVERRIDE`; 10 export const FETCH_MEDIA_DECKS_OVERRIDE_SUCCESS = 11 `${ACTION_PREFIX}FETCH_MEDIA_DECKS_OVERRIDE_SUCCESS`; 20 12 // SCHEMA 21 const mediaDeck Schema = new Schema('mediaDecks');22 const mediaDecksOverrideSchema = arrayOf(mediaDeck Schema);13 const mediaDeckOverrideSchema = new Schema('mediaDecksOverride'); 14 const mediaDecksOverrideSchema = arrayOf(mediaDeckOverrideSchema); 23 15 // REDUCERS 24 16 const byId = (state = {}, action) => { … … 27 19 return { 28 20 ...state, 29 ...action.response.entities.mediaDecks ,21 ...action.response.entities.mediaDecksOverride, 30 22 }; 31 }32 case RESET_MEDIA_DECKS_OVERRIDE: {33 return {};34 23 } 35 24 default: … … 41 30 case FETCH_MEDIA_DECKS_OVERRIDE_SUCCESS: 42 31 return action.response.result; 43 case RESET_MEDIA_DECKS_OVERRIDE:44 return [];45 default:46 return state;47 }48 };49 const isFetching = (state = false, action) => {50 switch (action.type) {51 case FETCH_MEDIA_DECKS_OVERRIDE_REQUEST:52 return true;53 case FETCH_MEDIA_DECKS_OVERRIDE_SUCCESS:54 case FETCH_MEDIA_DECKS_OVERRIDE_ERROR:55 return false;56 default:57 return state;58 }59 };60 const fetchErrorMessage = (state = null, action) => {61 switch (action.type) {62 case FETCH_MEDIA_DECKS_OVERRIDE_ERROR:63 return action.message;64 case FETCH_MEDIA_DECKS_OVERRIDE_REQUEST:65 case FETCH_MEDIA_DECKS_OVERRIDE_SUCCESS:66 return null;67 32 default: 68 33 return state; … … 72 37 byId, 73 38 ids, 74 isFetching,75 fetchErrorMessage,76 39 }); 77 40 // ACCESSORS AKA SELECTORS 78 export const getMediaDeck = (state, id) => state[reducerMountPoint].byId[id];79 41 const getMediaDecksOverrideIds = state => state[reducerMountPoint].ids; 80 42 const getMediaDecksOverrideById = state => state[reducerMountPoint].byId; … … 84 46 .map(id => mediaDecksOverrideById[id]) 85 47 ); 86 export const getIsFetchingMediaDecksOverride = (state) => state[reducerMountPoint].isFetching; 87 export const getFetchMediaDecksOverrideErrorMessage = (state) => state[reducerMountPoint] 88 .fetchErrorMessage; 89 // ACTION CREATOR VALIDATORS 90 // ACTION CREATORS 91 export const fetchMediaDecksOverride = (overrideIds) => (dispatch, getState) => { 92 if (!Array.isArray(overrideIds)) throw new Error(); 93 if (getIsFetchingMediaDecksOverride(getState())) throw new Error(); 94 dispatch({ 95 type: FETCH_MEDIA_DECKS_OVERRIDE_REQUEST, 96 }); 97 return get(overrideIds, true) 98 .then( 99 response => dispatch({ 100 type: FETCH_MEDIA_DECKS_OVERRIDE_SUCCESS, 101 response: normalize(response, mediaDecksOverrideSchema), 102 }), 103 error => { 104 dispatch({ 105 type: FETCH_MEDIA_DECKS_OVERRIDE_ERROR, 106 message: error.message, 107 }); 108 throw new ServerException(error.message); 109 } 110 ); 111 }; 112 export const resetFetchMediaDecksOverrideError = () => ({ 113 type: RESET_FETCH_MEDIA_DECKS_OVERRIDE_ERROR, 48 export const setMediaDecksOverride = response => ({ 49 type: FETCH_MEDIA_DECKS_OVERRIDE_SUCCESS, 50 response: normalize(response, mediaDecksOverrideSchema), 114 51 }); 115 export const resetMediaDecksOverride = () => ({116 type: RESET_MEDIA_DECKS_OVERRIDE,117 }); -
futusign/trunk/public/screen/src/ducks/monitor.js
r1626880 r1669808 1 1 import { combineReducers } from 'redux'; 2 2 import { ACTION_PREFIX } from '../strings'; 3 // API 3 4 4 // API5 import { get } from '../apis/monitor';6 5 // REDUCER MOUNT POINT 7 6 const reducerMountPoint = 'monitor'; 8 7 // ACTIONS 9 export const FETCH_MONITOR_REQUEST = `${ACTION_PREFIX}FETCH_MONITOR_REQUEST`;10 8 export const FETCH_MONITOR_SUCCESS = `${ACTION_PREFIX}FETCH_MONITOR_SUCCESS`; 11 9 // SCHEMA … … 19 17 } 20 18 }; 21 const isFetching = (state = false, action) => {22 switch (action.type) {23 case FETCH_MONITOR_REQUEST:24 return true;25 case FETCH_MONITOR_SUCCESS:26 return false;27 default:28 return state;29 }30 };31 19 export default combineReducers({ 32 20 value, 33 isFetching,34 21 }); 35 22 // ACCESSORS AKA SELECTORS 36 23 export const getMonitor = (state) => state[reducerMountPoint].value; 37 export const getIsFetchingMonitor = (state) => state[reducerMountPoint].isFetching;38 24 // ACTION CREATOR VALIDATORS 39 25 // ACTION CREATORS 40 export const fetchMonitor = () => (dispatch, getState) => { 41 const state = getState(); 42 if (getIsFetchingMonitor(state)) throw new Error(); 43 dispatch({ 44 type: FETCH_MONITOR_REQUEST, 45 }); 46 return get() 47 .then( 48 response => dispatch({ 49 type: FETCH_MONITOR_SUCCESS, 50 response, 51 }).response 52 ); 53 }; 26 export const setMonitor = response => ({ 27 type: FETCH_MONITOR_SUCCESS, 28 response, 29 }); -
futusign/trunk/public/screen/src/ducks/ovWidgets.js
r1629524 r1669808 3 3 import { createSelector } from 'reselect'; 4 4 import { ACTION_PREFIX } from '../strings'; 5 import { ServerException } from '../util/exceptions';6 5 // API 7 import { get } from '../apis/ovWidgets';8 6 9 7 // REDUCER MOUNT POINT 10 8 const reducerMountPoint = 'ovWidgets'; 11 9 // ACTIONS 12 export const FETCH_OV_WIDGETS_REQUEST = `${ACTION_PREFIX}FETCH_OV_WIDGETS_REQUEST`;13 10 export const FETCH_OV_WIDGETS_SUCCESS = `${ACTION_PREFIX}FETCH_OV_WIDGETS_SUCCESS`; 14 export const FETCH_OV_WIDGETS_ERROR = `${ACTION_PREFIX}FETCH_OV_WIDGETS_ERROR`;15 export const RESET_FETCH_OV_WIDGETS_ERROR = `${ACTION_PREFIX}RESET_FETCH_OV_WIDGETS_ERROR`;16 export const RESET_OV_WIDGETS = `${ACTION_PREFIX}RESET_OV_WIDGETS`;17 11 // SCHEMA 18 const slideDeckSchema = new Schema('ovWidgets');19 const ovWidgetsSchema = arrayOf( slideDeckSchema);12 const ovWidgetSchema = new Schema('ovWidgets'); 13 const ovWidgetsSchema = arrayOf(ovWidgetSchema); 20 14 // REDUCERS 21 15 const byId = (state = {}, action) => { … … 27 21 }; 28 22 } 29 case RESET_OV_WIDGETS: {30 return {};31 }32 23 default: 33 24 return state; … … 38 29 case FETCH_OV_WIDGETS_SUCCESS: 39 30 return action.response.result; 40 case RESET_OV_WIDGETS:41 return [];42 default:43 return state;44 }45 };46 const isFetching = (state = false, action) => {47 switch (action.type) {48 case FETCH_OV_WIDGETS_REQUEST:49 return true;50 case FETCH_OV_WIDGETS_SUCCESS:51 case FETCH_OV_WIDGETS_ERROR:52 return false;53 default:54 return state;55 }56 };57 const fetchErrorMessage = (state = null, action) => {58 switch (action.type) {59 case FETCH_OV_WIDGETS_ERROR:60 return action.message;61 case FETCH_OV_WIDGETS_REQUEST:62 case FETCH_OV_WIDGETS_SUCCESS:63 return null;64 31 default: 65 32 return state; … … 69 36 byId, 70 37 ids, 71 isFetching,72 fetchErrorMessage,73 38 }); 74 39 // ACCESSORS AKA SELECTORS 75 export const getSlideDeck = (state, id) => state[reducerMountPoint].byId[id];76 40 const getOvWidgetsIds = state => state[reducerMountPoint].ids; 77 41 const getOvWidgetsById = state => state[reducerMountPoint].byId; … … 80 44 (ovWidgetsIds, ovWidgetsById) => ovWidgetsIds.map(id => ovWidgetsById[id]) 81 45 ); 82 export const getIsFetchingOvWidgets = (state) => state[reducerMountPoint].isFetching; 83 export const getFetchOvWidgetsErrorMessage = (state) => state[reducerMountPoint].fetchErrorMessage; 84 // ACTION CREATOR VALIDATORS 85 // ACTION CREATORS 86 export const fetchOvWidgets = () => (dispatch, getState) => { 87 if (getIsFetchingOvWidgets(getState())) throw new Error(); 88 dispatch({ 89 type: FETCH_OV_WIDGETS_REQUEST, 90 }); 91 return get() 92 .then( 93 response => dispatch({ 94 type: FETCH_OV_WIDGETS_SUCCESS, 95 response: normalize(response, ovWidgetsSchema), 96 }), 97 error => { 98 dispatch({ 99 type: FETCH_OV_WIDGETS_ERROR, 100 message: error.message, 101 }); 102 throw new ServerException(error.message); 103 } 104 ); 105 }; 106 export const resetFetchOvWidgetsError = () => ({ 107 type: RESET_FETCH_OV_WIDGETS_ERROR, 46 export const setOvWidgets = response => ({ 47 type: FETCH_OV_WIDGETS_SUCCESS, 48 response: normalize(response, ovWidgetsSchema), 108 49 }); 109 export const resetOvWidgets = () => ({110 type: RESET_OV_WIDGETS,111 }); -
futusign/trunk/public/screen/src/ducks/overlay.js
r1629524 r1669808 2 2 import { ACTION_PREFIX } from '../strings'; 3 3 // API 4 import { get } from '../apis/overlay';5 4 6 5 // REDUCER MOUNT POINT 7 6 const reducerMountPoint = 'overlay'; 8 7 // ACTIONS 9 export const FETCH_OVERLAY_REQUEST = `${ACTION_PREFIX}FETCH_OVERLAY_REQUEST`;10 8 export const FETCH_OVERLAY_SUCCESS = `${ACTION_PREFIX}FETCH_OVERLAY_SUCCESS`; 11 export const FETCH_OVERLAY_ERROR = `${ACTION_PREFIX}FETCH_OVERLAY_ERROR`;12 export const RESET_FETCH_OVERLAY_ERROR = `${ACTION_PREFIX}RESET_FETCH_OVERLAY_ERROR`;13 9 // SCHEMA 14 10 // REDUCERS … … 21 17 } 22 18 }; 23 const isFetching = (state = false, action) => {24 switch (action.type) {25 case FETCH_OVERLAY_REQUEST:26 return true;27 case FETCH_OVERLAY_SUCCESS:28 case FETCH_OVERLAY_ERROR:29 return false;30 default:31 return state;32 }33 };34 const fetchErrorMessage = (state = null, action) => {35 switch (action.type) {36 case FETCH_OVERLAY_ERROR:37 return action.message;38 case FETCH_OVERLAY_REQUEST:39 case FETCH_OVERLAY_SUCCESS:40 case RESET_FETCH_OVERLAY_ERROR:41 return null;42 default:43 return state;44 }45 };46 19 export default combineReducers({ 47 20 value, 48 isFetching,49 fetchErrorMessage,50 21 }); 51 22 // ACCESSORS AKA SELECTORS 52 23 export const getOverlay = (state) => state[reducerMountPoint].value; 53 export const getIsFetchingOverlay = (state) => state[reducerMountPoint].isFetching;54 export const getFetchOverlayErrorMessage = (state) => state[reducerMountPoint].fetchErrorMessage;55 24 // ACTION CREATOR VALIDATORS 56 25 // ACTION CREATORS 57 export const fetchOverlay = (id) => (dispatch, getState) => { 58 const state = getState(); 59 if (getIsFetchingOverlay(state)) throw new Error(); 60 dispatch({ 61 type: FETCH_OVERLAY_REQUEST, 62 }); 63 return get(id) 64 .then( 65 response => dispatch({ 66 type: FETCH_OVERLAY_SUCCESS, 67 response, 68 }).response 69 ); 70 }; 71 export const resetFetchOverlayError = () => ({ 72 type: RESET_FETCH_OVERLAY_ERROR, 26 export const setOverlay = response => ({ 27 type: FETCH_OVERLAY_SUCCESS, 28 response, 73 29 }); -
futusign/trunk/public/screen/src/ducks/screen.js
r1626880 r1669808 2 2 import { ACTION_PREFIX, SCREEN_ID } from '../strings'; 3 3 import { ServerException } from '../util/exceptions'; 4 import { setImages } from './images'; 5 import { setImagesOverride } from './imagesOverride'; 6 import { setWebs } from './webs'; 7 import { setWebsOverride } from './websOverride'; 8 import { setYoutubeVideos } from './youtubeVideos'; 9 import { setYoutubeVideosOverride } from './youtubeVideosOverride'; 10 import { setSlideDecks } from './slideDecks'; 11 import { setSlideDecksOverride } from './slideDecksOverride'; 12 import { setLayers } from './layers'; 13 import { setMediaDecks } from './mediaDecks'; 14 import { setMediaDecksOverride } from './mediaDecksOverride'; 15 import { setOverlay } from './overlay'; 16 import { setOvWidgets } from './ovWidgets'; 17 import { setMonitor } from './monitor'; 4 18 // API 5 import { get } from '../apis/screen'; 19 import { get } from '../apis/endpoint'; 20 6 21 // REDUCER MOUNT POINT 7 22 const reducerMountPoint = 'screen'; … … 15 30 const value = (state = { 16 31 id: SCREEN_ID, 17 title: null,18 subscribedPlaylistIds: [],19 32 }, action) => { 20 33 switch (action.type) { … … 68 81 return get(screen.id) 69 82 .then( 70 response => dispatch({ 71 type: FETCH_SCREEN_SUCCESS, 72 response, 73 }).response, 83 response => { 84 dispatch({ 85 type: FETCH_SCREEN_SUCCESS, 86 response: response.screen, 87 }); 88 dispatch(setImages(response.images)); 89 dispatch(setImagesOverride(response.imagesOverride)); 90 dispatch(setMediaDecks(response.mediaDecks)); 91 dispatch(setMediaDecksOverride(response.mediaDecksOverride)); 92 dispatch(setWebs(response.webs)); 93 dispatch(setWebsOverride(response.websOverride)); 94 dispatch(setYoutubeVideos(response.youtubeVideos)); 95 dispatch(setYoutubeVideosOverride(response.youtubeVideosOverride)); 96 dispatch(setSlideDecks(response.slideDecks)); 97 dispatch(setSlideDecksOverride(response.slideDecksOverride)); 98 dispatch(setLayers(response.layers)); 99 dispatch(setOverlay(response.overlay)); 100 dispatch(setOvWidgets(response.ovWidgets)); 101 dispatch(setMonitor(response.monitor)); 102 return response; 103 }, 74 104 error => { 75 105 dispatch({ -
futusign/trunk/public/screen/src/ducks/slideDecks.js
r1602262 r1669808 3 3 import { createSelector } from 'reselect'; 4 4 import { ACTION_PREFIX } from '../strings'; 5 import { ServerException } from '../util/exceptions';6 5 // API 7 import { get } from '../apis/slideDecks';8 6 9 7 // REDUCER MOUNT POINT 10 8 const reducerMountPoint = 'slideDecks'; 11 9 // ACTIONS 12 export const FETCH_SLIDE_DECKS_REQUEST = `${ACTION_PREFIX}FETCH_SLIDE_DECKS_REQUEST`;13 10 export const FETCH_SLIDE_DECKS_SUCCESS = `${ACTION_PREFIX}FETCH_SLIDE_DECKS_SUCCESS`; 14 export const FETCH_SLIDE_DECKS_ERROR = `${ACTION_PREFIX}FETCH_SLIDE_DECKS_ERROR`;15 export const RESET_FETCH_SLIDE_DECKS_ERROR = `${ACTION_PREFIX}RESET_FETCH_SLIDE_DECKS_ERROR`;16 export const RESET_SLIDE_DECKS = `${ACTION_PREFIX}RESET_SLIDE_DECKS`;17 11 // SCHEMA 18 12 const slideDeckSchema = new Schema('slideDecks'); … … 27 21 }; 28 22 } 29 case RESET_SLIDE_DECKS: {30 return {};31 }32 23 default: 33 24 return state; … … 38 29 case FETCH_SLIDE_DECKS_SUCCESS: 39 30 return action.response.result; 40 case RESET_SLIDE_DECKS:41 return [];42 default:43 return state;44 }45 };46 const isFetching = (state = false, action) => {47 switch (action.type) {48 case FETCH_SLIDE_DECKS_REQUEST:49 return true;50 case FETCH_SLIDE_DECKS_SUCCESS:51 case FETCH_SLIDE_DECKS_ERROR:52 return false;53 default:54 return state;55 }56 };57 const fetchErrorMessage = (state = null, action) => {58 switch (action.type) {59 case FETCH_SLIDE_DECKS_ERROR:60 return action.message;61 case FETCH_SLIDE_DECKS_REQUEST:62 case FETCH_SLIDE_DECKS_SUCCESS:63 return null;64 31 default: 65 32 return state; … … 69 36 byId, 70 37 ids, 71 isFetching,72 fetchErrorMessage,73 38 }); 74 39 // ACCESSORS AKA SELECTORS 75 export const getSlideDeck = (state, id) => state[reducerMountPoint].byId[id];76 40 const getSlideDecksIds = state => state[reducerMountPoint].ids; 77 41 const getSlideDecksById = state => state[reducerMountPoint].byId; … … 80 44 (slideDecksIds, slideDecksById) => slideDecksIds.map(id => slideDecksById[id]) 81 45 ); 82 export const getIsFetchingSlideDecks = (state) => state[reducerMountPoint].isFetching; 83 export const getFetchSlideDecksErrorMessage = (state) => state[reducerMountPoint].fetchErrorMessage; 84 // ACTION CREATOR VALIDATORS 85 // ACTION CREATORS 86 export const fetchSlideDecks = (playlistIds) => (dispatch, getState) => { 87 if (!Array.isArray(playlistIds)) throw new Error(); 88 if (getIsFetchingSlideDecks(getState())) throw new Error(); 89 dispatch({ 90 type: FETCH_SLIDE_DECKS_REQUEST, 91 }); 92 return get(playlistIds) 93 .then( 94 response => dispatch({ 95 type: FETCH_SLIDE_DECKS_SUCCESS, 96 response: normalize(response, slideDecksSchema), 97 }), 98 error => { 99 dispatch({ 100 type: FETCH_SLIDE_DECKS_ERROR, 101 message: error.message, 102 }); 103 throw new ServerException(error.message); 104 } 105 ); 106 }; 107 export const resetFetchSlideDecksError = () => ({ 108 type: RESET_FETCH_SLIDE_DECKS_ERROR, 46 export const setSlideDecks = response => ({ 47 type: FETCH_SLIDE_DECKS_SUCCESS, 48 response: normalize(response, slideDecksSchema), 109 49 }); 110 export const resetSlideDecks = () => ({111 type: RESET_SLIDE_DECKS,112 }); -
futusign/trunk/public/screen/src/ducks/slideDecksOverride.js
r1651645 r1669808 3 3 import { createSelector } from 'reselect'; 4 4 import { ACTION_PREFIX } from '../strings'; 5 import { ServerException } from '../util/exceptions';6 5 // API 7 import { get } from '../apis/slideDecks';8 6 9 7 // REDUCER MOUNT POINT 10 8 const reducerMountPoint = 'slideDecksOverride'; 11 9 // ACTIONS 12 export const FETCH_SLIDE_DECKS_OVERRIDE_REQUEST 13 = `${ACTION_PREFIX}FETCH_SLIDE_DECKS_OVERRIDE_REQUEST`; 14 export const FETCH_SLIDE_DECKS_OVERRIDE_SUCCESS 15 = `${ACTION_PREFIX}FETCH_SLIDE_DECKS_OVERRIDE_SUCCESS`; 16 export const FETCH_SLIDE_DECKS_OVERRIDE_ERROR = `${ACTION_PREFIX}FETCH_SLIDE_DECKS_OVERRIDE_ERROR`; 17 export const RESET_FETCH_SLIDE_DECKS_OVERRIDE_ERROR 18 = `${ACTION_PREFIX}RESET_FETCH_SLIDE_DECKS_OVERRIDE_ERROR`; 19 export const RESET_SLIDE_DECKS_OVERRIDE = `${ACTION_PREFIX}RESET_SLIDE_DECKS_OVERRIDE`; 10 export const FETCH_SLIDE_DECKS_OVERRIDE_SUCCESS = 11 `${ACTION_PREFIX}FETCH_SLIDE_DECKS_OVERRIDE_SUCCESS`; 20 12 // SCHEMA 21 const slideDeck Schema = new Schema('slideDecks');22 const slideDecksOverrideSchema = arrayOf(slideDeck Schema);13 const slideDeckOverrideSchema = new Schema('slideDecksOverride'); 14 const slideDecksOverrideSchema = arrayOf(slideDeckOverrideSchema); 23 15 // REDUCERS 24 16 const byId = (state = {}, action) => { … … 27 19 return { 28 20 ...state, 29 ...action.response.entities.slideDecks ,21 ...action.response.entities.slideDecksOverride, 30 22 }; 31 }32 case RESET_SLIDE_DECKS_OVERRIDE: {33 return {};34 23 } 35 24 default: … … 41 30 case FETCH_SLIDE_DECKS_OVERRIDE_SUCCESS: 42 31 return action.response.result; 43 case RESET_SLIDE_DECKS_OVERRIDE:44 return [];45 default:46 return state;47 }48 };49 const isFetching = (state = false, action) => {50 switch (action.type) {51 case FETCH_SLIDE_DECKS_OVERRIDE_REQUEST:52 return true;53 case FETCH_SLIDE_DECKS_OVERRIDE_SUCCESS:54 case FETCH_SLIDE_DECKS_OVERRIDE_ERROR:55 return false;56 default:57 return state;58 }59 };60 const fetchErrorMessage = (state = null, action) => {61 switch (action.type) {62 case FETCH_SLIDE_DECKS_OVERRIDE_ERROR:63 return action.message;64 case FETCH_SLIDE_DECKS_OVERRIDE_REQUEST:65 case FETCH_SLIDE_DECKS_OVERRIDE_SUCCESS:66 return null;67 32 default: 68 33 return state; … … 72 37 byId, 73 38 ids, 74 isFetching,75 fetchErrorMessage,76 39 }); 77 40 // ACCESSORS AKA SELECTORS 78 export const getSlideDeck = (state, id) => state[reducerMountPoint].byId[id];79 41 const getSlideDecksOverrideIds = state => state[reducerMountPoint].ids; 80 42 const getSlideDecksOverrideById = state => state[reducerMountPoint].byId; … … 84 46 .map(id => slideDecksOverrideById[id]) 85 47 ); 86 export const getIsFetchingSlideDecksOverride = (state) => state[reducerMountPoint].isFetching; 87 export const getFetchSlideDecksOverrideErrorMessage = (state) => state[reducerMountPoint] 88 .fetchErrorMessage; 89 // ACTION CREATOR VALIDATORS 90 // ACTION CREATORS 91 export const fetchSlideDecksOverride = (overrideIds) => (dispatch, getState) => { 92 if (!Array.isArray(overrideIds)) throw new Error(); 93 if (getIsFetchingSlideDecksOverride(getState())) throw new Error(); 94 dispatch({ 95 type: FETCH_SLIDE_DECKS_OVERRIDE_REQUEST, 96 }); 97 return get(overrideIds, true) 98 .then( 99 response => dispatch({ 100 type: FETCH_SLIDE_DECKS_OVERRIDE_SUCCESS, 101 response: normalize(response, slideDecksOverrideSchema), 102 }), 103 error => { 104 dispatch({ 105 type: FETCH_SLIDE_DECKS_OVERRIDE_ERROR, 106 message: error.message, 107 }); 108 throw new ServerException(error.message); 109 } 110 ); 111 }; 112 export const resetFetchSlideDecksOverrideError = () => ({ 113 type: RESET_FETCH_SLIDE_DECKS_OVERRIDE_ERROR, 48 export const setSlideDecksOverride = response => ({ 49 type: FETCH_SLIDE_DECKS_OVERRIDE_SUCCESS, 50 response: normalize(response, slideDecksOverrideSchema), 114 51 }); 115 export const resetSlideDecksOverride = () => ({116 type: RESET_SLIDE_DECKS_OVERRIDE,117 }); -
futusign/trunk/public/screen/src/ducks/webs.js
r1649894 r1669808 4 4 import { ACTION_PREFIX } from '../strings'; 5 5 // API 6 import { get } from '../apis/webs';7 6 8 7 // REDUCER MOUNT POINT 9 8 const reducerMountPoint = 'webs'; 10 9 // ACTIONS 11 export const FETCH_WEBS_REQUEST = `${ACTION_PREFIX}FETCH_WEBS_REQUEST`;12 10 export const FETCH_WEBS_SUCCESS = `${ACTION_PREFIX}FETCH_WEBS_SUCCESS`; 13 export const RESET_WEBS = `${ACTION_PREFIX}RESET_WEBS`;14 11 // SCHEMA 15 const layerSchema = new Schema('webs');16 const websSchema = arrayOf( layerSchema);12 const webSchema = new Schema('webs'); 13 const websSchema = arrayOf(webSchema); 17 14 // REDUCERS 18 15 const byId = (state = {}, action) => { … … 24 21 }; 25 22 } 26 case RESET_WEBS: {27 return {};28 }29 23 default: 30 24 return state; … … 35 29 case FETCH_WEBS_SUCCESS: 36 30 return action.response.result; 37 case RESET_WEBS:38 return [];39 default:40 return state;41 }42 };43 const isFetching = (state = false, action) => {44 switch (action.type) {45 case FETCH_WEBS_REQUEST:46 return true;47 case FETCH_WEBS_SUCCESS:48 return false;49 31 default: 50 32 return state; … … 54 36 byId, 55 37 ids, 56 isFetching,57 38 }); 58 39 // ACCESSORS AKA SELECTORS 59 export const getSlideDeck = (state, id) => state[reducerMountPoint].byId[id];60 40 const getWebsIds = state => state[reducerMountPoint].ids; 61 41 const getWebsById = state => state[reducerMountPoint].byId; … … 64 44 (websIds, websById) => websIds.map(id => websById[id]) 65 45 ); 66 export const getIsFetchingWebs = (state) => state[reducerMountPoint].isFetching; 67 // ACTION CREATOR VALIDATORS 68 // ACTION CREATORS 69 export const fetchWebs = (playlistIds) => (dispatch, getState) => { 70 if (!Array.isArray(playlistIds)) throw new Error(); 71 if (getIsFetchingWebs(getState())) throw new Error(); 72 dispatch({ 73 type: FETCH_WEBS_REQUEST, 74 }); 75 return get(playlistIds) 76 .then( 77 response => dispatch({ 78 type: FETCH_WEBS_SUCCESS, 79 response: normalize(response, websSchema), 80 }) 81 ); 82 }; 83 export const resetWebs = () => ({ 84 type: RESET_WEBS, 46 export const setWebs = response => ({ 47 type: FETCH_WEBS_SUCCESS, 48 response: normalize(response, websSchema), 85 49 }); -
futusign/trunk/public/screen/src/ducks/youtubeVideos.js
r1626880 r1669808 4 4 import { ACTION_PREFIX } from '../strings'; 5 5 // API 6 import { get } from '../apis/youtubeVideos';7 6 8 7 // REDUCER MOUNT POINT 9 8 const reducerMountPoint = 'youtubeVideos'; 10 9 // ACTIONS 11 export const FETCH_YOUTUBE_VIDEOS_REQUEST = `${ACTION_PREFIX}FETCH_YOUTUBE_VIDEOS_REQUEST`;12 10 export const FETCH_YOUTUBE_VIDEOS_SUCCESS = `${ACTION_PREFIX}FETCH_YOUTUBE_VIDEOS_SUCCESS`; 13 export const RESET_YOUTUBE_VIDEOS = `${ACTION_PREFIX}RESET_YOUTUBE_VIDEOS`;14 11 // SCHEMA 15 12 const youtubeVideoSchema = new Schema('youtubeVideos'); … … 24 21 }; 25 22 } 26 case RESET_YOUTUBE_VIDEOS: {27 return {};28 }29 23 default: 30 24 return state; … … 35 29 case FETCH_YOUTUBE_VIDEOS_SUCCESS: 36 30 return action.response.result; 37 case RESET_YOUTUBE_VIDEOS:38 return [];39 default:40 return state;41 }42 };43 const isFetching = (state = false, action) => {44 switch (action.type) {45 case FETCH_YOUTUBE_VIDEOS_REQUEST:46 return true;47 case FETCH_YOUTUBE_VIDEOS_SUCCESS:48 return false;49 31 default: 50 32 return state; … … 54 36 byId, 55 37 ids, 56 isFetching,57 38 }); 58 39 // ACCESSORS AKA SELECTORS 59 export const getSlideDeck = (state, id) => state[reducerMountPoint].byId[id];60 40 const getYoutubeVideosIds = state => state[reducerMountPoint].ids; 61 41 const getYoutubeVideosById = state => state[reducerMountPoint].byId; … … 64 44 (youtubeVideosIds, youtubeVideosById) => youtubeVideosIds.map(id => youtubeVideosById[id]) 65 45 ); 66 export const getIsFetchingYoutubeVideos = (state) => state[reducerMountPoint].isFetching; 67 // ACTION CREATOR VALIDATORS 68 // ACTION CREATORS 69 export const fetchYoutubeVideos = (playlistIds) => (dispatch, getState) => { 70 if (!Array.isArray(playlistIds)) throw new Error(); 71 if (getIsFetchingYoutubeVideos(getState())) throw new Error(); 72 dispatch({ 73 type: FETCH_YOUTUBE_VIDEOS_REQUEST, 74 }); 75 return get(playlistIds) 76 .then( 77 response => dispatch({ 78 type: FETCH_YOUTUBE_VIDEOS_SUCCESS, 79 response: normalize(response, youtubeVideosSchema), 80 }) 81 ); 82 }; 83 export const resetYoutubeVideos = () => ({ 84 type: RESET_YOUTUBE_VIDEOS, 46 export const setYoutubeVideos = response => ({ 47 type: FETCH_YOUTUBE_VIDEOS_SUCCESS, 48 response: normalize(response, youtubeVideosSchema), 85 49 }); -
futusign/trunk/public/screen/src/index.html
r1649894 r1669808 88 88 window.siteUrl = '/data/'; 89 89 window.publicPath = '/'; 90 window.screenId = 80;90 window.screenId = 0; 91 91 </script> 92 92 </body> -
futusign/trunk/public/screen/src/strings.js
r1665899 r1669808 3 3 export const SITE_URL = window.siteUrl; 4 4 export const SCREEN_ID = window.screenId; 5 export const SCREENS_API_ENDPOINT = 'fs-screens'; 6 export const SLIDE_DECKS_API_ENDPOINT = 'fs-slide-decks'; 7 export const MEDIA_DECKS_API_ENDPOINT = 'fs-media-decks'; 8 export const WEBS_API_ENDPOINT = 'fs-webs'; 9 export const YOUTUBE_VIDEOS_API_ENDPOINT = 'fs-youtube-videos'; 10 export const IMAGES_API_ENDPOINT = 'fs-images'; 11 export const LAYERS_API_ENDPOINT = 'fs-layers'; 12 export const MONITOR_API_ENDPOINT = 'fs-monitor'; 13 export const OVERLAYS_API_ENDPOINT = 'fs-overlays'; 14 export const OVERRIDES_API_ENDPOINT = 'fs-overrides'; 5 export const ENDPOINT_API_ENDPOINT = 'fs-endpoint'; 15 6 export const CACHE_INTERVAL = 60 * 60; 16 export const POLLING_INTERVAL = 60 * 60; 17 export const OV_WIDGETS_API_ENDPOINT = 'fs-ov-widgets'; 7 export const ERROR_POLLING_INTERVAL = 60; 18 8 // PLAYERS 19 9 export const TRANSITION = 'TRANSITION'; -
futusign/trunk/readme.txt
r1665899 r1669808 4 4 Requires at least: 4.3 5 5 Tested up to: 4.7 6 Stable tag: 2. 1.16 Stable tag: 2.2.0 7 7 License: GPLv2 or later 8 8 License URI: https://www.gnu.org/licenses/gpl.html … … 22 22 23 23 == Changelog == 24 25 = 2.2.0 = 26 27 Enhancement: Currently playing / layers summary on screens. 28 29 Enhancement: Screen polling cycle choice; default hour. 30 31 Enhancement: No longer dependent on ACF to Rest plugin. 32 33 Performance fix: Collapsed poll from 10+ polls to a single poll. 24 34 25 35 = 2.1.1 =
Note: See TracChangeset
for help on using the changeset viewer.