aboutsummaryrefslogtreecommitdiffstats
path: root/web/src/js/stores
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2014-09-16 00:05:06 +0200
committerMaximilian Hils <git@maximilianhils.com>2014-09-16 00:05:06 +0200
commitacdd182754625fabcfc2c6ed4bdad8a63bce8ad6 (patch)
treebd48b8c269790d31913a13ecac8969c9d6413f0e /web/src/js/stores
parent1d9b1f79a11feb57043be1d9d656f4c1638d3357 (diff)
downloadmitmproxy-acdd182754625fabcfc2c6ed4bdad8a63bce8ad6.tar.gz
mitmproxy-acdd182754625fabcfc2c6ed4bdad8a63bce8ad6.tar.bz2
mitmproxy-acdd182754625fabcfc2c6ed4bdad8a63bce8ad6.zip
web: implement EventLogStore
Diffstat (limited to 'web/src/js/stores')
-rw-r--r--web/src/js/stores/EventLogStore.es6.js79
-rw-r--r--web/src/js/stores/SettingsStore.es6.js23
-rw-r--r--web/src/js/stores/base.es6.js2
3 files changed, 54 insertions, 50 deletions
diff --git a/web/src/js/stores/EventLogStore.es6.js b/web/src/js/stores/EventLogStore.es6.js
index caa9d77d..55401690 100644
--- a/web/src/js/stores/EventLogStore.es6.js
+++ b/web/src/js/stores/EventLogStore.es6.js
@@ -1,17 +1,62 @@
-class _EventLogStore extends EventEmitter {
- constructor() {
- /*jshint validthis: true */
+class EventLogView extends EventEmitter {
+ constructor(store, live){
super();
+ this._store = store;
+ this.live = live;
this.log = [];
+
+ this.add = this.add.bind(this);
+
+ if(live){
+ this._store.addListener("new_entry", this.add);
+ }
+
+ }
+ close() {
+ this._store.removeListener("new_entry", this.add);
}
getAll() {
return this.log;
}
+
+ add(entry){
+ this.log.push(entry);
+ this.emit("change");
+ }
+ add_bulk(messages){
+ var log = messages;
+ var last_id = log[log.length-1].id;
+ var to_add = _.filter(this.log, entry => entry.id > last_id);
+ this.log = log.concat(to_add);
+ this.emit("change");
+ }
+}
+
+class _EventLogStore extends EventEmitter {
+ getView(since){
+ var view = new EventLogView(this, !since);
+
+ //TODO: Really do bulk retrieval of last messages.
+
+ window.setTimeout(function(){
+ view.add_bulk([
+ { id:1, message: "Hello World"},
+ { id:2, message: "I was already transmitted as an event."}
+ ]);
+ }, 100);
+
+ var id = 2;
+ view.add({id:id++, message: "I was already transmitted as an event."});
+ view.add({id:id++, message: "I was only transmitted as an event before the bulk was added.."});
+ window.setInterval(function(){
+ view.add({id: id++, message: "."});
+ }, 1000);
+ return view;
+ }
handle(action) {
switch (action.actionType) {
- case ActionTypes.LOG_ADD:
- this.log.push(action.message);
- this.emit("change");
+ case ActionTypes.EVENTLOG_ADD:
+ this.emit("new_message", action.message);
break;
default:
return;
@@ -19,24 +64,4 @@ class _EventLogStore extends EventEmitter {
}
}
var EventLogStore = new _EventLogStore();
-AppDispatcher.register(EventLogStore.handle.bind(EventLogStore));
-
-
-var EventLogMixin = {
- getInitialState(){
- return {
- log: EventLog.getAll()
- };
- },
- componentDidMount(){
- SettingsStore.addListener("change", this._onEventLogChange);
- },
- componentWillUnmount(){
- SettingsStore.removeListener("change", this._onEventLogChange);
- },
- _onEventLogChange(){
- this.setState({
- log: EventLog.getAll()
- });
- }
-}; \ No newline at end of file
+AppDispatcher.register(EventLogStore.handle.bind(EventLogStore)); \ No newline at end of file
diff --git a/web/src/js/stores/SettingsStore.es6.js b/web/src/js/stores/SettingsStore.es6.js
index 7f3a6837..dea4597c 100644
--- a/web/src/js/stores/SettingsStore.es6.js
+++ b/web/src/js/stores/SettingsStore.es6.js
@@ -1,10 +1,9 @@
class _SettingsStore extends EventEmitter {
constructor() {
- /*jshint validthis: true */
super();
this.settings = { version: "0.12", showEventLog: true }; //FIXME: Need to get that from somewhere.
}
- getSettings() {
+ getAll() {
return this.settings;
}
handle(action) {
@@ -20,23 +19,3 @@ class _SettingsStore extends EventEmitter {
}
var SettingsStore = new _SettingsStore();
AppDispatcher.register(SettingsStore.handle.bind(SettingsStore));
-
-
-var SettingsMixin = {
- getInitialState(){
- return {
- settings: SettingsStore.getSettings()
- };
- },
- componentDidMount(){
- SettingsStore.addListener("change", this._onSettingsChange);
- },
- componentWillUnmount(){
- SettingsStore.removeListener("change", this._onSettingsChange);
- },
- _onSettingsChange(){
- this.setState({
- settings: SettingsStore.getSettings()
- });
- }
-}; \ No newline at end of file
diff --git a/web/src/js/stores/base.es6.js b/web/src/js/stores/base.es6.js
index 9e9c69aa..d5d0c7ab 100644
--- a/web/src/js/stores/base.es6.js
+++ b/web/src/js/stores/base.es6.js
@@ -7,7 +7,7 @@ class EventEmitter {
return;
}
this.listeners[event].forEach(function(listener) {
- listener(event, this);
+ listener.apply(this, arguments);
}.bind(this));
}
addListener(event, f) {