1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-04-04 04:42:05 -04:00

core: add DL helper, apply to TrackArt OSD, DankLocationSearch

- unrelated change to add gsettingsOrDconf helpers
This commit is contained in:
bbedward
2026-02-10 15:42:40 -05:00
parent 2c360dc3e8
commit c783ff3dcf
12 changed files with 319 additions and 139 deletions

View File

@@ -1,5 +1,4 @@
import QtQuick
import QtQuick.Controls
import qs.Common
import qs.Widgets
@@ -13,7 +12,7 @@ Item {
onActiveFocusChanged: {
if (activeFocus) {
locationInput.forceActiveFocus()
locationInput.forceActiveFocus();
}
}
@@ -28,10 +27,10 @@ Item {
signal locationSelected(string displayName, string coordinates)
function resetSearchState() {
locationSearchTimer.stop()
dropdownHideTimer.stop()
isLoading = false
searchResultsModel.clear()
locationSearchTimer.stop();
dropdownHideTimer.stop();
isLoading = false;
searchResultsModel.clear();
}
width: parent.width
@@ -49,52 +48,49 @@ Item {
repeat: false
onTriggered: {
if (locationInput.text.length > 2) {
searchResultsModel.clear()
root.isLoading = true
const searchLocation = locationInput.text
root.currentSearchText = searchLocation
const encodedLocation = encodeURIComponent(searchLocation)
const curlCommand = `curl -4 -s --connect-timeout 5 --max-time 10 'https://nominatim.openstreetmap.org/search?q=${encodedLocation}&format=json&limit=5&addressdetails=1'`
Proc.runCommand("locationSearch", ["bash", "-c", curlCommand], (output, exitCode) => {
root.isLoading = false
searchResultsModel.clear();
root.isLoading = true;
const searchLocation = locationInput.text;
root.currentSearchText = searchLocation;
const encodedLocation = encodeURIComponent(searchLocation);
const searchUrl = "https://nominatim.openstreetmap.org/search?q=" + encodedLocation + "&format=json&limit=5&addressdetails=1";
Proc.runCommand("locationSearch", ["dms", "dl", "-4", "--timeout", "10", searchUrl], (output, exitCode) => {
root.isLoading = false;
if (exitCode !== 0) {
searchResultsModel.clear()
return
searchResultsModel.clear();
return;
}
if (root.currentSearchText !== locationInput.text)
return
const raw = output.trim()
searchResultsModel.clear()
return;
const raw = output.trim();
searchResultsModel.clear();
if (!raw || raw[0] !== "[") {
return
return;
}
try {
const data = JSON.parse(raw)
const data = JSON.parse(raw);
if (data.length === 0) {
return
return;
}
for (var i = 0; i < Math.min(data.length, 5); i++) {
const location = data[i]
const location = data[i];
if (location.display_name && location.lat && location.lon) {
const parts = location.display_name.split(', ')
let cleanName = parts[0]
const parts = location.display_name.split(', ');
let cleanName = parts[0];
if (parts.length > 1) {
const state = parts[parts.length - 2]
const state = parts[parts.length - 2];
if (state && state !== cleanName)
cleanName += `, ${state}`
cleanName += `, ${state}`;
}
const query = `${location.lat},${location.lon}`
const query = `${location.lat},${location.lon}`;
searchResultsModel.append({
"name": cleanName,
"query": query
})
"name": cleanName,
"query": query
});
}
}
} catch (e) {
}
})
} catch (e) {}
});
}
}
}
@@ -107,7 +103,7 @@ Item {
repeat: false
onTriggered: {
if (!locationInput.getActiveFocus() && !searchDropdown.hovered)
root.resetSearchState()
root.resetSearchState();
}
}
@@ -132,23 +128,23 @@ Item {
keyNavigationBacktab: root.keyNavigationBacktab
onTextEdited: {
if (root._internalChange)
return
return;
if (getActiveFocus()) {
if (text.length > 2) {
root.isLoading = true
locationSearchTimer.restart()
root.isLoading = true;
locationSearchTimer.restart();
} else {
root.resetSearchState()
root.resetSearchState();
}
}
}
onFocusStateChanged: hasFocus => {
if (hasFocus) {
dropdownHideTimer.stop()
} else {
dropdownHideTimer.start()
}
}
if (hasFocus) {
dropdownHideTimer.stop();
} else {
dropdownHideTimer.start();
}
}
}
DankIcon {
@@ -187,13 +183,13 @@ Item {
anchors.fill: parent
hoverEnabled: true
onEntered: {
parent.hovered = true
dropdownHideTimer.stop()
parent.hovered = true;
dropdownHideTimer.stop();
}
onExited: {
parent.hovered = false
parent.hovered = false;
if (!locationInput.getActiveFocus())
dropdownHideTimer.start()
dropdownHideTimer.start();
}
acceptedButtons: Qt.NoButton
}
@@ -245,14 +241,14 @@ Item {
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: {
root._internalChange = true
const selectedName = model.name
const selectedQuery = model.query
locationInput.text = selectedName
root.locationSelected(selectedName, selectedQuery)
root.resetSearchState()
locationInput.setFocus(false)
root._internalChange = false
root._internalChange = true;
const selectedName = model.name;
const selectedQuery = model.query;
locationInput.text = selectedName;
root.locationSelected(selectedName, selectedQuery);
root.resetSearchState();
locationInput.setFocus(false);
root._internalChange = false;
}
}
}