import { getAliases } from '../core'; import { CommandGroup } from '../classes/CommandGroup'; import type { CommandEntry } from '../classes/CommandGroup'; import type { WindowsRenameArgs, WindowsCloseArgs, WindowsOpenArgs } from '../types'; export class WindowsCommands extends CommandGroup { readonly namespace = "windows"; readonly commands: Record = { "windows.list": () => this.windowsList(), "windows.rename": (a: WindowsRenameArgs) => this.windowsRename(a), "windows.close": (a: WindowsCloseArgs) => this.windowsClose(a), "windows.open": (a: WindowsOpenArgs) => this.windowsOpen(a), }; private async windowsList() { const windows = await chrome.windows.getAll({ populate: true }); const aliases = await getAliases(); return windows.map(w => ({ id: w.id, alias: aliases[w.id] || null, focused: w.focused, state: w.state, tabCount: (w.tabs || []).length, })); } private async windowsRename({ windowId, name }: WindowsRenameArgs) { const aliases = await getAliases(); aliases[windowId] = name; await chrome.storage.local.set({ windowAliases: aliases }); return { windowId, name }; } private async windowsClose({ windowId }: WindowsCloseArgs) { await chrome.windows.remove(windowId); return { windowId }; } private async windowsOpen({ url }: WindowsOpenArgs) { const createData: chrome.windows.CreateData = { focused: true }; if (url) createData.url = url; const w = await chrome.windows.create(createData); return { id: w.id }; } }