| // 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. |
| |
| import 'dart:async'; |
| import 'dart:math'; |
| |
| import '../models/all.dart' as model; |
| import '../stores/store.dart'; |
| import '../utils/uuid.dart' as uuidutil; |
| import '../utils/asset.dart' as assetutil; |
| |
| import 'loader.dart'; |
| |
| // DemoLoader loads some sample decks and slides and randomly adds/removes |
| // decks based on a timer. |
| class DemoLoader implements Loader { |
| final Store _store; |
| final Random _rand; |
| |
| DemoLoader() |
| : _store = new Store.singleton(), |
| _rand = new Random(); |
| |
| static final List<String> thumbnails = [ |
| 'assets/images/sample_decks/baku/thumb.png', |
| 'assets/images/sample_decks/vanadium/thumb.png', |
| 'assets/images/sample_decks/pitch/thumb.png' |
| ]; |
| static final List<String> slides = [ |
| 'assets/images/sample_decks/vanadium/1.jpg', |
| 'assets/images/sample_decks/vanadium/2.jpg', |
| 'assets/images/sample_decks/vanadium/3.jpg', |
| 'assets/images/sample_decks/vanadium/4.jpg', |
| 'assets/images/sample_decks/vanadium/5.jpg', |
| 'assets/images/sample_decks/vanadium/6.jpg' |
| ]; |
| static final List<String> firstWords = [ |
| 'Today\'s', |
| 'Yesterday\'s', |
| 'Ali\'s', |
| 'Adam\'s', |
| 'Misha\'s' |
| ]; |
| static final List<String> secondWords = [ |
| 'Presentation', |
| 'Slideshow', |
| 'Meeting', |
| 'Pitch', |
| 'Discussion', |
| 'Demo', |
| 'All Hands' |
| ]; |
| |
| static const int maxNumSlides = 20; |
| |
| Future<model.Deck> _getRandomDeck() async { |
| var thumbnail = await assetutil |
| .getRawBytes(thumbnails[_rand.nextInt(thumbnails.length)]); |
| var firstWord = firstWords[_rand.nextInt(firstWords.length)]; |
| var secondWord = secondWords[_rand.nextInt(secondWords.length)]; |
| return new model.Deck( |
| uuidutil.createUuid(), '$firstWord $secondWord', thumbnail); |
| } |
| |
| Stream<model.Slide> _getRandomSlides() async* { |
| var numSlides = _rand.nextInt(maxNumSlides); |
| for (var i = 0; i < numSlides; i++) { |
| var slideIndex = i % slides.length; |
| yield new model.Slide(await assetutil.getRawBytes( |
| 'assets/images/sample_decks/vanadium/${slideIndex + 1}.jpg')); |
| } |
| } |
| |
| Future addDeck() async { |
| var deck = await _getRandomDeck(); |
| List<model.Slide> slides = await _getRandomSlides().toList(); |
| await _store.addDeck(deck); |
| await _store.setSlides(deck.key, slides); |
| } |
| } |