diff --git a/dev/Knoin/AbstractModel.js b/dev/Knoin/AbstractModel.js index 092466e00..668a2f41f 100644 --- a/dev/Knoin/AbstractModel.js +++ b/dev/Knoin/AbstractModel.js @@ -26,7 +26,7 @@ export class AbstractModel { throw new Error("Can't instantiate AbstractModel!"); } */ - this.disposables = []; + Object.defineProperty(this, 'disposables', {value: []}); } addObservables(observables) { diff --git a/dev/Sieve/Model/Abstract.js b/dev/Sieve/Model/Abstract.js index 70447413a..84c534ee0 100644 --- a/dev/Sieve/Model/Abstract.js +++ b/dev/Sieve/Model/Abstract.js @@ -25,7 +25,7 @@ export class AbstractModel { throw new Error("Can't instantiate AbstractModel!"); } */ - this.disposables = []; + Object.defineProperty(this, 'disposables', {value: []}); } addObservables(observables) { diff --git a/dev/Sieve/Model/Filter.js b/dev/Sieve/Model/Filter.js index 016400a21..8b13b7262 100644 --- a/dev/Sieve/Model/Filter.js +++ b/dev/Sieve/Model/Filter.js @@ -188,6 +188,24 @@ export class FilterModel extends AbstractModel { this.conditions.remove(oConditionToDelete); } + toJSON() { + return { + ID: this.id, + Enabled: this.enabled(), + Name: this.name(), + Conditions: this.conditions(), + ConditionsType: this.conditionsType(), + ActionType: this.actionType(), + ActionValue: this.actionValue(), + ActionValueSecond: this.actionValueSecond(), + ActionValueThird: this.actionValueThird(), + ActionValueFourth: this.actionValueFourth(), + Keep: this.keep(), + Stop: this.stop(), + MarkAsRead: this.markAsRead() + }; + } + /** * @static * @param {FetchJsonFilter} json @@ -200,7 +218,10 @@ export class FilterModel extends AbstractModel { if (filter) { filter.id = '' + (filter.id || ''); filter.conditions( - (json.Conditions || []).map(aData => FilterConditionModel.reviveFromJson(aData)).filter(v => v) + (json.Conditions || json.conditions || []).map(condition => { + condition['@Object'] = 'Object/FilterCondition'; + return FilterConditionModel.reviveFromJson(condition) + }).filter(v => v) ); } return filter; diff --git a/dev/Sieve/Model/FilterCondition.js b/dev/Sieve/Model/FilterCondition.js index 0313a9736..e068214b0 100644 --- a/dev/Sieve/Model/FilterCondition.js +++ b/dev/Sieve/Model/FilterCondition.js @@ -79,6 +79,15 @@ export class FilterConditionModel extends AbstractModel { return true; } + toJSON() { + return { + Field: this.field(), + Type: this.type(), + Value: this.value(), + ValueSecond: this.valueSecond() + }; + } + // static reviveFromJson(json) {} cloneSelf() { diff --git a/dev/Sieve/Model/Script.js b/dev/Sieve/Model/Script.js index 7d1f4faa1..d9182dd98 100644 --- a/dev/Sieve/Model/Script.js +++ b/dev/Sieve/Model/Script.js @@ -228,7 +228,7 @@ function filtersToSieveScript(filters) } // fileStringToCollection -function sieveScriptToFilters(script) +function rainloopScriptToFilters(script) { let regex = /BEGIN:HEADER([\s\S]+?)END:HEADER/gm, filters = [], @@ -239,7 +239,6 @@ function sieveScriptToFilters(script) json = decodeURIComponent(escape(atob(json[1].replace(/\s+/g, '')))); if (json && json.length && (json = JSON.parse(json))) { json['@Object'] = 'Object/Filter'; - json.Conditions.forEach(condition => condition['@Object'] = 'Object/FilterCondition'); filter = FilterModel.reviveFromJson(json); filter && filters.push(filter); } @@ -279,11 +278,6 @@ export class SieveScriptModel extends AbstractModel // this.body(filtersToSieveScript(this.filters)); } - rawToFilters() { - return sieveScriptToFilters(this.body()); -// this.filters(sieveScriptToFilters(this.body())); - } - verify() { this.nameError(!this.name()); return !this.nameError(); @@ -314,7 +308,7 @@ export class SieveScriptModel extends AbstractModel const script = super.reviveFromJson(json); if (script) { if (script.allowFilters()) { - script.filters(sieveScriptToFilters(script.body())); + script.filters(rainloopScriptToFilters(script.body())); } script.exists(true); script.hasChanges(false);