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)
}
}
|