UNPKG

huawei-wingle-4g

Version:

This is a module NodeJS allowing to drive Huawei Wingle 4G. This module can :

126 lines 5.82 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const log4js_1 = __importDefault(require("log4js")); const StringUtils_1 = require("../../utils/StringUtils"); const ElemenUtils_1 = __importDefault(require("../../utils/ElemenUtils")); const Sms_1 = require("../../model/sms/Sms"); const SMS_COUNT_PER_PAGE = 20; class default_1 { constructor(login, summaryExtractor) { this.login = login; this.connection = login.getConnnection(); this.summaryExtractor = summaryExtractor; this.logger = log4js_1.default.getLogger(StringUtils_1.substringAfter(__filename, 'huawei-wingle-4g')); } activeLog(activeLog) { this.logger.level = activeLog ? 'debug' : 'OFF'; this.login.activeLog(true); this.summaryExtractor.activeLog(true); } getSmsList(type) { return __awaiter(this, void 0, void 0, function* () { const totalPageSms = yield this.getTotalPageSms(type); const listSms = []; for (let page = 1; page <= totalPageSms; page++) { const currentSmsList = yield this.getSmsListPerPage(type, page); currentSmsList.forEach(currentSms => listSms.push(currentSms)); } return listSms; }); } getTotalPageSms(type) { return __awaiter(this, void 0, void 0, function* () { const summary = yield this.summaryExtractor.getSummary(); let total; switch (type) { case Sms_1.Type.INBOX: total = summary.inbox.total; break; case Sms_1.Type.OUTBOX: total = summary.outbox; break; case Sms_1.Type.DRAFT: total = summary.draft; break; default: throw new Error(`Unable to determinate total sms from type : ${type}`); } const totalPageSms = Math.ceil(total / SMS_COUNT_PER_PAGE); this.logger.debug(`Total page SMS : ${totalPageSms}`); return totalPageSms; }); } getSmsListPerPage(type, page) { return __awaiter(this, void 0, void 0, function* () { const parameters = this.buildParameters(type, page); const response = yield this.connection.post('/api/sms/sms-list', parameters); const smsElements = response.document.querySelectorAll('Message'); const inboxSms = []; if (smsElements && smsElements.length) { smsElements.forEach(smsElement => { const id = ElemenUtils_1.default(smsElement, 'Index', 'ID SMS', this.logger); const state = this.getSmsState(smsElement); const phoneNumber = ElemenUtils_1.default(smsElement, 'Phone', 'Phone number', this.logger); const content = ElemenUtils_1.default(smsElement, 'Content', 'Content SMS', this.logger); const date = this.getDateSms(smsElement); inboxSms.push({ id, state, phoneNumber, content, date }); }); } return inboxSms; }); } buildParameters(type, page) { let boxType; switch (type) { case Sms_1.Type.INBOX: boxType = 1; break; case Sms_1.Type.OUTBOX: boxType = 2; break; case Sms_1.Type.DRAFT: boxType = 3; break; default: throw new Error(`Unable to determinate box type from : ${type}`); } return `<?xml version: "1.0" encoding="UTF-8"?><request><PageIndex>${page}</PageIndex><ReadCount>${SMS_COUNT_PER_PAGE}</ReadCount><BoxType>${boxType}</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>0</UnreadPreferred></request>`; } getSmsState(smsElement) { const rawState = ElemenUtils_1.default(smsElement, 'Smstat', 'Raw state SMS', this.logger); switch (rawState) { case '0': return Sms_1.State.UNREAD; case '1': return Sms_1.State.READ; case '2': return Sms_1.State.DRAFT; case '3': return Sms_1.State.SENT; default: throw new Error(`Unable to determinate state SMS from : ${rawState}`); } } getDateSms(smsElement) { const rawDate = ElemenUtils_1.default(smsElement, 'Date', 'Raw date SMS', this.logger); const matcher = /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/.exec(rawDate); if (matcher) { return +new Date(`${matcher[1]}-${matcher[2]}-${matcher[3]}T${matcher[4]}:${matcher[5]}:${matcher[6]}.000Z`); } throw new Error(`Unable to extract date from : ${rawDate}`); } } exports.default = default_1; //# sourceMappingURL=InboxSmsExtractor.js.map