diff --git a/appinfo/info.xml b/appinfo/info.xml
index e785f7b..f793569 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -4,7 +4,7 @@
f7support
Support ticket client for F7cloud (F7cloud-compatible)
f7support client app for creating and viewing support tickets.
- 0.1.3
+ 0.1.6
AGPL
f7support team
F7Support
diff --git a/js/main.js b/js/main.js
index cb51b37..ab2ec63 100644
--- a/js/main.js
+++ b/js/main.js
@@ -8,11 +8,14 @@
const supportWsBaseOverride = (root.dataset.supportWsBase || "").trim();
/** Включается в NC: `occ config:app:set f7support client_read_receipts --value=1` после выката API `POST .../read`. */
const clientReadReceiptsEnabled = root.dataset.clientReadReceipts === "1";
- const ticketsPollIntervalMs = (() => {
- const n = parseInt(String(root.dataset.messagesPollMs || "3000"), 10);
- if (!Number.isFinite(n)) return 3000;
- return Math.min(120000, Math.max(3000, n));
- })();
+ const ticketsPollMsRaw = parseInt(
+ String(root.dataset.ticketsPollMs || root.dataset.messagesPollMs || "").trim(),
+ 10
+ );
+ 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_MIME = new Set([
@@ -769,6 +772,7 @@
clearInterval(state.ticketsPollTimer);
state.ticketsPollTimer = null;
}
+ if (ticketsPollIntervalMs === 0) return;
state.ticketsPollTimer = window.setInterval(() => {
if (document.visibilityState === "hidden") return;
fetchTickets().catch(() => {});
diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php
index 3043b01..33b4d8c 100644
--- a/lib/Controller/PageController.php
+++ b/lib/Controller/PageController.php
@@ -50,13 +50,18 @@ class PageController extends Controller {
// Отключить вызовы с клиента: occ config:app:set f7support client_read_receipts --value=0
$clientReadReceipts = $this->config->getAppValue('f7support', 'client_read_receipts', '0');
- // Интервал опроса списка тикетов (мс), чтобы подтягивать has_unread без WebSocket. occ: f7support tickets_poll_ms
- $ticketsPollMs = (int)$this->config->getAppValue('f7support', 'tickets_poll_ms', '3000');
- if ($ticketsPollMs < 3000) {
- $ticketsPollMs = 3000;
- }
- if ($ticketsPollMs > 120000) {
- $ticketsPollMs = 120000;
+ // Периодический 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');
+ if ($ticketsPollMs < 0) {
+ $ticketsPollMs = 0;
+ } elseif ($ticketsPollMs > 0) {
+ if ($ticketsPollMs < 3000) {
+ $ticketsPollMs = 3000;
+ }
+ if ($ticketsPollMs > 120000) {
+ $ticketsPollMs = 120000;
+ }
}
Util::addStyle('f7support', 'f7support');
@@ -69,7 +74,7 @@ class PageController extends Controller {
'supportApiOrigin' => $supportApiOrigin,
'supportWsBase' => $supportWsBase,
'clientReadReceipts' => $clientReadReceipts,
- 'ticketsPollMs' => (string)$ticketsPollMs,
+ 'ticketsPollMs' => (string) $ticketsPollMs,
]);
}
}
diff --git a/templates/main.php b/templates/main.php
index 1cfa2a8..1a861c0 100644
--- a/templates/main.php
+++ b/templates/main.php
@@ -6,5 +6,5 @@
data-support-api-base=""
data-support-ws-base=""
data-client-read-receipts=""
- data-messages-poll-ms="">
+ data-tickets-poll-ms="">