// Cthulhu screen reader. // Copyright (c) 2026 Storm Dragon // Authors: Storm Dragon, Angus Kola // // This program is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the Free // Software Foundation, either version 3 of the License, or (at your option) // any later version. // // This program is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for // more details. // // You should have received a copy of the GNU General Public License along with // this program. If not, see . package review import ( "context" "errors" "time" ) func (worker *Worker) MoveDocumentCaret(command DocumentCaretCommand) error { if !command.valid() { return ErrInvalidDirection } select { case worker.requests <- request{documentEpoch: worker.documentEpoch.Load(), caretCommand: command, queuedAt: time.Now()}: return nil default: return ErrRequestQueueFull } } func (worker *Worker) ActivateDocumentCaret() error { select { case worker.requests <- request{documentEpoch: worker.documentEpoch.Load(), activate: true, queuedAt: time.Now()}: return nil default: return ErrRequestQueueFull } } func (worker *Worker) ReadAll(ctx context.Context) error { if ctx == nil { return errors.New("read all: nil context") } select { case worker.requests <- request{documentEpoch: worker.documentEpoch.Load(), readAll: ctx, queuedAt: time.Now()}: return nil default: return ErrRequestQueueFull } } func (worker *Worker) JumpToDocumentFragment(fragment string) error { if fragment == "" { return ErrInvalidDirection } select { case worker.requests <- request{documentEpoch: worker.documentEpoch.Load(), fragment: fragment, queuedAt: time.Now()}: return nil default: return ErrRequestQueueFull } }