async startStream( twitchStream, quality ) {
		const { /** @type {DS.Store} */ store } = this;

		await twitchStream.user.promise;
		/** @type {TwitchUser} */
		const user = twitchStream.user.content;

		const { id } = user;
		/** @type {Stream} */
		let stream;

		// is the stream already running?
		if ( store.hasRecordForId( "stream", id ) ) {
			stream = store.peekRecord( "stream", id );

			if ( quality !== undefined && stream.quality !== quality ) {
				set( stream, "quality", quality );
			}

			// re-open modal streaming dialog of current stream
			this.modal.openModal( "streaming", stream );
			return;
		}

		// create a new Stream record
		stream = store.createRecord( "stream", {
			id,
			user,
			stream: twitchStream,
			quality: this.settings.content.streaming.quality,
			low_latency: this.settings.content.streaming.low_latency,
			disable_ads: this.settings.content.streaming.disable_ads,
			chat_open: this.settings.content.streams.chat_open,
			started: new Date()
		});

		// open modal streaming dialog with the newly created stream record as context
		this.modal.promiseModal( "streaming", stream )
			.then( () => {
				// clean up if the modal gets closed and the stream has ended
				if ( !stream.isDeleted && stream.hasEnded ) {
					stream.destroyRecord();
				}
			});

		// override record with channel specific settings
		await this.getChannelSettings( stream, quality );

		await this.launchStream( stream, true );
	}
@param {TwitchStream} twitchStream
@param {string?} quality
@return {Promise}