mirror of
https://github.com/belsabbagh/dotfiles.git
synced 2026-04-11 09:36:46 +00:00
quickshell and hyprland additions
This commit is contained in:
106
.config/quickshell/nucleus-shell/modules/functions/FileUtils.qml
Normal file
106
.config/quickshell/nucleus-shell/modules/functions/FileUtils.qml
Normal file
@@ -0,0 +1,106 @@
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
pragma Singleton
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
function resolveIcon(className) {
|
||||
if (!className || className.length === 0)
|
||||
return "";
|
||||
|
||||
const original = className;
|
||||
const normalized = className.toLowerCase();
|
||||
// 1. Exact icon name
|
||||
if (Quickshell.iconPath(original, true).length > 0)
|
||||
return original;
|
||||
|
||||
// 2. Normalized guess
|
||||
if (Quickshell.iconPath(normalized, true).length > 0)
|
||||
return normalized;
|
||||
|
||||
// 3. Dashed guess
|
||||
const dashed = normalized.replace(/\s+/g, "-");
|
||||
if (Quickshell.iconPath(dashed, true).length > 0)
|
||||
return dashed;
|
||||
|
||||
// 4. Extension guess
|
||||
const ext = original.split(".").pop().toLowerCase();
|
||||
if (Quickshell.iconPath(ext, true).length > 0)
|
||||
return ext;
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
function trimFileProtocol(str) {
|
||||
let s = str;
|
||||
if (typeof s !== "string")
|
||||
s = str.toString();
|
||||
|
||||
// Convert to string if it's an url or whatever
|
||||
return s.startsWith("file://") ? s.slice(7) : s;
|
||||
}
|
||||
|
||||
function isVideo(path) {
|
||||
if (!path)
|
||||
return false;
|
||||
|
||||
// Convert QUrl → string if needed
|
||||
let p = path.toString ? path.toString() : path;
|
||||
// Strip file://
|
||||
if (p.startsWith("file://"))
|
||||
p = p.replace("file://", "");
|
||||
|
||||
const ext = p.split(".").pop().toLowerCase();
|
||||
return ["mp4", "mkv", "webm", "mov", "avi", "m4v"].includes(ext);
|
||||
}
|
||||
|
||||
function createFile(filePath, callback) {
|
||||
if (!filePath)
|
||||
return ;
|
||||
|
||||
let p = Qt.createQmlObject('import QtQuick; import Quickshell.Io; Process {}', root);
|
||||
p.command = ["touch", filePath];
|
||||
p.onExited.connect(function() {
|
||||
console.debug("Created file:", filePath, "exit code:", p.exitCode);
|
||||
p.destroy();
|
||||
if (callback)
|
||||
callback(true);
|
||||
|
||||
});
|
||||
p.running = true;
|
||||
}
|
||||
|
||||
function removeFile(filePath, callback) {
|
||||
if (!filePath)
|
||||
return ;
|
||||
|
||||
let p = Qt.createQmlObject('import QtQuick; import Quickshell.Io; Process {}', root);
|
||||
p.command = ["rm", "-f", filePath];
|
||||
p.onExited.connect(function() {
|
||||
console.debug("Removed file:", filePath, "exit code:", p.exitCode);
|
||||
p.destroy();
|
||||
if (callback)
|
||||
callback(true);
|
||||
|
||||
});
|
||||
p.running = true;
|
||||
}
|
||||
|
||||
function renameFile(oldPath, newPath, callback) {
|
||||
if (!oldPath || !newPath || oldPath === newPath)
|
||||
return ;
|
||||
|
||||
let p = Qt.createQmlObject('import QtQuick; import Quickshell.Io; Process {}', root);
|
||||
p.command = ["mv", oldPath, newPath];
|
||||
p.onExited.connect(function() {
|
||||
console.debug("Renamed file:", oldPath, "→", newPath, "exit code:", p.exitCode);
|
||||
p.destroy();
|
||||
if (callback)
|
||||
callback(true);
|
||||
|
||||
});
|
||||
p.running = true;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user