TeaWeb/shared/js/ui/frames/side/ChannelFileBrowserController.ts
2020-12-21 20:07:09 +01:00

64 lines
No EOL
2.2 KiB
TypeScript

import {ConnectionHandler} from "tc-shared/ConnectionHandler";
import {Registry} from "tc-shared/events";
import {channelPathPrefix, FileBrowserEvents} from "tc-shared/ui/modal/transfer/FileDefinitions";
import {initializeRemoteFileBrowserController} from "tc-shared/ui/modal/transfer/FileBrowserControllerRemote";
import {ChannelFileBrowserUiEvents} from "tc-shared/ui/frames/side/ChannelFileBrowserDefinitions";
import {ChannelEntry} from "tc-shared/tree/Channel";
export class ChannelFileBrowserController {
readonly uiEvents: Registry<ChannelFileBrowserUiEvents>;
private currentConnection: ConnectionHandler;
private remoteBrowseEvents: Registry<FileBrowserEvents>;
private currentChannel: ChannelEntry;
constructor() {
this.uiEvents = new Registry<ChannelFileBrowserUiEvents>();
this.uiEvents.on("query_events", () => this.notifyEvents());
}
destroy() {
this.currentChannel = undefined;
this.setConnectionHandler(undefined);
}
setConnectionHandler(connection: ConnectionHandler) {
if(this.currentConnection === connection) {
return;
}
if(this.remoteBrowseEvents) {
this.remoteBrowseEvents.fire("notify_destroy");
this.remoteBrowseEvents.destroy();
}
this.currentConnection = connection;
if(connection) {
this.remoteBrowseEvents = new Registry<FileBrowserEvents>();
initializeRemoteFileBrowserController(connection, this.remoteBrowseEvents);
}
this.setChannel(undefined);
this.notifyEvents();
}
setChannel(channel: ChannelEntry | undefined) {
if(channel === this.currentChannel) {
return;
}
this.currentChannel = channel;
if(channel) {
this.remoteBrowseEvents?.fire("action_navigate_to", { path: "/" + channelPathPrefix + channel.channelId + "/" });
} else {
this.remoteBrowseEvents?.fire("action_navigate_to", { path: "/" });
}
}
private notifyEvents() {
this.uiEvents.fire_react("notify_events", { browserEvents: this.remoteBrowseEvents, channelId: this.currentChannel?.channelId });
}
}