Cthulhu is no longer a fork. Now it is a screen reader written in Golang.
This commit is contained in:
1 parent
a998fe67de
commit
069fc674dc
708 files changed
+112482
-532
No files matched your search
@@ -0,0 +1,73 @@
|
||||
// Copyright (c) 2026 Storm Dragon
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
package app
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.stormux.org/storm/cthulhu/internal/preferences"
|
||||
"git.stormux.org/storm/cthulhu/internal/tentacle"
|
||||
)
|
||||
|
||||
func (worker *preferencesWorker) manage_tentacle(ctx context.Context, request preferences.Request) preferences.Response {
|
||||
response := preferences.Response{}
|
||||
if worker.choosingApplication || worker.editApp != "" || request.Application != "" {
|
||||
response.Message = "Tentacles can only be managed in global preferences."
|
||||
return response
|
||||
}
|
||||
if request.Save || request.Close || request.Cancel || request.Preview || request.Tentacle == nil {
|
||||
response.Message = "Tentacle management must be a separate request."
|
||||
return response
|
||||
}
|
||||
if request.Tentacle.Action == "settings" {
|
||||
if request.Tentacle.Entry != nil || request.Tentacle.URL != "" {
|
||||
response.Message = "Invalid tentacle settings request."
|
||||
} else if err := worker.tentacles.OpenSettings(ctx, request.Tentacle.ID); err != nil {
|
||||
response.Message = err.Error()
|
||||
} else {
|
||||
response.Accepted = true
|
||||
}
|
||||
return response
|
||||
}
|
||||
timeout := 6 * time.Second
|
||||
if strings.HasPrefix(request.Tentacle.Action, "repository-") || strings.HasPrefix(request.Tentacle.Action, "install") {
|
||||
timeout = 50 * time.Second
|
||||
}
|
||||
ctx, cancel := context.WithTimeout(ctx, timeout)
|
||||
defer cancel()
|
||||
if err := worker.tentacles.Manage(ctx, *request.Tentacle); err != nil {
|
||||
response.Message = "Tentacle operation was not accepted: " + err.Error()
|
||||
if errors.Is(err, tentacle.ErrRegistrySync) {
|
||||
response.Accepted = true
|
||||
response.Message = "Tentacle configuration applied and saved, but durability could not be confirmed."
|
||||
}
|
||||
} else {
|
||||
response.Accepted = true
|
||||
response.Message = "Tentacle configuration saved; runtime status is shown separately."
|
||||
if request.Tentacle.Action == "list" {
|
||||
response.Message = "Tentacle status."
|
||||
}
|
||||
if request.Tentacle.Action == "retry" {
|
||||
response.Message = "Tentacle retry requested."
|
||||
}
|
||||
switch request.Tentacle.Action {
|
||||
case "install":
|
||||
response.Message = "Tentacle installed and saved. Enable it when you are ready."
|
||||
case "install-enable":
|
||||
response.Message = "Tentacle installed and enabled; runtime status is shown separately."
|
||||
case "repository-add":
|
||||
response.Message = "Repository added. Its tentacles are listed in the table."
|
||||
case "repository-refresh":
|
||||
response.Message = "Repository catalog refreshed."
|
||||
case "repository-remove":
|
||||
response.Message = "Repository removed. Installed tentacles and settings were retained."
|
||||
}
|
||||
}
|
||||
snapshot := worker.tentacles.Snapshot()
|
||||
response.Tentacles = &snapshot
|
||||
return response
|
||||
}
|
||||
Reference in new issue
Block a user