Skip to content
Snippets Groups Projects
rocketchat.js 29.8 KiB
Newer Older
	_setUser(ddpMessage) {
		this.activeUsers = this.activeUsers || {};
		const { user } = reduxStore.getState().login;

		if (ddpMessage.fields && user && user.id === ddpMessage.id) {
			reduxStore.dispatch(setUser(ddpMessage.fields));
		}

		if (ddpMessage.cleared && user && user.id === ddpMessage.id) {
			reduxStore.dispatch(setUser({ status: 'offline' }));
		}

		if (!this._setUserTimer) {
			this._setUserTimer = setTimeout(() => {
				const activeUsersBatch = this.activeUsers;
				InteractionManager.runAfterInteractions(() => {
					reduxStore.dispatch(setActiveUsers(activeUsersBatch));
				});
				this._setUserTimer = null;
				return this.activeUsers = {};
			}, 10000);
		}

		if (!ddpMessage.fields) {
			this.activeUsers[ddpMessage.id] = 'offline';
		} else if (ddpMessage.fields.status) {
			this.activeUsers[ddpMessage.id] = ddpMessage.fields.status;
		}
	},
	getUserPresence() {
		return new Promise(async(resolve) => {
			const serverVersion = reduxStore.getState().server.version;
			// if server is lower than 1.1.0
			if (serverVersion && semver.lt(semver.coerce(serverVersion), '1.1.0')) {
				if (this.activeUsersSubTimeout) {
					clearTimeout(this.activeUsersSubTimeout);
					this.activeUsersSubTimeout = false;
				}
				this.activeUsersSubTimeout = setTimeout(() => {
					this.sdk.subscribe('activeUsers');
				}, 5000);
				return resolve();
			} else {
				const params = {};
				// if (this.lastUserPresenceFetch) {
				// 	params.from = this.lastUserPresenceFetch.toISOString();
				// }

				// RC 1.1.0
				const result = await this.sdk.get('users.presence', params);
				if (result.success) {
					const activeUsers = result.users.reduce((ret, item) => {
						ret[item._id] = item.status;
						return ret;
					}, {});
					InteractionManager.runAfterInteractions(() => {
						reduxStore.dispatch(setActiveUsers(activeUsers));
					this.sdk.subscribe('stream-notify-logged', 'user-status');
					return resolve();
				}
	},
	getDirectory({
		query, count, offset, sort
	}) {
		// RC 1.0
		return this.sdk.get('directory', {
			query, count, offset, sort
		});
	async canAutoTranslate() {
		const db = database.active;
		try {
			const AutoTranslate_Enabled = reduxStore.getState().settings && reduxStore.getState().settings.AutoTranslate_Enabled;
			if (!AutoTranslate_Enabled) {
				return false;
			}
			const permissionsCollection = db.collections.get('permissions');
			const autoTranslatePermission = await permissionsCollection.find('auto-translate');
			const userRoles = (reduxStore.getState().login.user && reduxStore.getState().login.user.roles) || [];
			return autoTranslatePermission.roles.some(role => userRoles.includes(role));
		} catch (e) {
			log(e);
			return false;
		}
	},
	saveAutoTranslate({
		rid, field, value, options
	}) {
		return this.sdk.methodCall('autoTranslate.saveSettings', rid, field, value, options);
	},
	getSupportedLanguagesAutoTranslate() {
		return this.sdk.methodCall('autoTranslate.getSupportedLanguages', 'en');
	},
	translateMessage(message, targetLanguage) {
		return this.sdk.methodCall('autoTranslate.translateMessage', message, targetLanguage);
Diego Mello's avatar
Diego Mello committed
	},
	getRoomTitle(room) {
		const { UI_Use_Real_Name: useRealName } = reduxStore.getState().settings;
		return ((room.prid || useRealName) && room.fname) || room.name;
	},

	findOrCreateInvite({ rid, days, maxUses }) {
		// RC 2.4.0
		return this.sdk.post('findOrCreateInvite', { rid, days, maxUses });
	},
	validateInviteToken(token) {
		// RC 2.4.0
		return this.sdk.post('validateInviteToken', { token });
	},
	useInviteToken(token) {
		// RC 2.4.0
		return this.sdk.post('useInviteToken', { token });
};

export default RocketChat;