fix: harden notification application rule integration
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import QtQuick
|
||||
|
||||
import qs.config
|
||||
import qs.services
|
||||
|
||||
ShellRoot {
|
||||
id: root
|
||||
|
||||
function notification(idValue: int, desktopEntryValue: string, appNameValue: string): var {
|
||||
const closeHandlers = [];
|
||||
return {
|
||||
id: idValue,
|
||||
desktopEntry: desktopEntryValue,
|
||||
appName: appNameValue,
|
||||
appIcon: "",
|
||||
transient: false,
|
||||
lastGeneration: false,
|
||||
tracked: false,
|
||||
dismissed: false,
|
||||
closed: {
|
||||
connect: callback => closeHandlers.push(callback)
|
||||
},
|
||||
dismiss: function() {
|
||||
this.dismissed = true;
|
||||
for (const callback of closeHandlers)
|
||||
callback();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function resetNotifications(): void {
|
||||
Notifs.history = [];
|
||||
Notifs.popups = [];
|
||||
Notifs.unreadCount = 0;
|
||||
Notifs.doNotDisturb = false;
|
||||
}
|
||||
|
||||
function reset(): void {
|
||||
root.resetNotifications();
|
||||
Notifs.fallbackAppRules = {};
|
||||
Notifs.rememberedApplications = {};
|
||||
DesktopPreferences.set("notificationAppRules", {});
|
||||
}
|
||||
|
||||
IpcHandler {
|
||||
target: "notification-app-rules-test"
|
||||
|
||||
function exercise(): string {
|
||||
root.reset();
|
||||
|
||||
const signal = root.notification(1, "org.signal.Signal.desktop", "Signal");
|
||||
Notifs.handleNotification(signal);
|
||||
const appId = Notifs.notificationAppId(signal);
|
||||
const initialRules = DesktopPreferences.get("notificationAppRules");
|
||||
|
||||
root.resetNotifications();
|
||||
Notifs.setAppRule(appId, { enabled: false });
|
||||
const muted = root.notification(2, "org.signal.Signal.desktop", "Signal");
|
||||
Notifs.handleNotification(muted);
|
||||
const mutedResult = {
|
||||
tracked: muted.tracked,
|
||||
history: Notifs.history.length,
|
||||
popups: Notifs.popups.length,
|
||||
unread: Notifs.unreadCount
|
||||
};
|
||||
|
||||
root.reset();
|
||||
Notifs.doNotDisturb = true;
|
||||
const dnd = root.notification(3, "org.signal.Signal.desktop", "Signal");
|
||||
Notifs.handleNotification(dnd);
|
||||
|
||||
Notifs.setAppRule("org.privacy.App.desktop", {
|
||||
showOnLockScreen: false,
|
||||
showContentOnLockScreen: false
|
||||
});
|
||||
const privateNotification = root.notification(4, "org.privacy.App.desktop", "Private");
|
||||
|
||||
return JSON.stringify({
|
||||
appId: appId,
|
||||
initialRules: initialRules,
|
||||
muted: mutedResult,
|
||||
dnd: {
|
||||
tracked: dnd.tracked,
|
||||
history: Notifs.history.length,
|
||||
popups: Notifs.popups.length,
|
||||
unread: Notifs.unreadCount
|
||||
},
|
||||
privacy: {
|
||||
visible: Notifs.shouldShowOnLockScreen(privateNotification),
|
||||
content: Notifs.shouldShowContentOnLockScreen(privateNotification)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function persist(): string {
|
||||
root.reset();
|
||||
const notification = root.notification(5, "org.persist.App.desktop", "Persist");
|
||||
Notifs.handleNotification(notification);
|
||||
Notifs.setAppRule("org.persist.App.desktop", {
|
||||
enabled: false,
|
||||
showOnLockScreen: true,
|
||||
showContentOnLockScreen: false
|
||||
});
|
||||
return JSON.stringify(DesktopPreferences.get("notificationAppRules"));
|
||||
}
|
||||
|
||||
function restored(): string {
|
||||
return JSON.stringify(DesktopPreferences.get("notificationAppRules"));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user