Ariver
2026-07-12 24f551a39eae849d891da26cc91f90d354e3a2db
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//go:build !darwin || !appstore
 
package textoutput
 
func newPlatformRouter(paster Paster) *Router {
    return &Router{paster: paster}
}
 
func (r *Router) Output(text string, keepClipboard bool) Result {
    return r.OutputWithOptions(text, OutputOptions{KeepClipboard: keepClipboard})
}
 
func (r *Router) OutputWithOptions(text string, options OutputOptions) Result {
    if text == "" {
        return r.remember(Result{OK: false, Method: "legacy_paste", Message: "text is empty"})
    }
    if r.paster == nil {
        return r.remember(Result{OK: false, Text: text, Method: "legacy_paste", Message: "paster is unavailable"})
    }
    if err := r.paster.Paste(text, options.KeepClipboard); err != nil {
        if typeErr := r.paster.TypeText(text); typeErr != nil {
            return r.remember(Result{
                OK:      false,
                Text:    text,
                Method:  "legacy_type_fallback",
                Message: "paste failed: " + err.Error() + "; type fallback failed: " + typeErr.Error(),
            })
        }
        return r.remember(Result{
            OK:      true,
            Text:    text,
            Method:  "legacy_type_fallback",
            Message: "typed through legacy fallback after paste failed: " + err.Error(),
        })
    }
    return r.remember(Result{
        OK:      true,
        Text:    text,
        Method:  "legacy_clipboard_paste",
        Message: "pasted through existing output path",
    })
}