Files
fiction/backend/app.go
2026-03-20 01:12:29 +08:00

90 lines
1.7 KiB
Go

package backend
import (
"context"
"encoding/json"
"fiction/backend/ai"
"fmt"
"os"
"path/filepath"
)
// App struct
type App struct {
ctx context.Context
}
// NewApp creates a new App application struct
func NewApp() *App {
return &App{}
}
func (a *App) Startup(ctx context.Context) {
a.ctx = ctx
}
// GetNovelList returns the list of txt files in the source directory
func (a *App) GetNovelList() []string {
var novels []string
sourceDir := "./source"
files, err := os.ReadDir(sourceDir)
if err != nil {
fmt.Printf("Error reading source directory: %v\n", err)
return novels
}
for _, file := range files {
if !file.IsDir() && filepath.Ext(file.Name()) == ".txt" {
novels = append(novels, file.Name())
}
}
return novels
}
// GetNovelContent returns the content of a txt file
func (a *App) GetNovelContent(filename string) string {
sourceDir := "./source"
filePath := filepath.Join(sourceDir, filename)
content, err := os.ReadFile(filePath)
if err != nil {
fmt.Printf("Error reading file %s: %v\n", filename, err)
return "Error reading file"
}
return string(content)
}
func (a *App) WriteNovelContent(filename string) string {
filePath := filepath.Join("./config", "config.json")
content, err := os.ReadFile(filePath)
if err != nil {
fmt.Printf("读取提示词文件错误: %v\n", err)
return "Error reading file"
}
var str []string
if err = json.Unmarshal(content, &str); err != nil {
fmt.Printf("读取提示词错误: %v\n", err)
return "Error Unmarshal JSON"
}
resp := ""
err = ai.NewAIClient(false, "", 0.9).
RequestAI(
a.GetNovelContent(filename),
str,
func(content string, i int) error {
resp = content
return nil
},
)
if err != nil {
return err.Error()
}
return resp
}