summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker
diff options
context:
space:
mode:
authorAlexanderCurl <alexc@alexc.hu>2026-04-18 17:46:06 +0100
committerAlexanderCurl <alexc@alexc.hu>2026-04-18 17:46:06 +0100
commit70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 (patch)
treeab1123d4067c1b086dd6faa7ee4ea643236b565a /raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker
parent5d94c0a7d44a2255b81815a52a7056a94a39842d (diff)
downloadRaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.tar.gz
RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.zip
Replaced file structures for themes in the correct format
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker')
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/handlers.go51
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/manager.go48
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/models.go8
3 files changed, 107 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/handlers.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/handlers.go
new file mode 100644
index 0000000..007ab3e
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/handlers.go
@@ -0,0 +1,51 @@
+package apppicker
+
+import (
+ "net"
+
+ "github.com/AvengeMedia/DankMaterialShell/core/internal/log"
+ "github.com/AvengeMedia/DankMaterialShell/core/internal/server/models"
+)
+
+func HandleRequest(conn net.Conn, req models.Request, manager *Manager) {
+ switch req.Method {
+ case "apppicker.open", "browser.open":
+ handleOpen(conn, req, manager)
+ default:
+ models.RespondError(conn, req.ID, "unknown method")
+ }
+}
+
+func handleOpen(conn net.Conn, req models.Request, manager *Manager) {
+ log.Infof("AppPicker: Received %s request with params: %+v", req.Method, req.Params)
+
+ target, ok := models.Get[string](req, "target")
+ if !ok {
+ target, ok = models.Get[string](req, "url")
+ if !ok {
+ log.Warnf("AppPicker: Invalid target parameter in request")
+ models.RespondError(conn, req.ID, "invalid target parameter")
+ return
+ }
+ }
+
+ event := OpenEvent{
+ Target: target,
+ RequestType: models.GetOr(req, "requestType", "url"),
+ MimeType: models.GetOr(req, "mimeType", ""),
+ }
+
+ if categories, ok := models.Get[[]any](req, "categories"); ok {
+ event.Categories = make([]string, 0, len(categories))
+ for _, cat := range categories {
+ if catStr, ok := cat.(string); ok {
+ event.Categories = append(event.Categories, catStr)
+ }
+ }
+ }
+
+ log.Infof("AppPicker: Broadcasting event: %+v", event)
+ manager.RequestOpen(event)
+ models.Respond(conn, req.ID, "ok")
+ log.Infof("AppPicker: Request handled successfully")
+}
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/manager.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/manager.go
new file mode 100644
index 0000000..bde0846
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/manager.go
@@ -0,0 +1,48 @@
+package apppicker
+
+import (
+ "sync"
+
+ "github.com/AvengeMedia/DankMaterialShell/core/pkg/syncmap"
+)
+
+type Manager struct {
+ subscribers syncmap.Map[string, chan OpenEvent]
+ closeOnce sync.Once
+}
+
+func NewManager() *Manager {
+ return &Manager{}
+}
+
+func (m *Manager) Subscribe(id string) chan OpenEvent {
+ ch := make(chan OpenEvent, 16)
+ m.subscribers.Store(id, ch)
+ return ch
+}
+
+func (m *Manager) Unsubscribe(id string) {
+ if val, ok := m.subscribers.LoadAndDelete(id); ok {
+ close(val)
+ }
+}
+
+func (m *Manager) RequestOpen(event OpenEvent) {
+ m.subscribers.Range(func(key string, ch chan OpenEvent) bool {
+ select {
+ case ch <- event:
+ default:
+ }
+ return true
+ })
+}
+
+func (m *Manager) Close() {
+ m.closeOnce.Do(func() {
+ m.subscribers.Range(func(key string, ch chan OpenEvent) bool {
+ close(ch)
+ m.subscribers.Delete(key)
+ return true
+ })
+ })
+}
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/models.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/models.go
new file mode 100644
index 0000000..8861461
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/server/apppicker/models.go
@@ -0,0 +1,8 @@
+package apppicker
+
+type OpenEvent struct {
+ Target string `json:"target"`
+ MimeType string `json:"mimeType,omitempty"`
+ Categories []string `json:"categories,omitempty"`
+ RequestType string `json:"requestType"`
+}