huawei-wingle-4g
Version:
This is a module NodeJS allowing to drive Huawei Wingle 4G. This module can :
126 lines • 5.82 kB
JavaScript
;
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