Skip to content
Snippets Groups Projects
rocketchat.js 30.9 KiB
Newer Older
Diego Mello's avatar
Diego Mello committed
		if (follow) {
Diego Mello's avatar
Diego Mello committed
			return this.sdk.post('chat.followMessage', { mid });
Diego Mello's avatar
Diego Mello committed
		}
Diego Mello's avatar
Diego Mello committed
		return this.sdk.post('chat.unfollowMessage', { mid });
Diego Mello's avatar
Diego Mello committed
	},
Diego Mello's avatar
Diego Mello committed
	getThreadsList({ rid, count, offset }) {
Diego Mello's avatar
Diego Mello committed
		// RC 1.0
Diego Mello's avatar
Diego Mello committed
		return this.sdk.get('chat.getThreadsList', {
			rid, count, offset, sort: { ts: -1 }
		});
	},
	getSyncThreadsList({ rid, updatedSince }) {
		// RC 1.0
		return this.sdk.get('chat.syncThreadsList', {
			rid, updatedSince
		});
	runSlashCommand(command, roomId, params, triggerId, tmid) {
		// RC 0.60.2
		return this.sdk.post('commands.run', {
			command, roomId, params, triggerId, tmid
		});
	},
	getCommandPreview(command, roomId, params) {
		// RC 0.65.0
		return this.sdk.get('commands.preview', {
			command, roomId, params
		});
	},
	executeCommandPreview(command, params, roomId, previewItem, triggerId, tmid) {
		// RC 0.65.0
		return this.sdk.post('commands.preview', {
			command, params, roomId, previewItem, triggerId, tmid
	_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;
	},
	getRoomAvatar(room) {
		return room.prid ? room.fname : room.name;
	},
Diego Mello's avatar
Diego Mello committed

	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;