1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-04-13 01:02:18 -04:00
This commit is contained in:
purian23
2025-07-15 16:41:47 -04:00
22 changed files with 3255 additions and 1633 deletions

View File

@@ -11,7 +11,6 @@ Item {
property bool hasActiveMedia: false
property var activePlayer: null
property bool cavaAvailable: false
property bool configCreated: false
width: 20
height: Theme.iconSize
@@ -22,53 +21,20 @@ Item {
running: true
onExited: (exitCode) => {
root.cavaAvailable = exitCode === 0
if (root.cavaAvailable && !root.configCreated) {
console.log("cava found - creating config and enabling real audio visualization")
configWriter.running = true
} else if (!root.cavaAvailable) {
if (root.cavaAvailable) {
console.log("cava found - enabling real audio visualization")
cavaProcess.running = Qt.binding(() => root.hasActiveMedia && root.activePlayer?.playbackState === MprisPlaybackState.Playing)
} else {
console.log("cava not found - using fallback animation")
fallbackTimer.running = Qt.binding(() => root.hasActiveMedia && root.activePlayer?.playbackState === MprisPlaybackState.Playing)
}
}
}
Process {
id: configWriter
running: false
command: [
"sh", "-c",
`cat > /tmp/quickshell_cava_config << 'EOF'
[general]
mode = normal
framerate = 30
autosens = 0
sensitivity = 50
bars = 4
[output]
method = raw
raw_target = /dev/stdout
data_format = ascii
channels = mono
mono_option = average
[smoothing]
noise_reduction = 20
EOF`
]
onExited: {
root.configCreated = true
if (root.cavaAvailable) {
cavaProcess.running = Qt.binding(() => root.hasActiveMedia && root.activePlayer?.playbackState === MprisPlaybackState.Playing)
}
}
}
Process {
id: cavaProcess
running: false
command: ["cava", "-p", "/tmp/quickshell_cava_config"]
command: ["sh", "-c", `printf '[general]\nmode=normal\nframerate=30\nautosens=0\nsensitivity=50\nbars=4\n[output]\nmethod=raw\nraw_target=/dev/stdout\ndata_format=ascii\nchannels=mono\nmono_option=average\n[smoothing]\nnoise_reduction=20' | cava -p /dev/stdin`]
stdout: SplitParser {
splitMarker: "\n"

View File

@@ -8,6 +8,7 @@ Rectangle {
property string networkStatus: "disconnected"
property string wifiSignalStrength: "good"
property int volumeLevel: 50
property bool volumeMuted: false
property bool bluetoothAvailable: false
property bool bluetoothEnabled: false
property bool isActive: false
@@ -62,7 +63,7 @@ Rectangle {
// Audio Icon
Text {
text: root.volumeLevel === 0 ? "volume_off" :
text: root.volumeMuted ? "volume_off" :
root.volumeLevel < 33 ? "volume_down" : "volume_up"
font.family: Theme.iconFont
font.pixelSize: Theme.iconSize - 8

View File

@@ -41,6 +41,7 @@ PanelWindow {
property string networkStatus: "disconnected"
property string wifiSignalStrength: "good"
property int volumeLevel: 50
property bool volumeMuted: false
property bool bluetoothAvailable: false
property bool bluetoothEnabled: false
@@ -298,6 +299,10 @@ PanelWindow {
// Battery Widget
BatteryWidget {
anchors.verticalCenter: parent.verticalCenter
batteryPopupVisible: topBar.shellRoot.batteryPopupVisible
onToggleBatteryPopup: {
topBar.shellRoot.batteryPopupVisible = !topBar.shellRoot.batteryPopupVisible
}
}
ControlCenterButton {
@@ -305,6 +310,7 @@ PanelWindow {
networkStatus: topBar.networkStatus
wifiSignalStrength: topBar.wifiSignalStrength
volumeLevel: topBar.volumeLevel
volumeMuted: topBar.volumeMuted
bluetoothAvailable: topBar.bluetoothAvailable
bluetoothEnabled: topBar.bluetoothEnabled
isActive: topBar.shellRoot ? topBar.shellRoot.controlCenterVisible : false
@@ -314,7 +320,7 @@ PanelWindow {
topBar.shellRoot.controlCenterVisible = !topBar.shellRoot.controlCenterVisible
if (topBar.shellRoot.controlCenterVisible) {
WifiService.scanWifi()
BluetoothService.scanDevices()
// Bluetooth devices are automatically updated via signals
}
}
}