Supported stickers real-time update
This commit is contained in:
parent
3962309545
commit
64efe88880
@ -1493,6 +1493,11 @@ angular.module('myApp.directives', ['myApp.filters'])
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$scope.$on('stickers_changed', function () {
|
||||||
|
emojiTooltip.onStickersChanged();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
var composerEmojiPanel;
|
var composerEmojiPanel;
|
||||||
if (emojiPanel) {
|
if (emojiPanel) {
|
||||||
composerEmojiPanel = new EmojiPanel(emojiPanel, {
|
composerEmojiPanel = new EmojiPanel(emojiPanel, {
|
||||||
|
@ -364,7 +364,7 @@ EmojiTooltip.prototype.createTooltip = function () {
|
|||||||
|
|
||||||
|
|
||||||
EmojiTooltip.prototype.selectCategory = function (cat, force) {
|
EmojiTooltip.prototype.selectCategory = function (cat, force) {
|
||||||
if (this.cat === cat && !force) {
|
if (!this.tab && this.cat === cat && !force) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$('.active', this.categoriesEl).removeClass('active');
|
$('.active', this.categoriesEl).removeClass('active');
|
||||||
@ -566,6 +566,12 @@ EmojiTooltip.prototype.onStickersScroll = function (scrollable, scrollTop) {
|
|||||||
this.activateStickerCategory();
|
this.activateStickerCategory();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EmojiTooltip.prototype.onStickersChanged = function () {
|
||||||
|
if (this.tab) {
|
||||||
|
this.updateStickersContents(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
EmojiTooltip.prototype.activateStickerCategory = function () {
|
EmojiTooltip.prototype.activateStickerCategory = function () {
|
||||||
var categoriesEl = this.categoriesEl[1];
|
var categoriesEl = this.categoriesEl[1];
|
||||||
var categoryEl = categoriesEl.childNodes[this.cat];
|
var categoryEl = categoriesEl.childNodes[this.cat];
|
||||||
|
@ -2285,71 +2285,73 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
var currentStickerSets = [];
|
var currentStickerSets = [];
|
||||||
|
|
||||||
$rootScope.$on('apiUpdate', function (e, update) {
|
$rootScope.$on('apiUpdate', function (e, update) {
|
||||||
var rewriteCached = false;
|
if (update._ != 'updateStickerSets' &&
|
||||||
if (update._ == 'updateStickerSets') {
|
update._ != 'updateNewStickerSet' &&
|
||||||
getStickers(true);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (update._ != 'updateNewStickerSet' &&
|
|
||||||
update._ != 'updateDelStickerSet' &&
|
update._ != 'updateDelStickerSet' &&
|
||||||
update._ != 'updateStickerSetsOrder') {
|
update._ != 'updateStickerSetsOrder') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Storage.get('all_stickers').then(function (stickers) {
|
return Storage.get('all_stickers').then(function (stickers) {
|
||||||
if (stickers &&
|
if (!stickers ||
|
||||||
stickers.layer == Config.Schema.API.layer) {
|
stickers.layer != Config.Schema.API.layer) {
|
||||||
switch (update._) {
|
$rootScope.$broadcast('stickers_changed');
|
||||||
case 'updateNewStickerSet':
|
|
||||||
var fullSet = update.stickerset;
|
|
||||||
var set = fullSet.set;
|
|
||||||
set.pFlags.installed = true;
|
|
||||||
stickers.fullSets[set.id] = fullSet;
|
|
||||||
var pos = false;
|
|
||||||
for (var i = 0, len = stickers.sets.length; i < len; i++) {
|
|
||||||
if (stickers.sets[i].id == set.id) {
|
|
||||||
pos = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (pos !== false) {
|
|
||||||
stickers.sets.splice(pos, 1);
|
|
||||||
}
|
|
||||||
stickers.sets.unshift(set);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'updateDelStickerSet':
|
|
||||||
for (var i = 0, len = stickers.sets.length; i < len; i++) {
|
|
||||||
if (stickers.sets[i].id == update.id) {
|
|
||||||
stickers.sets.splice(i, 1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
delete stickers.fullSets[update.id];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'updateStickerSetsOrder':
|
|
||||||
var order = update.order;
|
|
||||||
stickers.sets.sort(function (a, b) {
|
|
||||||
return order.indexOf(a.id) - order.indexOf(b.id);
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Storage.set({all_stickers: stickers}).then(function () {
|
|
||||||
getStickers(true)
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
switch (update._) {
|
||||||
|
case 'updateNewStickerSet':
|
||||||
|
var fullSet = update.stickerset;
|
||||||
|
var set = fullSet.set;
|
||||||
|
var pos = false;
|
||||||
|
for (var i = 0, len = stickers.sets.length; i < len; i++) {
|
||||||
|
if (stickers.sets[i].id == set.id) {
|
||||||
|
pos = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pos !== false) {
|
||||||
|
stickers.sets.splice(pos, 1);
|
||||||
|
}
|
||||||
|
set.pFlags.installed = true;
|
||||||
|
stickers.sets.unshift(set);
|
||||||
|
stickers.fullSets[set.id] = fullSet;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'updateDelStickerSet':
|
||||||
|
var set;
|
||||||
|
for (var i = 0, len = stickers.sets.length; i < len; i++) {
|
||||||
|
set = stickers.sets[i];
|
||||||
|
if (set.id == update.id) {
|
||||||
|
set.pFlags.installed = false;
|
||||||
|
stickers.sets.splice(i, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete stickers.fullSets[update.id];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'updateStickerSetsOrder':
|
||||||
|
var order = update.order;
|
||||||
|
stickers.sets.sort(function (a, b) {
|
||||||
|
return order.indexOf(a.id) - order.indexOf(b.id);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
stickers.hash = getStickerSetsHash(stickers.sets);
|
||||||
|
stickers.date = 0;
|
||||||
|
Storage.set({all_stickers: stickers}).then(function () {
|
||||||
|
$rootScope.$broadcast('stickers_changed');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
start: start,
|
start: start,
|
||||||
|
getStickers: getStickers,
|
||||||
openStickersetLink: openStickersetLink,
|
openStickersetLink: openStickersetLink,
|
||||||
openStickerset: openStickerset,
|
openStickerset: openStickerset,
|
||||||
installStickerset: installStickerset,
|
installStickerset: installStickerset,
|
||||||
pushPopularSticker: pushPopularSticker,
|
pushPopularSticker: pushPopularSticker,
|
||||||
getStickers: getStickers,
|
|
||||||
getStickerset: getStickerset
|
getStickerset: getStickerset
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2360,46 +2362,38 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPopularStickers () {
|
function getStickers (force) {
|
||||||
return Storage.get('stickers_popular').then(function (popStickers) {
|
return Storage.get('all_stickers').then(function (stickers) {
|
||||||
var result = [];
|
var layer = Config.Schema.API.layer;
|
||||||
var i, len, docID;
|
if (stickers.layer != layer) {
|
||||||
if (popStickers && popStickers.length) {
|
stickers = false;
|
||||||
for (i = 0, len = popStickers.length; i < len; i++) {
|
}
|
||||||
docID = popStickers[i][0];
|
if (stickers && stickers.date > tsNow(true) && !force) {
|
||||||
if (AppDocsManager.hasDoc(docID)) {
|
return processRawStickers(stickers);
|
||||||
result.push({id: docID, rate: popStickers[i][1]});
|
}
|
||||||
}
|
return MtpApiManager.invokeApi('messages.getAllStickers', {
|
||||||
|
hash: stickers && stickers.hash || ''
|
||||||
|
}).then(function (newStickers) {
|
||||||
|
var notModified = newStickers._ == 'messages.allStickersNotModified';
|
||||||
|
if (notModified) {
|
||||||
|
newStickers = stickers;
|
||||||
}
|
}
|
||||||
};
|
newStickers.date = tsNow(true) + 3600;
|
||||||
return result;
|
newStickers.layer = layer;
|
||||||
});
|
delete newStickers._;
|
||||||
}
|
|
||||||
|
|
||||||
function pushPopularSticker (id) {
|
if (notModified) {
|
||||||
getPopularStickers().then(function (popularStickers) {
|
Storage.set({all_stickers: newStickers});
|
||||||
var exists = false;
|
return processRawStickers(newStickers);
|
||||||
var count = popularStickers.length;
|
|
||||||
var result = [];
|
|
||||||
for (var i = 0; i < count; i++) {
|
|
||||||
if (popularStickers[i].id == id) {
|
|
||||||
exists = true;
|
|
||||||
popularStickers[i].rate++;
|
|
||||||
}
|
}
|
||||||
result.push([popularStickers[i].id, popularStickers[i].rate]);
|
|
||||||
}
|
return getStickerSets(newStickers, stickers && stickers.fullSets).then(function () {
|
||||||
if (exists) {
|
Storage.set({all_stickers: newStickers});
|
||||||
result.sort(function (a, b) {
|
return processRawStickers(newStickers);
|
||||||
return b[1] - a[1];
|
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
if (result.length > 15) {
|
});
|
||||||
result = result.slice(0, 15);
|
})
|
||||||
}
|
|
||||||
result.push([id, 1]);
|
|
||||||
}
|
|
||||||
ConfigStorage.set({stickers_popular: result});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function processRawStickers(stickers) {
|
function processRawStickers(stickers) {
|
||||||
@ -2443,49 +2437,13 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
docIDs: docIDs
|
docIDs: docIDs
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('stickers', resultStickersets);
|
|
||||||
return resultStickersets;
|
return resultStickersets;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getStickers (force) {
|
function getStickerSets (allStickers, prevCachedSets) {
|
||||||
return Storage.get('all_stickers').then(function (stickers) {
|
|
||||||
var layer = Config.Schema.API.layer;
|
|
||||||
if (stickers.layer != layer) {
|
|
||||||
stickers = false;
|
|
||||||
}
|
|
||||||
if (stickers && stickers.date > tsNow(true) && !force) {
|
|
||||||
return processRawStickers(stickers);
|
|
||||||
}
|
|
||||||
return MtpApiManager.invokeApi('messages.getAllStickers', {
|
|
||||||
hash: stickers && stickers.hash || ''
|
|
||||||
}).then(function (newStickers) {
|
|
||||||
var notModified = newStickers._ == 'messages.allStickersNotModified';
|
|
||||||
if (notModified) {
|
|
||||||
newStickers = stickers;
|
|
||||||
}
|
|
||||||
newStickers.date = tsNow(true) + 3600;
|
|
||||||
newStickers.layer = layer;
|
|
||||||
delete newStickers._;
|
|
||||||
|
|
||||||
if (notModified) {
|
|
||||||
Storage.set({all_stickers: newStickers});
|
|
||||||
return processRawStickers(newStickers);
|
|
||||||
}
|
|
||||||
|
|
||||||
return getStickerSets(newStickers).then(function () {
|
|
||||||
Storage.set({all_stickers: newStickers});
|
|
||||||
return processRawStickers(newStickers);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function getStickerSets (allStickers) {
|
|
||||||
var promises = [];
|
var promises = [];
|
||||||
var cachedSets = allStickers.fullSets || {};
|
var cachedSets = prevCachedSets || allStickers.fullSets || {};
|
||||||
allStickers.fullSets = {};
|
allStickers.fullSets = {};
|
||||||
angular.forEach(allStickers.sets, function (shortSet) {
|
angular.forEach(allStickers.sets, function (shortSet) {
|
||||||
var fullSet = cachedSets[shortSet.id];
|
var fullSet = cachedSets[shortSet.id];
|
||||||
@ -2507,6 +2465,48 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
return $q.all(promises);
|
return $q.all(promises);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getPopularStickers () {
|
||||||
|
return Storage.get('stickers_popular').then(function (popStickers) {
|
||||||
|
var result = [];
|
||||||
|
var i, len, docID;
|
||||||
|
if (popStickers && popStickers.length) {
|
||||||
|
for (i = 0, len = popStickers.length; i < len; i++) {
|
||||||
|
docID = popStickers[i][0];
|
||||||
|
if (AppDocsManager.hasDoc(docID)) {
|
||||||
|
result.push({id: docID, rate: popStickers[i][1]});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function pushPopularSticker (id) {
|
||||||
|
getPopularStickers().then(function (popularStickers) {
|
||||||
|
var exists = false;
|
||||||
|
var count = popularStickers.length;
|
||||||
|
var result = [];
|
||||||
|
for (var i = 0; i < count; i++) {
|
||||||
|
if (popularStickers[i].id == id) {
|
||||||
|
exists = true;
|
||||||
|
popularStickers[i].rate++;
|
||||||
|
}
|
||||||
|
result.push([popularStickers[i].id, popularStickers[i].rate]);
|
||||||
|
}
|
||||||
|
if (exists) {
|
||||||
|
result.sort(function (a, b) {
|
||||||
|
return b[1] - a[1];
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
if (result.length > 15) {
|
||||||
|
result = result.slice(0, 15);
|
||||||
|
}
|
||||||
|
result.push([id, 1]);
|
||||||
|
}
|
||||||
|
ConfigStorage.set({stickers_popular: result});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function getStickerset (inputStickerset) {
|
function getStickerset (inputStickerset) {
|
||||||
return MtpApiManager.invokeApi('messages.getStickerSet', {
|
return MtpApiManager.invokeApi('messages.getStickerSet', {
|
||||||
stickerset: inputStickerset
|
stickerset: inputStickerset
|
||||||
@ -2561,6 +2561,18 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
windowClass: 'stickerset_modal_window mobile_modal'
|
windowClass: 'stickerset_modal_window mobile_modal'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getStickerSetsHash (stickerSets) {
|
||||||
|
var acc = 0, set;
|
||||||
|
for (var i = 0; i < stickerSets.length; i++) {
|
||||||
|
set = stickerSets[i];
|
||||||
|
if (set.pFlags.disabled || !set.pFlags.installed) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
acc = ((acc * 20261) + 0x80000000 + set.hash) % 0x80000000;
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
.service('ApiUpdatesManager', function ($rootScope, MtpNetworkerFactory, AppUsersManager, AppChatsManager, AppPeersManager, MtpApiManager) {
|
.service('ApiUpdatesManager', function ($rootScope, MtpNetworkerFactory, AppUsersManager, AppChatsManager, AppPeersManager, MtpApiManager) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user