async _notificationClick( streams, action ) {
		if ( action === ATTR_NOTIFY_CLICK_NOOP ) {
			return;
		}

		await logDebug( "Notification click", () => ({
			action,
			streams: streams.mapBy( "id" )
		}) );

		// restore the window
		if ( this.settings.content.notification.click_restore ) {
			setMinimized( false );
			setVisibility( true );
			setFocused( true );
		}

		if ( action === ATTR_NOTIFY_CLICK_FOLLOWED ) {
			this.router.transitionTo( "user.followedStreams" );

		} else if ( action === ATTR_NOTIFY_CLICK_STREAM ) {
			const { streaming } = this;
			await Promise.all( streams.map( async stream => {
				// don't await startStream promise and ignore errors
				streaming.startStream( stream )
					.catch( () => {} );
			}) );

		} else if ( action === ATTR_NOTIFY_CLICK_STREAMANDCHAT ) {
			const { streaming, chat } = this;
			const openGlobal = this.settings.content.streams.chat_open;

			await Promise.all( streams.map( async stream => {
				const { streams_chat_open: openChannel } = await stream.getChannelSettings();

				// don't await startStream promise and ignore errors
				streaming.startStream( stream )
					.catch( () => {} );

				// TODO: refactor startStream and add another parameter to force opening the chat
				// chat was already opened by startStream() if
				// 1. openGlobal is false and openChannel is true
				// 2. openGlobal is true and openChannel is null
				// 3. openGlobal is true and openChannel is true
				// so open it only if
				// 4. openGlobal is false and openChannel is null
				// 5. openGlobal is false and openChannel is false
				// 6. openGlobal is true and openChannel is false
				if ( openGlobal && openChannel === null || openChannel === true ) {
					return;
				}
				// don't await openChat promise and ignore errors
				chat.openChat( get( stream, "user.login" ) )
					.catch( () => {} );
			}) );
		}
	}
Notfication click callback
@param {TwitchStream[]} streams
@param {Number} action
@returns {Promise}