forked from Shinonome/dots-hyprland
add screen translation
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
pragma Singleton
|
||||
pragma ComponentBehavior: Bound
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import qs.modules.common.utils
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
property var keyContent: ({})
|
||||
property string keyProjectId: keyContent.project_id
|
||||
property bool keyError: false
|
||||
property bool keyReady: false
|
||||
property string token: ""
|
||||
property bool tokenError: false
|
||||
property bool tokenReady: false
|
||||
readonly property string projectId: keyProjectId
|
||||
|
||||
readonly property bool loaded: keyReady && tokenReady
|
||||
|
||||
readonly property string tokenForKeyScriptPath: Quickshell.shellPath("services/gCloud/token-from-key-venv.sh")
|
||||
|
||||
function load() {
|
||||
// Dummy for init
|
||||
}
|
||||
|
||||
function setKeyJson(str: string): bool {
|
||||
try {
|
||||
var keyData = JSON.parse(str)
|
||||
KeyringStorage.setNestedField(["googleCloud", "serviceAccountKey"], keyData);
|
||||
return true;
|
||||
} catch(e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function getToken() {
|
||||
if (root.keyError) {
|
||||
root.tokenError = true;
|
||||
root.tokenReady = true;
|
||||
return;
|
||||
}
|
||||
tokenProc.runSequence([(() => { // prep token fetcher
|
||||
tokenProc.environment.SERVICE_KEY_CONTENT = JSON.stringify(root.keyContent);
|
||||
tokenProc.command = [ //
|
||||
"bash", "-c" //
|
||||
, `${tokenForKeyScriptPath} "$SERVICE_KEY_CONTENT"`];
|
||||
}), [] // run token fetcher
|
||||
, (out => {
|
||||
if (out.startsWith("Error")) {
|
||||
root.tokenError = true;
|
||||
} else {
|
||||
root.tokenError = false;
|
||||
root.token = out.trim();
|
||||
}
|
||||
root.tokenReady = true;
|
||||
})]);
|
||||
}
|
||||
|
||||
function loadKeyIfPossible() {
|
||||
if (KeyringStorage.loaded) {
|
||||
root.keyContent = KeyringStorage.keyringData?.googleCloud?.serviceAccountKey;
|
||||
if (!root.keyContent?.project_id) {
|
||||
root.keyError = true;
|
||||
} else {
|
||||
root.keyError = false;
|
||||
root.keyProjectId = root.keyContent.project_id;
|
||||
}
|
||||
root.keyReady = true;
|
||||
root.getToken();
|
||||
} else {
|
||||
KeyringStorage.fetchKeyringData();
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
loadKeyIfPossible();
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: KeyringStorage
|
||||
function onLoadedChanged() {
|
||||
root.loadKeyIfPossible();
|
||||
}
|
||||
function onDataChanged() {
|
||||
root.loadKeyIfPossible();
|
||||
}
|
||||
}
|
||||
|
||||
MultiTurnProcess {
|
||||
id: tokenProc
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user