var filter = { 'title': [], 'size': { 'min': null, 'max': null } } function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } function size2Bytes(size) { var m = (size + '').match(/([\d\.]+)\s*([tgmk])?b\b/i), s = {'t': Math.pow(1024, 4), 'g': Math.pow(1024, 3), 'm': Math.pow(1024, 2), 'k': 1024, '': 1}; if (m) return Math.ceil(m[1] * s[m[2].toLowerCase()]); else return null; } function parseTitle(title) { var m = title.match(/^(.*?)([\d\.]+\s*[tgmk]?b\b)/i); if (m) return {'title': m[1], 'size': m[2]}; else return {'title': title, 'size': null}; } function filterMessage() { var m = parseTitle(msg.title), r = new RegExp(filter.title.map(function(el) { return escapeRegExp(el); }).join('.*'), 'i'), s = size2Bytes(m.size); if (r.test(m.title)) { var passed = true; if (filter.size.min != null) { passed = s != null && s >= size2Bytes(filter.size.min); } if (filter.size.max != null && passed) { passed = s != null && s <= size2Bytes(filter.size.max); } if (passed) { msg.isImportant = true; return MessageObject.Accept; } else { return MessageObject.Ignore; } } else { return MessageObject.Ignore; } } |