Опрос списка тикетов для has_unread; настройка tickets_poll_ms
This commit is contained in:
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
<name>f7support</name>
|
<name>f7support</name>
|
||||||
<summary>Support ticket client for F7cloud (F7cloud-compatible)</summary>
|
<summary>Support ticket client for F7cloud (F7cloud-compatible)</summary>
|
||||||
<description>f7support client app for creating and viewing support tickets.</description>
|
<description>f7support client app for creating and viewing support tickets.</description>
|
||||||
<version>0.1.3</version>
|
<version>0.1.6</version>
|
||||||
<licence>AGPL</licence>
|
<licence>AGPL</licence>
|
||||||
<author>f7support team</author>
|
<author>f7support team</author>
|
||||||
<namespace>F7Support</namespace>
|
<namespace>F7Support</namespace>
|
||||||
|
|||||||
+9
-5
@@ -8,11 +8,14 @@
|
|||||||
const supportWsBaseOverride = (root.dataset.supportWsBase || "").trim();
|
const supportWsBaseOverride = (root.dataset.supportWsBase || "").trim();
|
||||||
/** Включается в NC: `occ config:app:set f7support client_read_receipts --value=1` после выката API `POST .../read`. */
|
/** Включается в NC: `occ config:app:set f7support client_read_receipts --value=1` после выката API `POST .../read`. */
|
||||||
const clientReadReceiptsEnabled = root.dataset.clientReadReceipts === "1";
|
const clientReadReceiptsEnabled = root.dataset.clientReadReceipts === "1";
|
||||||
const ticketsPollIntervalMs = (() => {
|
const ticketsPollMsRaw = parseInt(
|
||||||
const n = parseInt(String(root.dataset.messagesPollMs || "3000"), 10);
|
String(root.dataset.ticketsPollMs || root.dataset.messagesPollMs || "").trim(),
|
||||||
if (!Number.isFinite(n)) return 3000;
|
10
|
||||||
return Math.min(120000, Math.max(3000, n));
|
);
|
||||||
})();
|
const ticketsPollMsParsed = Number.isFinite(ticketsPollMsRaw) && ticketsPollMsRaw >= 0 ? ticketsPollMsRaw : 3000;
|
||||||
|
/** Интервал опроса GET /api/client/tickets (мс). 0 — выключить. Иначе 3000…120000. WebSocket только у открытого тикета; без опроса зелёная точка по другим тикетам не обновится. Устаревшее имя: data-messages-poll-ms. */
|
||||||
|
const ticketsPollIntervalMs =
|
||||||
|
ticketsPollMsParsed === 0 ? 0 : Math.min(120000, Math.max(3000, ticketsPollMsParsed));
|
||||||
|
|
||||||
const RASTER_IMAGE_EXT = new Set(["jpg", "jpeg", "png", "gif", "webp", "bmp", "tif", "tiff", "heic", "heif"]);
|
const RASTER_IMAGE_EXT = new Set(["jpg", "jpeg", "png", "gif", "webp", "bmp", "tif", "tiff", "heic", "heif"]);
|
||||||
const RASTER_IMAGE_MIME = new Set([
|
const RASTER_IMAGE_MIME = new Set([
|
||||||
@@ -769,6 +772,7 @@
|
|||||||
clearInterval(state.ticketsPollTimer);
|
clearInterval(state.ticketsPollTimer);
|
||||||
state.ticketsPollTimer = null;
|
state.ticketsPollTimer = null;
|
||||||
}
|
}
|
||||||
|
if (ticketsPollIntervalMs === 0) return;
|
||||||
state.ticketsPollTimer = window.setInterval(() => {
|
state.ticketsPollTimer = window.setInterval(() => {
|
||||||
if (document.visibilityState === "hidden") return;
|
if (document.visibilityState === "hidden") return;
|
||||||
fetchTickets().catch(() => {});
|
fetchTickets().catch(() => {});
|
||||||
|
|||||||
@@ -50,14 +50,19 @@ class PageController extends Controller {
|
|||||||
// Отключить вызовы с клиента: occ config:app:set f7support client_read_receipts --value=0
|
// Отключить вызовы с клиента: occ config:app:set f7support client_read_receipts --value=0
|
||||||
$clientReadReceipts = $this->config->getAppValue('f7support', 'client_read_receipts', '0');
|
$clientReadReceipts = $this->config->getAppValue('f7support', 'client_read_receipts', '0');
|
||||||
|
|
||||||
// Интервал опроса списка тикетов (мс), чтобы подтягивать has_unread без WebSocket. occ: f7support tickets_poll_ms
|
// Периодический GET /api/client/tickets (мс): has_unread и отпечаток карточки; WebSocket только у открытого тикета.
|
||||||
|
// 0 — отключить опрос. Иначе значение ограничивается 3000…120000. occ: f7support tickets_poll_ms
|
||||||
$ticketsPollMs = (int) $this->config->getAppValue('f7support', 'tickets_poll_ms', '3000');
|
$ticketsPollMs = (int) $this->config->getAppValue('f7support', 'tickets_poll_ms', '3000');
|
||||||
|
if ($ticketsPollMs < 0) {
|
||||||
|
$ticketsPollMs = 0;
|
||||||
|
} elseif ($ticketsPollMs > 0) {
|
||||||
if ($ticketsPollMs < 3000) {
|
if ($ticketsPollMs < 3000) {
|
||||||
$ticketsPollMs = 3000;
|
$ticketsPollMs = 3000;
|
||||||
}
|
}
|
||||||
if ($ticketsPollMs > 120000) {
|
if ($ticketsPollMs > 120000) {
|
||||||
$ticketsPollMs = 120000;
|
$ticketsPollMs = 120000;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Util::addStyle('f7support', 'f7support');
|
Util::addStyle('f7support', 'f7support');
|
||||||
Util::addScript('f7support', 'main');
|
Util::addScript('f7support', 'main');
|
||||||
|
|||||||
+1
-1
@@ -6,5 +6,5 @@
|
|||||||
data-support-api-base="<?php p($_['supportApiBase']); ?>"
|
data-support-api-base="<?php p($_['supportApiBase']); ?>"
|
||||||
data-support-ws-base="<?php p($_['supportWsBase'] ?? ''); ?>"
|
data-support-ws-base="<?php p($_['supportWsBase'] ?? ''); ?>"
|
||||||
data-client-read-receipts="<?php p($_['clientReadReceipts'] ?? '0'); ?>"
|
data-client-read-receipts="<?php p($_['clientReadReceipts'] ?? '0'); ?>"
|
||||||
data-messages-poll-ms="<?php p($_['ticketsPollMs'] ?? '3000'); ?>">
|
data-tickets-poll-ms="<?php p((string) ($_['ticketsPollMs'] ?? 3000)); ?>">
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user