Merge branch 'develop' of github.com:matrix-org/matrix-react-sdk into t3chguy/feat/widgets
Conflicts: res/css/views/rooms/_AppsDrawer.scss src/components/views/elements/AppTile.js src/components/views/rooms/AppsDrawer.jspull/21833/head
						commit
						d36fafd0c6
					
				|  | @ -201,10 +201,14 @@ export default class AppTile extends React.Component { | |||
|             this.iframe.src = 'about:blank'; | ||||
|         } | ||||
| 
 | ||||
|         if (WidgetType.JITSI.matches(this.props.app.type)) { | ||||
|             dis.dispatch({action: 'hangup_conference'}); | ||||
|         } | ||||
| 
 | ||||
|         // Delete the widget from the persisted store for good measure.
 | ||||
|         PersistedElement.destroyElement(this._persistKey); | ||||
| 
 | ||||
|         this._sgWidget.stop(); | ||||
|         this._sgWidget.stop({forceDestroy: true}); | ||||
|     } | ||||
| 
 | ||||
|     _onWidgetPrepared = () => { | ||||
|  |  | |||
|  | @ -58,6 +58,11 @@ export default class PersistentApp extends React.Component { | |||
|             const persistentWidgetInRoomId = ActiveWidgetStore.getRoomId(this.state.persistentWidgetId); | ||||
|             if (this.state.roomId !== persistentWidgetInRoomId) { | ||||
|                 const persistentWidgetInRoom = MatrixClientPeg.get().getRoom(persistentWidgetInRoomId); | ||||
| 
 | ||||
|                 // Sanity check the room - the widget may have been destroyed between render cycles, and
 | ||||
|                 // thus no room is associated anymore.
 | ||||
|                 if (!persistentWidgetInRoom) return null; | ||||
| 
 | ||||
|                 // get the widget data
 | ||||
|                 const appEvent = WidgetUtils.getRoomWidgets(persistentWidgetInRoom).find((ev) => { | ||||
|                     return ev.getStateKey() === ActiveWidgetStore.getPersistentWidgetId(); | ||||
|  |  | |||
|  | @ -105,10 +105,13 @@ export default abstract class BaseEventIndexManager { | |||
|     /** | ||||
|      * Initialize the event index for the given user. | ||||
|      * | ||||
|      * @param {string} userId The event that should be added to the index. | ||||
|      * @param {string} deviceId The profile of the event sender at the | ||||
|      * | ||||
|      * @return {Promise} A promise that will resolve when the event index is | ||||
|      * initialized. | ||||
|      */ | ||||
|     async initEventIndex(): Promise<void> { | ||||
|     async initEventIndex(userId: string, deviceId: string): Promise<void> { | ||||
|         throw new Error("Unimplemented"); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ limitations under the License. | |||
| 
 | ||||
| import PlatformPeg from "../PlatformPeg"; | ||||
| import EventIndex from "../indexing/EventIndex"; | ||||
| import {MatrixClientPeg} from "../MatrixClientPeg"; | ||||
| import SettingsStore from '../settings/SettingsStore'; | ||||
| import {SettingLevel} from "../settings/SettingLevel"; | ||||
| 
 | ||||
|  | @ -70,9 +71,13 @@ class EventIndexPeg { | |||
|     async initEventIndex() { | ||||
|         const index = new EventIndex(); | ||||
|         const indexManager = PlatformPeg.get().getEventIndexingManager(); | ||||
|         const client = MatrixClientPeg.get(); | ||||
| 
 | ||||
|         const userId = client.getUserId(); | ||||
|         const deviceId = client.getDeviceId(); | ||||
| 
 | ||||
|         try { | ||||
|             await indexManager.initEventIndex(); | ||||
|             await indexManager.initEventIndex(userId, deviceId); | ||||
| 
 | ||||
|             const userVersion = await indexManager.getUserVersion(); | ||||
|             const eventIndexIsEmpty = await indexManager.isEventIndexEmpty(); | ||||
|  | @ -83,7 +88,7 @@ class EventIndexPeg { | |||
|                 await indexManager.closeEventIndex(); | ||||
|                 await this.deleteEventIndex(); | ||||
| 
 | ||||
|                 await indexManager.initEventIndex(); | ||||
|                 await indexManager.initEventIndex(userId, deviceId); | ||||
|                 await indexManager.setUserVersion(INDEX_VERSION); | ||||
|             } | ||||
| 
 | ||||
|  |  | |||
|  | @ -74,6 +74,16 @@ class ElementWidget extends Widget { | |||
|         return super.templateUrl; | ||||
|     } | ||||
| 
 | ||||
|     public get popoutTemplateUrl(): string { | ||||
|         if (WidgetType.JITSI.matches(this.type)) { | ||||
|             return WidgetUtils.getLocalJitsiWrapperUrl({ | ||||
|                 forLocalRender: false, // The only important difference between this and templateUrl()
 | ||||
|                 auth: super.rawData?.auth, | ||||
|             }); | ||||
|         } | ||||
|         return this.templateUrl; // use this instead of super to ensure we get appropriate templating
 | ||||
|     } | ||||
| 
 | ||||
|     public get rawData(): IWidgetData { | ||||
|         let conferenceId = super.rawData['conferenceId']; | ||||
|         if (conferenceId === undefined) { | ||||
|  | @ -94,8 +104,8 @@ class ElementWidget extends Widget { | |||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     public getCompleteUrl(params: ITemplateParams): string { | ||||
|         return runTemplate(this.templateUrl, { | ||||
|     public getCompleteUrl(params: ITemplateParams, asPopout=false): string { | ||||
|         return runTemplate(asPopout ? this.popoutTemplateUrl : this.templateUrl, { | ||||
|             // we need to supply a whole widget to the template, but don't have
 | ||||
|             // easy access to the definition the superclass is using, so be sad
 | ||||
|             // and gutwrench it.
 | ||||
|  | @ -109,7 +119,7 @@ class ElementWidget extends Widget { | |||
| 
 | ||||
| export class StopGapWidget extends EventEmitter { | ||||
|     private messaging: ClientWidgetApi; | ||||
|     private mockWidget: Widget; | ||||
|     private mockWidget: ElementWidget; | ||||
|     private scalarToken: string; | ||||
| 
 | ||||
|     constructor(private appTileProps: IAppTileProps) { | ||||
|  | @ -133,12 +143,23 @@ export class StopGapWidget extends EventEmitter { | |||
|      * The URL to use in the iframe | ||||
|      */ | ||||
|     public get embedUrl(): string { | ||||
|         return this.runUrlTemplate({asPopout: false}); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * The URL to use in the popout | ||||
|      */ | ||||
|     public get popoutUrl(): string { | ||||
|         return this.runUrlTemplate({asPopout: true}); | ||||
|     } | ||||
| 
 | ||||
|     private runUrlTemplate(opts = {asPopout: false}): string { | ||||
|         const templated = this.mockWidget.getCompleteUrl({ | ||||
|             currentRoomId: RoomViewStore.getRoomId(), | ||||
|             currentUserId: MatrixClientPeg.get().getUserId(), | ||||
|             userDisplayName: OwnProfileStore.instance.displayName, | ||||
|             userHttpAvatarUrl: OwnProfileStore.instance.getHttpAvatarUrl(), | ||||
|         }); | ||||
|         }, opts?.asPopout); | ||||
| 
 | ||||
|         // Add in some legacy support sprinkles
 | ||||
|         // TODO: Replace these with proper widget params
 | ||||
|  | @ -158,19 +179,6 @@ export class StopGapWidget extends EventEmitter { | |||
|         return parsed.toString().replace(/%24/g, '$'); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * The URL to use in the popout | ||||
|      */ | ||||
|     public get popoutUrl(): string { | ||||
|         if (WidgetType.JITSI.matches(this.mockWidget.type)) { | ||||
|             return WidgetUtils.getLocalJitsiWrapperUrl({ | ||||
|                 forLocalRender: false, | ||||
|                 auth: this.mockWidget.rawData?.auth, | ||||
|             }); | ||||
|         } | ||||
|         return this.embedUrl; | ||||
|     } | ||||
| 
 | ||||
|     public get isManagedByManager(): boolean { | ||||
|         return !!this.scalarToken; | ||||
|     } | ||||
|  | @ -275,8 +283,8 @@ export class StopGapWidget extends EventEmitter { | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public stop() { | ||||
|         if (ActiveWidgetStore.getPersistentWidgetId() === this.mockWidget.id) { | ||||
|     public stop(opts = {forceDestroy: false}) { | ||||
|         if (!opts?.forceDestroy && ActiveWidgetStore.getPersistentWidgetId() === this.mockWidget.id) { | ||||
|             console.log("Skipping destroy - persistent widget"); | ||||
|             return; | ||||
|         } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Michael Telatynski
						Michael Telatynski