Skip to content

Commit

Permalink
Remember last open server tab
Browse files Browse the repository at this point in the history
Also move opentabs config field into app section

Issue #199
  • Loading branch information
qu1ck committed May 12, 2024
1 parent 1f79360 commit ba63c3a
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 14 deletions.
2 changes: 1 addition & 1 deletion src/components/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ export default function TauriApp() {
const tabsRef = useRef<ServerTabsRef>(null);

const [currentServer, setCurrentServer] = useState<ServerConfig | undefined>(
config.getServer(config.getOpenTabs()[0]));
config.getServer(config.getLastOpenTab()));
const [servers, setServers] = useState(config.getServers());

const [showServerConfig, serverConfigHandlers] = useDisclosure(false);
Expand Down
14 changes: 9 additions & 5 deletions src/components/servertabs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@ export const ServerTabs = React.forwardRef<ServerTabsRef, ServerTabsProps>(funct

const [tabs, setTabs] = useState({
openTabs: config.getOpenTabs(),
currentTab: config.getOpenTabs().length > 0 ? 0 : -1,
currentTab: config.values.app.lastTab,
});

useEffect(() => {
config.setOpenTabs(tabs.openTabs);
config.setOpenTabs(tabs.openTabs, tabs.currentTab);
if (tabs.currentTab < 0) {
void appWindow.setTitle("Transmission GUI");
}
Expand Down Expand Up @@ -129,19 +129,23 @@ export const ServerTabs = React.forwardRef<ServerTabsRef, ServerTabsProps>(funct
const onServersChange = useRef<(s: ServerConfig[]) => void>();
onServersChange.current = useCallback((servers: ServerConfig[]) => {
const newOpenTabs: string[] = [];
let newCurrentTab = 0;
tabs.openTabs.forEach((serverName) => {
props.clientManager.close(serverName);
if (servers.find((s) => s.name === serverName) !== undefined) {
props.clientManager.open(serverName, config.values.app.toastNotifications, config.values.app.toastNotificationSound);
newOpenTabs.push(serverName);
if (serverName === tabs.openTabs[tabs.currentTab]) {
newCurrentTab = newOpenTabs.length - 1;
}
}
});
setTabs({
openTabs: newOpenTabs,
currentTab: 0,
currentTab: newCurrentTab,
});
setCurrentServer(config.getServer(newOpenTabs[0]));
}, [tabs.openTabs, setCurrentServer, config, props.clientManager]);
setCurrentServer(config.getServer(newOpenTabs[newCurrentTab]));
}, [tabs, setCurrentServer, config, props.clientManager]);

useEffect(() => {
onServersChange.current?.(props.servers);
Expand Down
32 changes: 24 additions & 8 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,12 +123,14 @@ export interface StyleOverrides {

interface Settings {
servers: ServerConfig[],
openTabs: string[],
openTabs?: string[], // moved into app
app: {
window: {
size: [number, number],
position: [number, number] | undefined,
},
openTabs: string[],
lastTab: number,
deleteAdded: boolean,
toastNotifications: boolean,
toastNotificationSound: boolean,
Expand Down Expand Up @@ -216,12 +218,13 @@ const DefaultTrackerList = [

const DefaultSettings: Settings = {
servers: [],
openTabs: [],
app: {
window: {
size: [1024, 800],
position: undefined,
},
openTabs: [],
lastTab: 0,
deleteAdded: false,
toastNotifications: true,
toastNotificationSound: true,
Expand Down Expand Up @@ -300,18 +303,26 @@ export class Config {
overrides[this.values.interface.theme ?? "light"].backgroundColor = overrides.backgroundColor;
overrides.backgroundColor = undefined;
}
if (this.values.openTabs !== undefined) {
this.values.app.openTabs = this.values.openTabs;
this.values.openTabs = undefined;
}
} catch (e) {
console.log(e);
}

// sanitize data
this.values.openTabs = this.values.openTabs.filter(
this.values.app.openTabs = this.values.app.openTabs.filter(
(name) => this.values.servers.find((s) => s.name === name) !== undefined,
);

this.values.servers = this.values.servers.map(
(s) => ({ ...s, connection: { ...s.connection, password: deobfuscate(s.connection.password) } }));

if (this.values.app.lastTab >= this.values.app.openTabs.length) {
this.values.app.lastTab = -1;
}

return this;
}

Expand Down Expand Up @@ -344,23 +355,28 @@ export class Config {
}

getOpenServers(): ServerConfig[] {
return this.values.servers.filter((s) => this.values.openTabs.includes(s.name));
return this.values.servers.filter((s) => this.values.app.openTabs.includes(s.name));
}

setServers(servers: ServerConfig[]) {
this.values.servers = servers;
}

getServer(name: string): ServerConfig | undefined {
getServer(name: string | undefined): ServerConfig | undefined {
return this.values.servers.find((s) => s.name === name);
}

getOpenTabs() {
return this.values.openTabs;
return this.values.app.openTabs;
}

getLastOpenTab(): string | undefined {
return this.values.app.openTabs[this.values.app.lastTab];
}

setOpenTabs(tabs: string[]) {
this.values.openTabs = tabs;
setOpenTabs(tabs: string[], current: number) {
this.values.app.openTabs = tabs;
this.values.app.lastTab = current;
}

setTableColumnSizes(table: TableName, sizes: ColumnSizingState) {
Expand Down

0 comments on commit ba63c3a

Please sign in to comment.