summaryrefslogtreecommitdiff
path: root/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modals/BrowserPickerModal.qml
blob: e4afcb840d3006b924c98f3fc7db9c7220fc0620 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import QtQuick
import Quickshell
import qs.Common
import qs.Modals

AppPickerModal {
    id: root

    property string url: ""

    title: I18n.tr("Open with...")
    targetData: url
    targetDataLabel: ""
    categoryFilter: ["WebBrowser", "X-WebBrowser"]
    viewMode: SettingsData.browserPickerViewMode || "grid"
    usageHistoryKey: "browserUsageHistory"
    showTargetData: true

    function shellEscape(str) {
        return "'" + str.replace(/'/g, "'\\''") + "'"
    }

    onApplicationSelected: (app, url) => {
        if (!app) return

        let cmd = app.exec || ""
        const escapedUrl = shellEscape(url)

        let hasField = false
        if (cmd.includes("%u")) { cmd = cmd.replace("%u", escapedUrl); hasField = true }
        else if (cmd.includes("%U")) { cmd = cmd.replace("%U", escapedUrl); hasField = true }
        else if (cmd.includes("%f")) { cmd = cmd.replace("%f", escapedUrl); hasField = true }
        else if (cmd.includes("%F")) { cmd = cmd.replace("%F", escapedUrl); hasField = true }

        cmd = cmd.replace(/%[ikc]/g, "")

        if (!hasField) {
            cmd += " " + escapedUrl
        }

        console.log("BrowserPicker: Launching", cmd)

        Quickshell.execDetached({
            command: ["sh", "-c", cmd]
        })
    }

    onViewModeChanged: {
        SettingsData.set("browserPickerViewMode", viewMode)
    }
}