41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
import Apps from "gi://AstalApps"
 | 
						|
import AstalHyprland from "gi://AstalHyprland";
 | 
						|
 | 
						|
const app_icons = new Apps.Apps().list.reduce(
 | 
						|
    (acc, app) => {
 | 
						|
        if (app.icon_name) {
 | 
						|
            acc.classOrNames[app.wm_class ?? app.name] = app.icon_name;
 | 
						|
            acc.executables[app.executable] = app.icon_name;
 | 
						|
        }
 | 
						|
        return acc;
 | 
						|
    },
 | 
						|
    { classOrNames: {}, executables: {} },
 | 
						|
);
 | 
						|
 | 
						|
export function getIconName(client: AstalHyprland.Client) {
 | 
						|
    if (!client) {
 | 
						|
        return "";
 | 
						|
    }
 | 
						|
 | 
						|
    let icon = app_icons.classOrNames[client.class];
 | 
						|
    if (!icon) {
 | 
						|
        const icon_key = Object.keys(app_icons.classOrNames).find(
 | 
						|
            (key) =>
 | 
						|
                key.includes(client.title) ||
 | 
						|
                key.includes(client.initialTitle) ||
 | 
						|
                key.includes(client.initialClass) ||
 | 
						|
                key.includes(client.class),
 | 
						|
        );
 | 
						|
        if (icon_key) {
 | 
						|
            icon = app_icons.classOrNames[icon_key];
 | 
						|
            app_icons.classOrNames[client.class] = icon;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    if (!icon) {
 | 
						|
        app_icons.classOrNames[client.class] = "";
 | 
						|
    }
 | 
						|
 | 
						|
    return icon;
 | 
						|
}
 |