Spaces:
Running
Running
| // management/templates/management/service-worker.js | |
| // -*- coding: utf-8 -*- | |
| console.log('Service Worker Loaded and Ready.'); | |
| // CACHE_NAME را برای مدیریت نسخهها تغییر دهید | |
| const CACHE_NAME = 'marzban-pwa-cache-v1.0'; | |
| // فایلهایی که باید در زمان نصب Service Worker کش شوند | |
| const urlsToCache = [ | |
| '/', | |
| '/dashboard/', | |
| '/static/js/main.js', | |
| '/static/css/styles.css', | |
| '/static/images/icons/icon-192x192.png', | |
| '/static/images/icons/icon-512x512.png', | |
| '/manifest.json' | |
| ]; | |
| self.addEventListener('install', (event) => { | |
| console.log('Service Worker: Install event.'); | |
| // در زمان نصب، فایلهای اصلی را در حافظه کش ذخیره میکنیم | |
| event.waitUntil( | |
| caches.open(CACHE_NAME) | |
| .then((cache) => { | |
| console.log('Opened cache'); | |
| return cache.addAll(urlsToCache); | |
| }) | |
| ); | |
| }); | |
| self.addEventListener('activate', (event) => { | |
| console.log('Service Worker: Activate event.'); | |
| // پاک کردن کشهای قدیمی | |
| event.waitUntil( | |
| caches.keys().then((cacheNames) => { | |
| return Promise.all( | |
| cacheNames.map((cacheName) => { | |
| if (cacheName !== CACHE_NAME) { | |
| console.log('Service Worker: Deleting old cache: ', cacheName); | |
| return caches.delete(cacheName); | |
| } | |
| }) | |
| ); | |
| }) | |
| ); | |
| }); | |
| self.addEventListener('fetch', (event) => { | |
| // برای درخواستهای شبکه، ابتدا کش را بررسی میکنیم و در صورت عدم وجود، درخواست شبکه میزنیم | |
| event.respondWith( | |
| caches.match(event.request).then((response) => { | |
| // اگر در کش بود، همان را برمیگردانیم | |
| if (response) { | |
| return response; | |
| } | |
| // اگر در کش نبود، درخواست شبکه میزنیم | |
| return fetch(event.request); | |
| }) | |
| ); | |
| }); | |
| self.addEventListener('push', (event) => { | |
| const data = event.data.json(); | |
| console.log('Push received...', data); | |
| const title = data.head || 'نوتیفیکیشن جدید'; | |
| const options = { | |
| body: data.body, | |
| icon: data.icon || '/static/images/icons/icon-192x192.png', | |
| // الگوی لرزش: 200ms لرزش، 100ms مکث، 200ms لرزش | |
| vibrate: data.vibrate || [200, 100, 200], | |
| // پخش صدای پیشفرض سیستم | |
| // توجه: پخش فایل صوتی سفارشی در مرورگرها به طور کامل پشتیبانی نمیشود. | |
| // مرورگرها از صدای پیشفرض سیستم برای نوتیفیکیشن استفاده میکنند. | |
| sound: data.sound || undefined, | |
| badge: '/static/images/icons/badge-72x72.png' | |
| }; | |
| event.waitUntil( | |
| self.registration.showNotification(title, options) | |
| ); | |
| }); | |
| self.addEventListener('notificationclick', (event) => { | |
| console.log('Notification clicked', event); | |
| event.notification.close(); | |
| event.waitUntil( | |
| clients.openWindow('https://your-panel-address.com/dashboard/') | |
| ); | |
| }); | |