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="">