diff --git a/app/message-attachments/client/messageAttachment.js b/app/message-attachments/client/messageAttachment.js index edda441cfe365..024aa4f7762ee 100644 --- a/app/message-attachments/client/messageAttachment.js +++ b/app/message-attachments/client/messageAttachment.js @@ -1,9 +1,7 @@ -import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { DateFormat } from '../../lib'; -import { getUserPreference, getURL } from '../../utils/client'; -import { Users } from '../../models'; +import { getURL } from '../../utils/client'; import { renderMessageBody } from '../../ui-utils'; const colors = { @@ -27,15 +25,18 @@ Template.messageAttachment.helpers({ }); }, loadImage() { - if (this.downloadImages !== true) { - const user = Users.findOne({ _id: Meteor.userId() }, { fields: { 'settings.autoImageLoad': 1 } }); - if (getUserPreference(user, 'autoImageLoad') === false) { - return false; - } - if (Meteor.Device.isPhone() && getUserPreference(user, 'saveMobileBandwidth') !== true) { - return false; - } + if (this.downloadImages) { + return true; + } + + if (this.settings.autoImageLoad === false) { + return false; } + + if (this.settings.saveMobileBandwidth === true) { + return false; + } + return true; }, getImageHeight(height = 200) { @@ -54,7 +55,7 @@ Template.messageAttachment.helpers({ if (this.collapsed != null) { return this.collapsed; } - return getUserPreference(Meteor.userId(), 'collapseMediaByDefault') === true; + return this.settings.collapseMediaByDefault === true; }, time() { const messageDate = new Date(this.ts); diff --git a/app/ui-account/client/avatar/avatar.js b/app/ui-account/client/avatar/avatar.js index b60aab88fe337..6ea8531bde2af 100644 --- a/app/ui-account/client/avatar/avatar.js +++ b/app/ui-account/client/avatar/avatar.js @@ -10,7 +10,7 @@ const getUsername = ({ userId, username }) => { } if (userId) { - const user = Meteor.users.findOne(this.userId, { fields: { username: 1 } }); + const user = Meteor.users.findOne(userId, { fields: { username: 1 } }); return user && user.username; } }; diff --git a/app/ui-message/client/message.html b/app/ui-message/client/message.html index aac11cd6c0f84..edc698f35ed6c 100644 --- a/app/ui-message/client/message.html +++ b/app/ui-message/client/message.html @@ -89,7 +89,9 @@ {{/each}} {{/if}} {{#each msg.attachments}} - {{injectIndex . @index}} {{> messageAttachment}} + {{injectSettings . ../settings}} + {{injectIndex . @index}} + {{> messageAttachment}} {{/each}} {{#if msg.drid}} diff --git a/app/ui-message/client/message.js b/app/ui-message/client/message.js index 9488a734f70c1..f5cfdd511365b 100644 --- a/app/ui-message/client/message.js +++ b/app/ui-message/client/message.js @@ -368,6 +368,9 @@ Template.message.helpers({ injectIndex(data, index) { data.index = index; }, + injectSettings(data, settings) { + data.settings = settings; + }, channelName() { const { subscription } = this; // const subscription = Subscriptions.findOne({ rid: this.rid }); diff --git a/app/ui-utils/client/lib/MessageAction.js b/app/ui-utils/client/lib/MessageAction.js index 50ede5c8c9fb0..204dc667b1080 100644 --- a/app/ui-utils/client/lib/MessageAction.js +++ b/app/ui-utils/client/lib/MessageAction.js @@ -65,6 +65,8 @@ export const MessageAction = new class { return Tracker.nonreactive(() => { const btns = this.buttons.get(); btns[config.id] = config; + mem.clear(this._getButtons); + mem.clear(this._getButtonsByGroup); return this.buttons.set(btns); }); } @@ -94,14 +96,14 @@ export const MessageAction = new class { _getButtons = mem(function() { return _.sortBy(_.toArray(this.buttons.get()), 'order'); - }, { maxAge: 100 }) + }) - getButtons(message, context, group) { - let allButtons = this._getButtons(); + _getButtonsByGroup = mem(function(group) { + return this._getButtons().filter((button) => button.group === group); + }) - if (group) { - allButtons = allButtons.filter((button) => button.group === group); - } + getButtons(message, context, group) { + const allButtons = group ? this._getButtonsByGroup(group) : this._getButtons(); if (message) { return allButtons.filter(function(button) { @@ -115,6 +117,8 @@ export const MessageAction = new class { } resetButtons() { + mem.clear(this._getButtons); + mem.clear(this._getButtonsByGroup); return this.buttons.set({}); } diff --git a/app/ui-utils/client/lib/messageContext.js b/app/ui-utils/client/lib/messageContext.js index 4786c20e76ff8..34376ff016c1c 100644 --- a/app/ui-utils/client/lib/messageContext.js +++ b/app/ui-utils/client/lib/messageContext.js @@ -7,10 +7,13 @@ import { settings } from '../../../settings/client'; import { getUserPreference } from '../../../utils/client'; import { AutoTranslate } from '../../../autotranslate/client'; +const fields = { name: 1, username: 1, 'settings.autoImageLoad': 1, 'settings.saveMobileBandwidth': 1, 'settings.collapseMediaByDefault': 1, 'settings.hideRoles': 1 }; + export function messageContext({ rid } = Template.instance()) { const uid = Meteor.userId(); + const user = Users.findOne({ _id: uid }, { fields }); return { - u: Users.findOne({ _id: uid }, { fields: { name: 1, username: 1 } }) || {}, + u: user, room: Rooms.findOne({ _id: rid }, { reactive: false, fields: { @@ -27,11 +30,14 @@ export function messageContext({ rid } = Template.instance()) { }), settings: { translateLanguage: AutoTranslate.getLanguage(rid), + autoImageLoad: getUserPreference(user, 'saveMobileBandwidth'), + saveMobileBandwidth: Meteor.Device.isPhone() && getUserPreference(user, 'saveMobileBandwidth'), + collapseMediaByDefault: getUserPreference(user, 'collapseMediaByDefault'), showreply: true, showReplyButton: true, hasPermissionDeleteMessage: hasPermission('delete-message', rid), hasPermissionDeleteOwnMessage: hasPermission('delete-own-message'), - hideRoles: !settings.get('UI_DisplayRoles') || getUserPreference(uid, 'hideRoles'), + hideRoles: !settings.get('UI_DisplayRoles') || getUserPreference(user, 'hideRoles'), UI_Use_Real_Name: settings.get('UI_Use_Real_Name'), Chatops_Username: settings.get('Chatops_Username'), AutoTranslate_Enabled: settings.get('AutoTranslate_Enabled'),