burterm/internal/project/lastpath.go
2026-09-14 10:55:07 +03:00

59 lines
2.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package project
import (
"fmt"
"os"
"path/filepath"
"strings"
)
// lastPathFile — файл вне самой БД проекта, хранит путь к последнему
// открытому проекту. Не может жить внутри SQLite-файла проекта по
// очевидной причине: нужно знать путь ДО того, как что-либо открыто.
func lastPathFile() (string, error) {
home, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("не удалось определить домашнюю директорию: %w", err)
}
dir := filepath.Join(home, ".burterm")
if err := os.MkdirAll(dir, 0o700); err != nil {
return "", fmt.Errorf("не удалось создать %s: %w", dir, err)
}
return filepath.Join(dir, "last-project"), nil
}
// SaveLastPath запоминает path как последний открытый проект — вызывается
// после каждого успешного Open, чтобы при следующем запуске TUI мог его
// подхватить сам, без необходимости вводить путь заново.
func SaveLastPath(path string) error {
f, err := lastPathFile()
if err != nil {
return err
}
if err := os.WriteFile(f, []byte(path), 0o600); err != nil {
return fmt.Errorf("сохранение последнего пути проекта: %w", err)
}
return nil
}
// LoadLastPath возвращает путь последнего открытого проекта и false,
// если такого файла ещё нет (первый запуск, или проект ни разу не
// открывали) — это не ошибка.
func LoadLastPath() (string, bool, error) {
f, err := lastPathFile()
if err != nil {
return "", false, err
}
b, err := os.ReadFile(f)
if os.IsNotExist(err) {
return "", false, nil
}
if err != nil {
return "", false, fmt.Errorf("чтение последнего пути проекта: %w", err)
}
path := strings.TrimSpace(string(b))
if path == "" {
return "", false, nil
}
return path, true, nil
}