| Index: lib/subscriptionClasses.js | 
| =================================================================== | 
| --- a/lib/subscriptionClasses.js | 
| +++ b/lib/subscriptionClasses.js | 
| @@ -174,61 +174,81 @@ | 
| if (url[0] != "~") | 
| return new DownloadableSubscription(url, null); | 
| return new SpecialSubscription(url); | 
| }; | 
| /** | 
| * Deserializes a subscription | 
| * | 
| - * @param {Object} obj | 
| + * @param {Map.<string,string>} map | 
| * map of serialized properties and their values | 
| * @return {Subscription} | 
| * subscription or null if the subscription couldn't be created | 
| */ | 
| -Subscription.fromObject = function(obj) | 
| +Subscription.fromMap = function(map) | 
| { | 
| let result; | 
| - if (obj.url[0] != "~") | 
| + | 
| + let url = map.get("url"); | 
| + let title = map.get("title"); | 
| + if (url[0] != "~") | 
| { | 
| // URL is valid - this is a downloadable subscription | 
| - result = new DownloadableSubscription(obj.url, obj.title); | 
| - if ("downloadStatus" in obj) | 
| - result._downloadStatus = obj.downloadStatus; | 
| - if ("lastSuccess" in obj) | 
| - result.lastSuccess = parseInt(obj.lastSuccess, 10) || 0; | 
| - if ("lastCheck" in obj) | 
| - result._lastCheck = parseInt(obj.lastCheck, 10) || 0; | 
| - if ("expires" in obj) | 
| - result.expires = parseInt(obj.expires, 10) || 0; | 
| - if ("softExpiration" in obj) | 
| - result.softExpiration = parseInt(obj.softExpiration, 10) || 0; | 
| - if ("errors" in obj) | 
| - result._errors = parseInt(obj.errors, 10) || 0; | 
| - if ("version" in obj) | 
| - result.version = parseInt(obj.version, 10) || 0; | 
| - if ("requiredVersion" in obj) | 
| - result.requiredVersion = obj.requiredVersion; | 
| - if ("homepage" in obj) | 
| - result._homepage = obj.homepage; | 
| - if ("lastDownload" in obj) | 
| - result._lastDownload = parseInt(obj.lastDownload, 10) || 0; | 
| - if ("downloadCount" in obj) | 
| - result.downloadCount = parseInt(obj.downloadCount, 10) || 0; | 
| + result = new DownloadableSubscription(url, title); | 
| + | 
| + let downloadStatus = map.get("downloadStatus"); | 
| + let lastSuccess = map.get("lastSuccess"); | 
| + let lastCheck = map.get("lastCheck"); | 
| + let expires = map.get("expires"); | 
| + let softExpiration = map.get("softExpiration"); | 
| + let errors = map.get("errors"); | 
| + let version = map.get("version"); | 
| + let requiredVersion = map.get("requiredVersion"); | 
| + let homepage = map.get("homepage"); | 
| + let lastDownload = map.get("lastDownload"); | 
| + let downloadCount = map.get("downloadCount"); | 
| + if (typeof downloadStatus != "undefined") | 
| + result._downloadStatus = downloadStatus; | 
| + if (typeof lastSuccess != "undefined") | 
| + result.lastSuccess = parseInt(lastSuccess, 10) || 0; | 
| + if (typeof lastCheck != "undefined") | 
| + result._lastCheck = parseInt(lastCheck, 10) || 0; | 
| + if (typeof expires != "undefined") | 
| + result.expires = parseInt(expires, 10) || 0; | 
| + if (typeof softExpiration != "undefined") | 
| + result.softExpiration = parseInt(softExpiration, 10) || 0; | 
| + if (typeof errors != "undefined") | 
| + result._errors = parseInt(errors, 10) || 0; | 
| + if (typeof version != "undefined") | 
| + result.version = parseInt(version, 10) || 0; | 
| + if (typeof requiredVersion != "undefined") | 
| + result.requiredVersion = requiredVersion; | 
| + if (typeof homepage != "undefined") | 
| + result._homepage = homepage; | 
| + if (typeof lastDownload != "undefined") | 
| + result._lastDownload = parseInt(lastDownload, 10) || 0; | 
| + if (typeof downloadCount != "undefined") | 
| + result.downloadCount = parseInt(downloadCount, 10) || 0; | 
| } | 
| else | 
| { | 
| - result = new SpecialSubscription(obj.url, obj.title); | 
| - if ("defaults" in obj) | 
| - result.defaults = obj.defaults.split(" "); | 
| + result = new SpecialSubscription(url, title); | 
| + | 
| + let defaults = map.get("defaults"); | 
| + if (typeof defaults != "undefined") | 
| + result.defaults = defaults.split(" "); | 
| } | 
| - if ("fixedTitle" in obj) | 
| - result._fixedTitle = (obj.fixedTitle == "true"); | 
| - if ("disabled" in obj) | 
| - result._disabled = (obj.disabled == "true"); | 
| + | 
| + let fixedTitle = map.get("fixedTitle"); | 
| + let disabled = map.get("disabled"); | 
| + if (typeof fixedTitle != "undefined") | 
| + result._fixedTitle = (fixedTitle == "true"); | 
| + if (typeof disabled != "undefined") | 
| + result._disabled = (disabled == "true"); | 
| return result; | 
| }; | 
| /** | 
| * Class for special filter subscriptions (user's filters) | 
| * @param {string} url see Subscription() | 
| * @param {string} [title] see Subscription() |