Browse Source

Update 2016-12-20T15:54:19.403Z

gh-pages
Igor Zhukov 8 years ago
parent
commit
b4b991c694
  1. 34
      js/app.js
  2. 102
      js/lib/push_worker.js
  3. 2
      service_worker.js
  4. 28
      webogram.appcache

34
js/app.js

File diff suppressed because one or more lines are too long

102
js/lib/push_worker.js

@ -1,33 +1,21 @@
console.log('[SW] Push worker started')
var port
var lastAliveTime = false
var pendingNotification = false
var muteUntil = false
var baseUrl
var settings
var lang = {}
var userInvisibleSupported = false
var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1
var userInvisibleSupported = isFirefox ? true : false
if (isFirefox) {
userInvisibleSupported = true
}
var pendingNotification = false
var defaultBaseUrl
switch (location.hostname) {
case 'localhost':
baseUrl = 'http://localhost:8000/app/index.html#/im'
defaultBaseUrl = 'http://localhost:8000/app/index.html#/im'
break
case 'zhukov.github.io':
baseUrl = 'https://zhukov.github.io/webogram/#/im'
defaultBaseUrl = 'https://zhukov.github.io/webogram/#/im'
break
default:
case 'web.telegram.org':
baseUrl = 'https://' + location.hostname + '/#/im'
defaultBaseUrl = 'https://' + location.hostname + '/#/im'
}
self.addEventListener('push', function(event) {
@ -39,15 +27,19 @@ self.addEventListener('push', function(event) {
return reject()
}
var nowTime = +(new Date())
Promise.all([getMuteUntil(), getLastAliveTime()]).then(function (result) {
var muteUntil = result[0]
var lastAliveTime = result[1]
if (userInvisibleSupported &&
muteUntil &&
nowTime < muteUntil) {
console.log('Supress notification because mute for ', (muteUntil - nowTime) / 60000, 'min')
console.log('Supress notification because mute for ', Math.ceil((muteUntil - nowTime) / 60000), 'min')
return reject()
}
if (lastAliveTime &&
nowTime - lastAliveTime < 60000) {
return clients.matchAll({type: 'window'}).then(function(clientList) {
console.log('matched clients', clientList)
if (clientList.length) {
console.log('Supress notification because some instance is alive')
return reject()
@ -57,9 +49,12 @@ self.addEventListener('push', function(event) {
}
return resolve()
})
})
var notificationPromise = checksPromise.then(function () {
fireNotification(obj)
return Promise.all([getSettings(), getLang()]).then(function (result) {
return fireNotification(obj, result[0], result[1])
})
})
var closePromise = notificationPromise.catch(function () {
@ -75,11 +70,17 @@ self.addEventListener('push', function(event) {
})
})
if ('waitUntil' in event) {
event.waitUntil(closePromise)
}
})
self.addEventListener('install', function(event) {
event.waitUntil(self.skipWaiting());
});
self.addEventListener('activate', function(event) {
console.log('[SW] on activate')
event.waitUntil(self.clients.claim());
});
self.addEventListener('message', function(event) {
console.log('[SW] on message', event.data)
@ -87,6 +88,7 @@ self.addEventListener('message', function(event) {
if (event.data.type == 'ping') {
if (event.data.localNotifications) {
lastAliveTime = +(new Date())
IDBManager.setItem('push_last_alive', lastAliveTime)
}
if (pendingNotification &&
@ -108,12 +110,9 @@ self.addEventListener('message', function(event) {
if (event.data.type == 'notifications_clear') {
closeAllNotifications()
}
if (event.data.baseUrl) {
baseUrl = event.data.baseUrl
}
})
function fireNotification(obj) {
function fireNotification(obj, settings, lang) {
var title = obj.title || 'Telegram'
var body = obj.description || ''
var icon = 'img/logo_share.png'
@ -221,7 +220,7 @@ self.addEventListener('notificationclick', function(event) {
if (action == 'mute1d' && userInvisibleSupported) {
console.log('[SW] mute for 1d')
muteUntil = +(new Date()) + 86400000
IDBManager.setItem('push_mute_until', muteUntil.toString())
IDBManager.setItem('push_mute_until', muteUntil)
return
}
if (!notification.data) {
@ -243,15 +242,15 @@ self.addEventListener('notificationclick', function(event) {
}
}
if (clients.openWindow) {
return clients.openWindow(baseUrl)
return getSettings().then(function (settings) {
return clients.openWindow(settings.baseUrl || defaultBaseUrl)
})
}
}).catch(function (error) {
console.error('Clients.matchAll error', error)
})
if ('waitUntil' in event) {
event.waitUntil(promise)
}
})
self.addEventListener('notificationclose', onCloseNotification)
@ -386,21 +385,52 @@ self.addEventListener('notificationclose', onCloseNotification)
})()
var lastAliveTime, muteUntil, settings, lang
IDBManager.getItem('push_mute_until').then(function (newMuteUntil) {
muteUntil = Math.max(muteUntil || 0, newMuteUntil || 0) || false
function getMuteUntil() {
if (muteUntil !== undefined) {
return Promise.resolve(muteUntil)
}
return IDBManager.getItem('push_mute_until').then(function (newMuteUntil) {
return muteUntil = Math.max(muteUntil || 0, newMuteUntil || 0) || false
}).catch(function (error) {
console.error('IDB error', error)
return false
})
}
IDBManager.getItem('push_lang').then(function (newLang) {
lang = newLang || {}
function getLastAliveTime() {
if (lastAliveTime !== undefined) {
return Promise.resolve(lastAliveTime)
}
return IDBManager.getItem('push_last_alive').then(function (newLastAliveTime) {
return lastAliveTime = Math.max(lastAliveTime || 0, newLastAliveTime || 0) || false
}).catch(function (error) {
console.error('IDB error', error)
return false
})
}
IDBManager.getItem('push_settings').then(function (newSettings) {
settings = newSettings || {}
function getLang() {
if (lang !== undefined) {
return Promise.resolve(lang)
}
return IDBManager.getItem('push_lang').then(function (newLang) {
return lang = newLang || {}
}).catch(function (error) {
console.error('IDB error', error)
return {}
})
}
function getSettings() {
if (settings !== undefined) {
return Promise.resolve(settings)
}
return IDBManager.getItem('push_settings').then(function (newSettings) {
return settings = newSettings || {}
}).catch(function (error) {
console.error('IDB error', error)
return {}
})
}

2
service_worker.js

File diff suppressed because one or more lines are too long

28
webogram.appcache

@ -1,5 +1,5 @@
CACHE MANIFEST
# Time: Mon Dec 19 2016 19:05:49 GMT+0300 (MSK)
# Time: Tue Dec 20 2016 18:49:49 GMT+0300 (MSK)
CACHE:
@ -9,6 +9,7 @@ service_worker.js
css/app.css
css/desktop.css
css/mobile.css
js/app.js
img/Manytabs.png
img/Manytabs_2x.png
img/Telegram.png
@ -26,9 +27,19 @@ img/iphone_home120.png
img/iphone_startup.png
img/logo_share.png
img/sound_a.mp3
js/app.js
nacl/mtproto_crypto.nmf
nacl/mtproto_crypto.pexe
js/lib/bin_utils.js
js/lib/crypto_worker.js
js/lib/polyfill.js
js/lib/push_worker.js
js/locales/de-de.json
js/locales/en-us.json
js/locales/es-es.json
js/locales/it-it.json
js/locales/nl-nl.json
js/locales/pt-br.json
js/locales/ru-ru.json
img/changelog/card_wecandoit.png
img/icons/AboutLogos.png
img/icons/AboutLogos_2x.png
@ -63,20 +74,9 @@ img/placeholders/UserAvatar7@2x.png
img/placeholders/UserAvatar8@2x.png
img/placeholders/VideoThumbConversation.gif
img/placeholders/VideoThumbModal.gif
js/lib/bin_utils.js
js/lib/crypto_worker.js
js/lib/polyfill.js
js/lib/push_worker.js
js/locales/de-de.json
js/locales/en-us.json
js/locales/es-es.json
js/locales/it-it.json
js/locales/nl-nl.json
js/locales/pt-br.json
js/locales/ru-ru.json
vendor/closure/long.js
vendor/cryptoJS/crypto.js
vendor/jsbn/jsbn_combined.js
vendor/cryptoJS/crypto.js
vendor/leemon_bigint/bigint.js
vendor/rusha/rusha.js
vendor/angular/i18n/angular-locale_de-de.js

Loading…
Cancel
Save