Basic PUSH support
Added registerDevice for push updates. Closes #363 Fixed notification click. Closes #365
This commit is contained in:
parent
4d69ec04c8
commit
ec7e570aae
@ -36,6 +36,7 @@ Config.Navigator = {
|
|||||||
osX: (navigator.platform || '').toLowerCase().indexOf('mac') != -1 ||
|
osX: (navigator.platform || '').toLowerCase().indexOf('mac') != -1 ||
|
||||||
(navigator.userAgent || '').toLowerCase().indexOf('mac') != -1,
|
(navigator.userAgent || '').toLowerCase().indexOf('mac') != -1,
|
||||||
retina: window.devicePixelRatio > 1,
|
retina: window.devicePixelRatio > 1,
|
||||||
|
ffos: navigator.userAgent.match(/mobi.+Gecko/i),
|
||||||
touch: screen.width <= 768,
|
touch: screen.width <= 768,
|
||||||
mobile: screen.width < 480
|
mobile: screen.width < 480
|
||||||
};
|
};
|
||||||
|
@ -582,6 +582,10 @@ angular.module('izhukov.mtproto', ['izhukov.utils'])
|
|||||||
$rootScope.offline = true;
|
$rootScope.offline = true;
|
||||||
$rootScope.offlineConnecting = true;
|
$rootScope.offlineConnecting = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Config.Navigator.mobile) {
|
||||||
|
this.setupMobileSleep();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
MtpNetworker.prototype.updateSession = function () {
|
MtpNetworker.prototype.updateSession = function () {
|
||||||
@ -596,6 +600,26 @@ angular.module('izhukov.mtproto', ['izhukov.utils'])
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
MtpNetworker.prototype.setupMobileSleep = function () {
|
||||||
|
var self = this;
|
||||||
|
$rootScope.$watch('idle.isIDLE', function (isIDLE) {
|
||||||
|
if (isIDLE) {
|
||||||
|
self.sleepAfter = tsNow() + 30000;
|
||||||
|
} else {
|
||||||
|
delete self.sleepAfter;
|
||||||
|
self.checkLongPoll();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$rootScope.$on('push_received', function () {
|
||||||
|
// console.log(dT(), 'push recieved', self.sleepAfter);
|
||||||
|
if (self.sleepAfter) {
|
||||||
|
self.sleepAfter = tsNow() + 30000;
|
||||||
|
self.checkLongPoll();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
MtpNetworker.prototype.updateSentMessage = function (sentMessageID) {
|
MtpNetworker.prototype.updateSentMessage = function (sentMessageID) {
|
||||||
var sentMessage = this.sentMessages[sentMessageID];
|
var sentMessage = this.sentMessages[sentMessageID];
|
||||||
if (!sentMessage) {
|
if (!sentMessage) {
|
||||||
@ -716,14 +740,18 @@ angular.module('izhukov.mtproto', ['izhukov.utils'])
|
|||||||
|
|
||||||
MtpNetworker.prototype.checkLongPoll = function(force) {
|
MtpNetworker.prototype.checkLongPoll = function(force) {
|
||||||
var isClean = this.cleanupSent();
|
var isClean = this.cleanupSent();
|
||||||
// console.log('Check lp', this.longPollPending, tsNow());
|
// console.log('Check lp', this.longPollPending, tsNow(), this.dcID, isClean);
|
||||||
if (this.longPollPending && tsNow() < this.longPollPending || this.offline) {
|
if (this.longPollPending && tsNow() < this.longPollPending || this.offline) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var self = this;
|
var self = this;
|
||||||
Storage.get('dc').then(function (baseDcID) {
|
Storage.get('dc').then(function (baseDcID) {
|
||||||
if (isClean && (baseDcID != self.dcID || self.upload)) {
|
if (isClean && (
|
||||||
// console.warn('send long-poll for guest DC is delayed', self.dcID);
|
baseDcID != self.dcID ||
|
||||||
|
self.upload ||
|
||||||
|
self.sleepAfter && tsNow() > self.sleepAfter
|
||||||
|
)) {
|
||||||
|
// console.warn(dT(), 'Send long-poll for DC is delayed', self.dcID, self.sleepAfter);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self.sendLongPoll();
|
self.sendLongPoll();
|
||||||
|
@ -3226,6 +3226,20 @@ angular.module('myApp.services', [])
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var registeredDevice = false;
|
||||||
|
if (window.navigator.mozSetMessageHandler) {
|
||||||
|
window.navigator.mozSetMessageHandler('push', function(e) {
|
||||||
|
console.log(dT(), 'received push', e);
|
||||||
|
$rootScope.$broadcast('push_received');
|
||||||
|
});
|
||||||
|
|
||||||
|
window.navigator.mozSetMessageHandler('push-register', function(e) {
|
||||||
|
console.log(dT(), 'received push', e);
|
||||||
|
registeredDevice = false;
|
||||||
|
registerDevice();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
start: start,
|
start: start,
|
||||||
notify: notify,
|
notify: notify,
|
||||||
@ -3305,6 +3319,11 @@ angular.module('myApp.services', [])
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FFOS Notification blob src bug workaround
|
||||||
|
if (Config.Navigator.ffos) {
|
||||||
|
data.image = 'https://raw.githubusercontent.com/zhukov/webogram/master/app/img/icons/icon60.png';
|
||||||
|
}
|
||||||
|
|
||||||
notificationsCount++;
|
notificationsCount++;
|
||||||
|
|
||||||
if (!notificationsUiSupport ||
|
if (!notificationsUiSupport ||
|
||||||
@ -3333,9 +3352,9 @@ angular.module('myApp.services', [])
|
|||||||
|
|
||||||
notification.onclick = function () {
|
notification.onclick = function () {
|
||||||
notification.close();
|
notification.close();
|
||||||
if (window.mozApps && document.hidden) {
|
if (window.navigator.mozApps && document.hidden) {
|
||||||
// Get app instance and launch it to bring app to foreground
|
// Get app instance and launch it to bring app to foreground
|
||||||
window.mozApps.getSelf().onsuccess = function() {
|
window.navigator.mozApps.getSelf().onsuccess = function() {
|
||||||
this.result.launch();
|
this.result.launch();
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
@ -3391,15 +3410,13 @@ angular.module('myApp.services', [])
|
|||||||
notificationsShown = {};
|
notificationsShown = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
var registeredDevice = false;
|
|
||||||
|
|
||||||
function registerDevice () {
|
function registerDevice () {
|
||||||
if (registeredDevice) {
|
if (registeredDevice) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (navigator.push) {
|
if (navigator.push) {
|
||||||
var req = navigator.push.register();
|
var req = navigator.push.register();
|
||||||
|
|
||||||
req.onsuccess = function(e) {
|
req.onsuccess = function(e) {
|
||||||
registeredDevice = req.result;
|
registeredDevice = req.result;
|
||||||
MtpApiManager.invokeApi('account.registerDevice', {
|
MtpApiManager.invokeApi('account.registerDevice', {
|
||||||
@ -3430,6 +3447,7 @@ angular.module('myApp.services', [])
|
|||||||
registeredDevice = false;
|
registeredDevice = false;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user