forked from Shinonome/dots-hyprland
merge main
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import qs.modules.common.functions
|
||||
import qs.modules.common.utils
|
||||
import qs.services
|
||||
import qs.modules.common
|
||||
import ".."
|
||||
|
||||
NestableObject {
|
||||
id: root
|
||||
|
||||
enum State {
|
||||
Done, Preparing, Processing, Error
|
||||
}
|
||||
|
||||
signal finished()
|
||||
signal error(message: string)
|
||||
property int errorCode
|
||||
property string errorMessage: ""
|
||||
property var outputData
|
||||
property var state: GCloudApi.State.Done
|
||||
|
||||
function resetState() {
|
||||
root.state = GCloudApi.State.Done;
|
||||
root.errorMessage = "";
|
||||
root.outputData = undefined;
|
||||
}
|
||||
|
||||
function handleApiOutput(out: string): bool {
|
||||
try {
|
||||
root.outputData = JSON.parse(out);
|
||||
if (outputData.error) {
|
||||
print("API error: " + JSON.stringify(outputData.error, null, 2))
|
||||
root.state = GCloudApi.State.Error;
|
||||
root.errorCode = outputData.error.code;
|
||||
root.errorMessage = outputData.error.message;
|
||||
root.error(outputData.error.message);
|
||||
return false;
|
||||
}
|
||||
root.finished();
|
||||
root.state = GCloudApi.State.Done;
|
||||
return true
|
||||
} catch (e) {
|
||||
print("Failed to parse API response: " + e + "\n" + out)
|
||||
root.state = GCloudApi.State.Error;
|
||||
root.errorMessage = "Failed to parse API response";
|
||||
root.error(root.errorMessage);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,17 +5,9 @@ import qs.modules.common.utils
|
||||
import qs.services
|
||||
import ".."
|
||||
|
||||
NestableObject {
|
||||
GCloudApi {
|
||||
id: root
|
||||
|
||||
enum State {
|
||||
Done, Preparing, Processing
|
||||
}
|
||||
|
||||
signal finished()
|
||||
property var outputData
|
||||
property var state: GCloudTranslate.State.Done
|
||||
|
||||
property list<string> pendingStrings
|
||||
property bool setupReady: false
|
||||
readonly property bool preparationReady: GoogleCloud.tokenReady && setupReady
|
||||
@@ -24,13 +16,13 @@ NestableObject {
|
||||
GoogleCloud.load();
|
||||
root.setupReady = false;
|
||||
root.pendingStrings = strings;
|
||||
root.state = GCloudTranslate.State.Preparing;
|
||||
root.state = GCloudApi.State.Preparing;
|
||||
root.setupReady = true;
|
||||
}
|
||||
|
||||
onPreparationReadyChanged: {
|
||||
if (!preparationReady) return;
|
||||
root.state = GCloudTranslate.State.Processing;
|
||||
root.state = GCloudApi.State.Processing;
|
||||
|
||||
const targetLang = Translation.languageCode;
|
||||
const payload = {
|
||||
@@ -53,11 +45,7 @@ NestableObject {
|
||||
]);
|
||||
|
||||
seq.push(((out) => {
|
||||
// print(out)
|
||||
root.outputData = JSON.parse(out);
|
||||
root.pendingStrings = [];
|
||||
root.finished();
|
||||
root.state = GCloudTranslate.State.Done;
|
||||
root.handleApiOutput(out);
|
||||
}));
|
||||
|
||||
multiproc.runSequence(seq);
|
||||
|
||||
@@ -7,18 +7,9 @@ import qs.services
|
||||
import qs.modules.common
|
||||
import ".."
|
||||
|
||||
NestableObject {
|
||||
GCloudApi {
|
||||
id: root
|
||||
|
||||
enum State {
|
||||
Done, Uploading, Processing, Error
|
||||
}
|
||||
|
||||
signal finished()
|
||||
signal error()
|
||||
property var outputData
|
||||
property var state: GCloudVision.State.Done
|
||||
|
||||
readonly property string imageBase64FilePath: `${Directories.screenshotTemp}/vision_base64.txt`
|
||||
readonly property string payloadFilePath: `${Directories.screenshotTemp}/vision_payload.json`
|
||||
property string uploadEndpoint: "https://uguu.se/upload"
|
||||
@@ -28,7 +19,8 @@ NestableObject {
|
||||
readonly property bool preparationReady: tokenReady && onlineImageReady
|
||||
|
||||
function annotateImage(imageUri: string) {
|
||||
root.state = GCloudVision.State.Uploading;
|
||||
resetState();
|
||||
root.state = GCloudApi.State.Preparing;
|
||||
root.onlineImageReady = false
|
||||
GoogleCloud.load();
|
||||
|
||||
@@ -49,11 +41,11 @@ NestableObject {
|
||||
onPreparationReadyChanged: {
|
||||
if (!preparationReady) return;
|
||||
if (GoogleCloud.tokenError || GoogleCloud.keyError) {
|
||||
root.state = GCloudVision.State.Error;
|
||||
root.error();
|
||||
root.state = GCloudApi.State.Error;
|
||||
root.error(Translation.tr("Set your Google Cloud service account key"));
|
||||
return;
|
||||
}
|
||||
root.state = GCloudVision.State.Processing;
|
||||
root.state = GCloudApi.State.Processing;
|
||||
var seq = []; // command sequence
|
||||
|
||||
// Construct the JSON payload using jq to read from the base64 file
|
||||
@@ -75,9 +67,7 @@ https://vision.googleapis.com/v1/images:annotate \
|
||||
]);
|
||||
|
||||
seq.push((out) => {
|
||||
root.outputData = JSON.parse(out);
|
||||
root.finished();
|
||||
root.state = GCloudVision.State.Done;
|
||||
root.handleApiOutput(out);
|
||||
});
|
||||
|
||||
lookMultiproc.runSequence(seq);
|
||||
|
||||
Reference in New Issue
Block a user