blob: 5867b403d1933eca8e38a3384a375930c8b309ab [file] [log] [blame]
// 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.
var debug = require('debug')('reader:device-sets');
var device = require('../device');
var deviceSet = require('../device-set');
var format = require('format');
var hg = require('mercury');
var window = require('global/window');
module.exports = {
render: require('./render'),
state: state
};
function state(options) {
options = options || {};
debug('init: %o', options);
var atom = hg.state({
error: hg.value(null),
current: hg.value(null),
collection: hg.varhash(options.collection || {}, deviceSet.state),
channels: {
add: add,
remove: remove
}
});
return atom;
}
function add(state, data) {
if (! data.blob) {
return;
}
var blob = data.blob;
debug('adding new device set for file: %o', blob);
if (blob.type !== 'application/pdf') {
var message = format('The file "%s" is not a PDF.', blob.name);
var err = new Error(message);
return state.error.set(err);
}
var ds = deviceSet.state({
file: { blob: data.blob }
});
var d = device.state({
type: 'Browser',
current: true,
arch: window.navigator.platform,
screen: {
width: window.innerWidth,
height: window.innerHeight,
}
});
ds.devices.put(d.id(), d);
state.collection.put(ds.id(), ds);
}
function remove(state, data) {
state.collection.delete(data.id);
}