90 lines
1.7 KiB
Go
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
|
|
}
|