put current locale in consideration for various caches in filters/services

some local caches now need to be purged when the locale is changed on
runtime or else they'll still display strings in the wrong locale/language

Revert this commit once the locale loading is moved into init phase of
the page so it won't change during runtime anymore
This commit is contained in:
Roman Anasal 2014-09-09 17:42:27 +02:00
parent 2e148b29a7
commit 37bb69a409
2 changed files with 31 additions and 16 deletions

View File

@ -9,7 +9,7 @@
/* Filters */ /* Filters */
angular.module('myApp.filters', []) angular.module('myApp.filters', ['myApp.i18n'])
.filter('userName', [function() { .filter('userName', [function() {
return function (user) { return function (user) {
@ -51,14 +51,17 @@ angular.module('myApp.filters', [])
} }
}]) }])
.filter('dateOrTime', ['$filter', function($filter) { .filter('dateOrTime', ['$filter', '_', function($filter, _) {
var cachedDates = {}, var cachedDates = {},
dateFilter = $filter('date'); dateFilter = $filter('date');
return function (timestamp) { return function (timestamp) {
if (!cachedDates.hasOwnProperty(_.locale())) {
cachedDates[_.locale()] = {};
}
if (cachedDates[timestamp]) { if (cachedDates[_.locale()][timestamp]) {
return cachedDates[timestamp]; return cachedDates[_.locale()][timestamp];
} }
var ticks = timestamp * 1000, var ticks = timestamp * 1000,
@ -71,34 +74,42 @@ angular.module('myApp.filters', [])
else if (diff > 43200000) { // 12 hours else if (diff > 43200000) { // 12 hours
format = 'EEE'; format = 'EEE';
} }
return cachedDates[timestamp] = dateFilter(ticks, format); return cachedDates[_.locale()][timestamp] = dateFilter(ticks, format);
} }
}]) }])
.filter('time', ['$filter', function($filter) { .filter('time', ['$filter', '_', function($filter, _) {
var cachedDates = {}, var cachedDates = {},
dateFilter = $filter('date'), dateFilter = $filter('date'),
format = Config.Navigator.mobile ? 'HH:mm' : 'HH:mm:ss'; format = Config.Navigator.mobile ? 'HH:mm' : 'HH:mm:ss';
return function (timestamp) { return function (timestamp) {
if (cachedDates[timestamp]) { if (!cachedDates.hasOwnProperty(_.locale())) {
return cachedDates[timestamp]; cachedDates[_.locale()] = {};
} }
return cachedDates[timestamp] = dateFilter(timestamp * 1000, format); if (cachedDates[_.locale()][timestamp]) {
return cachedDates[_.locale()][timestamp];
}
return cachedDates[_.locale()][timestamp] = dateFilter(timestamp * 1000, format);
} }
}]) }])
.filter('myDate', ['$filter', function($filter) { .filter('myDate', ['$filter', '_', function($filter, _) {
var cachedDates = {}, var cachedDates = {},
dateFilter = $filter('date'); dateFilter = $filter('date');
return function (timestamp) { return function (timestamp) {
if (cachedDates[timestamp]) { if (!cachedDates.hasOwnProperty(_.locale())) {
return cachedDates[timestamp]; cachedDates[_.locale()] = {};
} }
return cachedDates[timestamp] = dateFilter(timestamp * 1000, 'fullDate'); if (cachedDates[_.locale()][timestamp]) {
return cachedDates[_.locale()][timestamp];
}
return cachedDates[_.locale()][timestamp] = dateFilter(timestamp * 1000, 'fullDate');
} }
}]) }])

View File

@ -9,7 +9,7 @@
/* Services */ /* Services */
angular.module('myApp.services', []) angular.module('myApp.services', ['myApp.i18n'])
.service('AppUsersManager', function ($rootScope, $modal, $modalStack, $filter, $q, MtpApiFileManager, MtpApiManager, RichTextProcessor, SearchIndexManager, ErrorService, Storage) { .service('AppUsersManager', function ($rootScope, $modal, $modalStack, $filter, $q, MtpApiFileManager, MtpApiManager, RichTextProcessor, SearchIndexManager, ErrorService, Storage) {
var users = {}, var users = {},
@ -729,11 +729,11 @@ angular.module('myApp.services', [])
} }
}) })
.service('AppMessagesManager', function ($q, $rootScope, $location, $filter, ApiUpdatesManager, AppUsersManager, AppChatsManager, AppPeersManager, AppPhotosManager, AppVideoManager, AppDocsManager, AppAudioManager, MtpApiManager, MtpApiFileManager, RichTextProcessor, NotificationsManager, SearchIndexManager, PeersSelectService,Storage) { .service('AppMessagesManager', function ($q, $rootScope, $location, $filter, ApiUpdatesManager, AppUsersManager, AppChatsManager, AppPeersManager, AppPhotosManager, AppVideoManager, AppDocsManager, AppAudioManager, MtpApiManager, MtpApiFileManager, RichTextProcessor, NotificationsManager, SearchIndexManager, PeersSelectService,Storage, _) {
var messagesStorage = {}; var messagesStorage = {};
var messagesForHistory = {}; var messagesForHistory = {};
var messagesForDialogs = {}; var messagesForDialogs = {locale: _.locale()};
var historiesStorage = {}; var historiesStorage = {};
var dialogsStorage = {count: null, dialogs: []}; var dialogsStorage = {count: null, dialogs: []};
var pendingByRandomID = {}; var pendingByRandomID = {};
@ -1748,6 +1748,10 @@ angular.module('myApp.services', [])
function wrapForDialog (msgID, unreadCount) { function wrapForDialog (msgID, unreadCount) {
var useCache = unreadCount != -1; var useCache = unreadCount != -1;
if (messagesForDialogs.locale != _.locale()) {
messagesForDialogs = {locale: _.locale()};
}
if (useCache && messagesForDialogs[msgID] !== undefined) { if (useCache && messagesForDialogs[msgID] !== undefined) {
return messagesForDialogs[msgID]; return messagesForDialogs[msgID];
} }