deepsite / management /static /js /service-worker.js
coerxso's picture
Upload 73 files
3e8a166 verified
raw
history blame
3.33 kB
// 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/')
);
});