mirror of
https://github.com/danielmiessler/Fabric.git
synced 2026-02-12 15:05:10 -05:00
- Replace fmt.Fprintf/os.Stderr with centralized debuglog.Log across CLI - Add unconditional Log function to debuglog for important messages - Improve OAuth flow messaging and token refresh diagnostics - Update tests to capture debuglog output via SetOutput - Convert Perplexity streaming errors to unified debug logging - Emit file write notifications through debuglog instead of stderr - Warn on ambiguous model selection using centralized logger - Announce large audio processing steps via debuglog progress messages - Standardize extension registry and patterns warnings through debuglog
72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/atotto/clipboard"
|
|
debuglog "github.com/danielmiessler/fabric/internal/log"
|
|
)
|
|
|
|
func CopyToClipboard(message string) (err error) {
|
|
if err = clipboard.WriteAll(message); err != nil {
|
|
err = fmt.Errorf("could not copy to clipboard: %v", err)
|
|
}
|
|
return
|
|
}
|
|
|
|
func CreateOutputFile(message string, fileName string) (err error) {
|
|
if _, err = os.Stat(fileName); err == nil {
|
|
err = fmt.Errorf("file %s already exists, not overwriting. Rename the existing file or choose a different name", fileName)
|
|
return
|
|
}
|
|
var file *os.File
|
|
if file, err = os.Create(fileName); err != nil {
|
|
err = fmt.Errorf("error creating file: %v", err)
|
|
return
|
|
}
|
|
defer file.Close()
|
|
if _, err = file.WriteString(message); err != nil {
|
|
err = fmt.Errorf("error writing to file: %v", err)
|
|
} else {
|
|
debuglog.Log("\n\n[Output also written to %s]\n", fileName)
|
|
}
|
|
return
|
|
}
|
|
|
|
// CreateAudioOutputFile creates a binary file for audio data
|
|
func CreateAudioOutputFile(audioData []byte, fileName string) (err error) {
|
|
// If no extension is provided, default to .wav
|
|
if filepath.Ext(fileName) == "" {
|
|
fileName += ".wav"
|
|
}
|
|
|
|
// File existence check is now done in the CLI layer before TTS generation
|
|
var file *os.File
|
|
if file, err = os.Create(fileName); err != nil {
|
|
err = fmt.Errorf("error creating audio file: %v", err)
|
|
return
|
|
}
|
|
defer file.Close()
|
|
|
|
if _, err = file.Write(audioData); err != nil {
|
|
err = fmt.Errorf("error writing audio data to file: %v", err)
|
|
}
|
|
// No redundant output message here - the CLI layer handles success messaging
|
|
return
|
|
}
|
|
|
|
// IsAudioFormat checks if the filename suggests an audio format
|
|
func IsAudioFormat(fileName string) bool {
|
|
ext := strings.ToLower(filepath.Ext(fileName))
|
|
audioExts := []string{".wav", ".mp3", ".m4a", ".aac", ".ogg", ".flac"}
|
|
for _, audioExt := range audioExts {
|
|
if ext == audioExt {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|