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/') | |
); | |
}); | |