93 lines
2.8 KiB
Python
93 lines
2.8 KiB
Python
import os
|
|
from utils.roam import modus_service
|
|
|
|
|
|
class AppName:
|
|
def __init__(self, path="/usr/share/applications"):
|
|
self.files = os.listdir(path)
|
|
self.path = path
|
|
|
|
def get_app_name(self, wmclass, format_=False):
|
|
desktop_file = ""
|
|
for f in self.files:
|
|
if f.startswith(wmclass + ".desktop"):
|
|
desktop_file = f
|
|
|
|
desktop_app_name = wmclass
|
|
|
|
if desktop_file == "":
|
|
return wmclass
|
|
with open(os.path.join(self.path, desktop_file), "r") as f:
|
|
lines = f.readlines()
|
|
for line in lines:
|
|
if line.startswith("Name="):
|
|
desktop_app_name = line.split("=")[1].strip()
|
|
break
|
|
return desktop_app_name
|
|
|
|
def get_app_exec(self, wmclass, format_=False):
|
|
desktop_file = ""
|
|
for f in self.files:
|
|
if f.startswith(wmclass + ".desktop"):
|
|
desktop_file = f
|
|
|
|
desktop_app_name = wmclass
|
|
|
|
if desktop_file == "":
|
|
return wmclass
|
|
with open(os.path.join(self.path, desktop_file), "r") as f:
|
|
lines = f.readlines()
|
|
for line in lines:
|
|
if line.startswith("Exec="):
|
|
desktop_app_name = line.split("=")[1].strip()
|
|
break
|
|
return desktop_app_name
|
|
|
|
def get_desktop_file(self, wmclass):
|
|
desktop_file = ""
|
|
for f in self.files:
|
|
if f.startswith(wmclass + ".desktop"):
|
|
desktop_file = f
|
|
return desktop_file
|
|
|
|
def format_app_name(self, title, wmclass, update=False):
|
|
# Handle case when both title and wmclass are empty (no active window)
|
|
if not title and not wmclass:
|
|
name = "Finder"
|
|
else:
|
|
name = wmclass
|
|
if name == "":
|
|
name = title
|
|
|
|
# Try to get the proper app name from desktop file only if wmclass is not empty
|
|
if wmclass:
|
|
name = self.get_app_name(wmclass=wmclass)
|
|
|
|
# Smart title formatting (capitalize first letter)
|
|
name = str(name).title()
|
|
if "." in name:
|
|
name = name.split(".")[-1]
|
|
|
|
if update:
|
|
modus_service.current_active_app_name = name
|
|
return name
|
|
|
|
|
|
# Create a global instance for use across modules
|
|
app_name_resolver = AppName()
|
|
|
|
|
|
def format_window(title, wmclass):
|
|
# Handle the case when HyprlandActiveWindow passes "unknown" instead of empty strings
|
|
if (not title or title == "unknown") and (not wmclass or wmclass == "unknown"):
|
|
return "Finder"
|
|
|
|
# Clean up "unknown" values
|
|
if title == "unknown":
|
|
title = ""
|
|
if wmclass == "unknown":
|
|
wmclass = ""
|
|
|
|
name = app_name_resolver.format_app_name(title, wmclass, True)
|
|
return name
|