Skip to content

Commit

Permalink
resetListenTimeout и autoResetTimeout
Browse files Browse the repository at this point in the history
  • Loading branch information
egorprnn committed Nov 14, 2020
1 parent 69c0b89 commit 420b410
Show file tree
Hide file tree
Showing 8 changed files with 113 additions and 20 deletions.
9 changes: 5 additions & 4 deletions docs/events.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@ builder.on("page_update", (page) => {

### Listen

| Событие | Передаваемые данные | Описание |
| -------------- | ------------------- | ----------------------- |
| `listen_stop` | | Остановка прослушивание |
| `listen_start` | | Начало прослушивания |
| Событие | Передаваемые данные | Описание |
| ---------------------- | ------------------- | ------------------------------------ |
| `listen_stop` | | Остановка прослушивание |
| `listen_start` | | Начало прослушивания |
| `listen_reset_timeout` | | Сброс времени прослушивания страницы |

### Triggers

Expand Down
18 changes: 18 additions & 0 deletions docs/listen.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
<dt><a href="#setListenTime">setListenTime(time)</a> ⇒ <code>this</code>;</dt>
<dd><p>Метод для установки времени прослушивания обновлений для переключения страниц</p></dd>

<dt><a href="#resetListenTimeout">resetListenTimeout();</a></dt>
<dd><p>Метод для сброса текущего таймера прослушивания</p></dd>

<dt><a href="#setListenUsers">setListenUsers(users)</a> ⇒ <code>this</code>;</dt>
<dd><p>Метод для установки прослушивания определенных пользователей</p></dd>

Expand All @@ -27,9 +30,24 @@
**Пример**:

```js
const builder = context.pageBuilder();

builder.setListenTime(40000);
```

<a name="setListenTime"></a>

## setListenTime(time) ⇒ <code>this</code>;
Метод для сброса текущего таймера прослушивания

**Пример**:

```js
const builder = context.pageBuilder();

builder.resetListenTimeout();
```

<a name="setListenUsers"></a>

## setListenUsers(users) ⇒ <code>this</code>;
Expand Down
22 changes: 22 additions & 0 deletions docs/pages.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
<dt><a href="#setPage">setPage(pageNumber)</a> ⇒ <code>Promise</code>;</dt>
<dd><p>Метод для открытия определенной страницы</p></dd>

<dt><a href="#autoResetTimeout">autoResetTimeout(status)</a> ⇒ <code>this</code>;</dt>
<dd><p>Метод для установки автоматического сброса таймера при переключении между страницами</p></dd>

<dt><a href="#setPageNumberFormat">setPageNumberFormat(format)</a> ⇒ <code>this</code>;</dt>
<dd><p>Метод для установки формата нумерования страниц</p></dd>

Expand Down Expand Up @@ -94,6 +97,25 @@ builder.build()
.setPage(2);
```

<a name="autoResetTimeout"></a>

## autoResetTimeout(status) ⇒ <code>this</code>;
Метод для установки автоматического сброса таймера при переключении между страницами

**Возвращает**: `this` - Текущий контекст билдера

| Параметры | Тип | По умолчанию | Описание |
| --------- | --------- | ------------- | --------------------------------------- |
| status | `boolean` | `true` | Значение автоматического сброса таймера |

**Пример**:

```js
const builder = context.pageBuilder();

builder.autoResetTimeout();
```

<a name="setPageNumberFormat"></a>

## setPageNumberFormat(format) ⇒ <code>this</code>;
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "vk-io-pages",
"version": "1.1.1",
"version": "1.2.0",
"description": "Модуль vk-io для создания динамических страниц",
"main": "./lib/PagesManager.js",
"exports": {
Expand Down
76 changes: 64 additions & 12 deletions src/PageBuilder.mjs → src/PagesBuilder.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,14 @@ export class PagesBuilder extends EventEmitter {
this.pages = [];
this.currentPage = 1;
this.infinityLoop = true;
this.resetTimeout = false;
this.pageNumberFormat = "%c / %m";
this.sendMethod = "send_new";

this.listenTime = 5 * 60 * 1000; // 5 минут
this._listenTimeout = null;
this.listenUsers = [];
this.sendMethod = "send_new";

this.triggers = null;

this.sentContext = null;
Expand Down Expand Up @@ -74,11 +78,31 @@ export class PagesBuilder extends EventEmitter {
async setPage(pageNumber) {
this.currentPage = pageNumber;

if (this.resetTimeout) {
this.resetListenTimeout();
}

this._saveContext();

const page = await this._getPage(pageNumber);

this.emit("page_set", pageNumber);

return new ContextUtils(this)._editMessage(page);
return new ContextUtils(this)
._editMessage(page);
}

/**
* @description Метод для установки автоматического сброса таймера при переключении между страницами
* @param {boolean} status=true - Значение автоматического сброса таймера
* @return this
*/
autoResetTimeout(status = true) {
this.resetTimeout = status;

this._saveContext();

return this;
}

/**
Expand Down Expand Up @@ -114,6 +138,9 @@ export class PagesBuilder extends EventEmitter {
return this;
}

/**
* @private
*/
async _getPage(page = null) {
page = page ?? this.currentPage;

Expand Down Expand Up @@ -150,9 +177,22 @@ export class PagesBuilder extends EventEmitter {
return this;
}

/**
* @description Метод для сброса текущего таймера прослушивания
*/
resetListenTimeout() {
clearTimeout(this._listenTimeout);

this._listenTimeout = setTimeout(this.stopListen.bind(this), this.listenTime);

this._saveContext();

this.emit("listen_reset_timeout");
}

/**
* @description Метод для установки прослушивания определенных пользователей
* @param {[number]|number} users=[] - Пользватели для прослушивания
* @param {[number]|number} users=[] - Пользователи для прослушивания
* @return this
*/
setListenUsers(users = []) {
Expand Down Expand Up @@ -180,16 +220,18 @@ export class PagesBuilder extends EventEmitter {
* @description Метод для досрочной остановки прослушивания новых сообщений
*/
async stopListen() {
clearTimeout(this._listenTimeout);
pagesStorage.delete(this.id);

const page = await this._getPage(this.currentPage);

this.emit("listen_stop", this.currentPage);

new ContextUtils(this)._editMessage({
...page,
keyboard: JSON.stringify({})
}, "stop");
const page = await this._getPage(this.currentPage);

new ContextUtils(this)
._editMessage({
...page,
keyboard: JSON.stringify({})
}, "stop");
}

/**
Expand Down Expand Up @@ -288,6 +330,9 @@ export class PagesBuilder extends EventEmitter {
return this;
}

/**
* @private
*/
_executeTrigger(trigger) {
trigger = this.triggers.get(trigger);

Expand Down Expand Up @@ -321,18 +366,24 @@ export class PagesBuilder extends EventEmitter {

this.emit("listen_start");

setTimeout(this.stopListen.bind(this), this.listenTime);
this.resetListenTimeout();

resolve(this);
})
.catch(reject);
});
}

/**
* @private
*/
_saveContext() {
pagesStorage.set(this.id, this);
}

/**
* @private
*/
_executeAction(action) {
this.emit("page_action_execute", action);

Expand Down Expand Up @@ -391,6 +442,9 @@ export class PagesBuilder extends EventEmitter {
}
}

/**
* @private
*/
_messageMiddleware(context) {
this._context = context;

Expand Down Expand Up @@ -428,7 +482,5 @@ export class PagesBuilder extends EventEmitter {
this._executeTrigger(trigger);
}
}

this._saveContext();
}
}
2 changes: 1 addition & 1 deletion src/PagesManager.mjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import VKIO from "vk-io";

import { PagesBuilder, pagesStorage } from "./PageBuilder";
import { PagesBuilder, pagesStorage } from "./PagesBuilder";

const { API } = VKIO;

Expand Down
2 changes: 1 addition & 1 deletion test/externalTest.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { PagesBuilder, pagesStorage } from "../src/PageBuilder.mjs";
import { PagesBuilder, pagesStorage } from "../src/PagesBuilder.mjs";
import { test } from "./tests.mjs";

test(PagesBuilder, pagesStorage, "ESM");

0 comments on commit 420b410

Please sign in to comment.