remove the JsonWrapper class

Let's follow the Google Style Guide, in which private variables are
simply suffixed with "_". It's a sign, not a cop, but that's fine.
I'd rather keep things simple, and code review should suffice for
catching uses of a private variable outside the class.
This commit is contained in:
Scott Lamb 2020-02-22 21:13:52 -08:00
parent a26c3d1649
commit 3fa48ab0da
5 changed files with 28 additions and 115 deletions

View File

@ -30,20 +30,19 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
import JsonWrapper from './JsonWrapper';
import Stream from './Stream'; import Stream from './Stream';
/** /**
* Camera JSON wrapper. * Camera JSON wrapper.
*/ */
export default class Camera extends JsonWrapper { export default class Camera {
/** /**
* Construct from JSON. * Construct from JSON.
* *
* @param {JSON} cameraJson JSON for single camera. * @param {JSON} cameraJson JSON for single camera.
*/ */
constructor(cameraJson) { constructor(cameraJson) {
super(cameraJson); this.json_ = cameraJson;
this.streams_ = {}; this.streams_ = {};
Object.keys(cameraJson.streams).forEach((streamType) => { Object.keys(cameraJson.streams).forEach((streamType) => {
this.streams_[streamType] = new Stream(cameraJson.streams[streamType]); this.streams_[streamType] = new Stream(cameraJson.streams[streamType]);
@ -52,17 +51,17 @@ export default class Camera extends JsonWrapper {
/** @return {String} */ /** @return {String} */
get uuid() { get uuid() {
return this.json.uuid; return this.json_.uuid;
} }
/** @return {String} */ /** @return {String} */
get shortName() { get shortName() {
return this.json.shortName; return this.json_.shortName;
} }
/** @return {String} */ /** @return {String} */
get description() { get description() {
return this.json.description; return this.json_.description;
} }
/** @return {Object.<string, Stream>} */ /** @return {Object.<string, Stream>} */

View File

@ -1,80 +0,0 @@
// vim: set et sw=2 ts=2:
//
// This file is part of Moonfire NVR, a security camera digital video recorder.
// Copyright (C) 2018 Dolf Starreveld <dolf@starreveld.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// In addition, as a special exception, the copyright holders give
// permission to link the code of portions of this program with the
// OpenSSL library under certain conditions as described in each
// individual source file, and distribute linked combinations including
// the two.
//
// You must obey the GNU General Public License in all respects for all
// of the code used other than OpenSSL. If you modify file(s) with this
// exception, you may extend this exception to your version of the
// file(s), but you are not obligated to do so. If you do not wish to do
// so, delete this exception statement from your version. If you delete
// this exception statement from all source files in the program, then
// also delete it here.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
/**
* WeakMap that keeps our private data.
*
* @type {WeakMap}
*/
let _json = new WeakMap();
/**
* Class to encapsulate recording JSON data.
* *
* The JSON is kept internally, but in a manner that does not allow direct
* access. If access is needed, use the "json()" method. Sub-classes for
* specific models shoudl provide the necessary getters instead.
*/
export default class JsonWrapper {
/**
* Accept JSON data to be encapsulated
*
* @param {object} jsonData JSON data
*/
constructor(jsonData) {
_json.set(this, jsonData);
}
/**
* Get associated JSON object.
*
* Use of this should be avoided. Use functions to access the
* data instead.
*
* @return {object} The JSON object.
*/
get json() {
return _json.get(this);
}
/**
* @override
* @return {String} String version
*/
toString() {
if (process.env.NODE_ENV === 'development') {
return this.json.toString();
} else {
return super.toString();
}
}
}

View File

@ -30,45 +30,44 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
import JsonWrapper from './JsonWrapper';
import Range90k from '../models/Range90k'; import Range90k from '../models/Range90k';
/** /**
* Class to encapsulate recording JSON data. * Class to encapsulate recording JSON data.
*/ */
export default class Recording extends JsonWrapper { export default class Recording {
/** /**
* Accept JSON data to be encapsulated * Accept JSON data to be encapsulated
* *
* @param {object} recordingJson JSON for a recording * @param {object} recordingJson JSON for a recording
*/ */
constructor(recordingJson) { constructor(recordingJson) {
super(recordingJson); this.json_ = recordingJson;
} }
/** @return {Number} */ /** @return {Number} */
get startId() { get startId() {
return this.json.startId; return this.json_.startId;
} }
/** @return {Number} */ /** @return {Number} */
get endId() { get endId() {
return this.json.endId; return this.json_.endId;
} }
/** @return {Number} */ /** @return {Number} */
get openId() { get openId() {
return this.json.openId; return this.json_.openId;
} }
/** @return {Number} or undefined */ /** @return {Number} or undefined */
get firstUncommitted() { get firstUncommitted() {
return this.json.firstUncommitted; return this.json_.firstUncommitted;
} }
/** @return {Boolean} or undefined */ /** @return {Boolean} or undefined */
get growing() { get growing() {
return this.json.growing; return this.json_.growing;
} }
/** /**
@ -76,7 +75,7 @@ export default class Recording extends JsonWrapper {
* @return {Number} Time in units of 90k parts of a second * @return {Number} Time in units of 90k parts of a second
*/ */
get startTime90k() { get startTime90k() {
return this.json.startTime90k; return this.json_.startTime90k;
} }
/** /**
@ -84,7 +83,7 @@ export default class Recording extends JsonWrapper {
* @return {Number} Time in units of 90k parts of a second * @return {Number} Time in units of 90k parts of a second
*/ */
get endTime90k() { get endTime90k() {
return this.json.endTime90k; return this.json_.endTime90k;
} }
/** /**
@ -92,8 +91,7 @@ export default class Recording extends JsonWrapper {
* @return {Number} Time in units of 90k parts of a second * @return {Number} Time in units of 90k parts of a second
*/ */
get duration90k() { get duration90k() {
const data = this.json; return this.json_.endTime90k - this.json_.startTime90k;
return data.endTime90k - data.startTime90k;
} }
/** /**
@ -121,7 +119,7 @@ export default class Recording extends JsonWrapper {
* @return {Number} Total bytes used * @return {Number} Total bytes used
*/ */
get sampleFileBytes() { get sampleFileBytes() {
return this.json.sampleFileBytes; return this.json_.sampleFileBytes;
} }
/** /**
@ -130,7 +128,7 @@ export default class Recording extends JsonWrapper {
* @return {Number} Total bytes used * @return {Number} Total bytes used
*/ */
get frameCount() { get frameCount() {
return this.json.videoSamples; return this.json_.videoSamples;
} }
/** /**
@ -139,7 +137,7 @@ export default class Recording extends JsonWrapper {
* @return {String} Hash * @return {String} Hash
*/ */
get videoSampleEntryHash() { get videoSampleEntryHash() {
return this.json.videoSampleEntrySha1; return this.json_.videoSampleEntrySha1;
} }
/** /**
@ -148,7 +146,7 @@ export default class Recording extends JsonWrapper {
* @return {Number} Width in pixels * @return {Number} Width in pixels
*/ */
get videoSampleEntryWidth() { get videoSampleEntryWidth() {
return this.json.videoSampleEntryWidth; return this.json_.videoSampleEntryWidth;
} }
/** /**
@ -157,6 +155,6 @@ export default class Recording extends JsonWrapper {
* @return {Number} Height in pixels * @return {Number} Height in pixels
*/ */
get videoSampleEntryHeight() { get videoSampleEntryHeight() {
return this.json.videoSampleEntryHeight; return this.json_.videoSampleEntryHeight;
} }
} }

View File

@ -30,20 +30,19 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
import JsonWrapper from './JsonWrapper';
import Range90k from './Range90k'; import Range90k from './Range90k';
/** /**
* Stream JSON wrapper. * Stream JSON wrapper.
*/ */
export default class Stream extends JsonWrapper { export default class Stream {
/** /**
* Construct from JSON. * Construct from JSON.
* *
* @param {JSON} streamJson JSON for single stream. * @param {JSON} streamJson JSON for single stream.
*/ */
constructor(streamJson) { constructor(streamJson) {
super(streamJson); this.json_ = streamJson;
} }
/** /**
@ -53,7 +52,7 @@ export default class Stream extends JsonWrapper {
* @return {Number} Amount in bytes * @return {Number} Amount in bytes
*/ */
get retainBytes() { get retainBytes() {
return this.json.retainBytes; return this.json_.retainBytes;
} }
/** /**
@ -66,9 +65,9 @@ export default class Stream extends JsonWrapper {
*/ */
get range90k() { get range90k() {
return new Range90k( return new Range90k(
this.json.minStartTime90k, this.json_.minStartTime90k,
this.json.maxEndTime90k, this.json_.maxEndTime90k,
this.json.totalDuration90k this.json_.totalDuration90k
); );
} }
@ -79,7 +78,7 @@ export default class Stream extends JsonWrapper {
* @return {Number} Amount in bytes * @return {Number} Amount in bytes
*/ */
get totalSampleFileBytes() { get totalSampleFileBytes() {
return this.json.totalSampleFileBytes; return this.json_.totalSampleFileBytes;
} }
/** /**
@ -95,7 +94,7 @@ export default class Stream extends JsonWrapper {
*/ */
get days() { get days() {
return new Map( return new Map(
Object.entries(this.json.days).map(function(t) { Object.entries(this.json_.days).map(function(t) {
let [k, v] = t; let [k, v] = t;
v = new Range90k(v.startTime90k, v.endTime90k, v.totalDuration90k); v = new Range90k(v.startTime90k, v.endTime90k, v.totalDuration90k);
return [k, v]; return [k, v];

View File

@ -81,9 +81,6 @@ module.exports = (env, args) => {
], ],
}, },
plugins: [ plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(args.mode),
}),
new webpack.IgnorePlugin(/\.\/locale$/), new webpack.IgnorePlugin(/\.\/locale$/),
new HtmlWebpackPlugin({ new HtmlWebpackPlugin({
title: nvrSettings.app_title, title: nvrSettings.app_title,