package models
import (
"html/template"
"log"
"os"
"path/filepath"
"strings"
"time"
)
// App хранит информацию о приложении
type App struct {
Config *Config // Конфиг
Templates *template.Template // Шаблоны страниц
Cache *Cache // Кэш (отрендеренные странички)
Version int64 // Время запуска
}
// Инициализирует приложение
func AppInit(configPath string) (*App, error) {
a := &App{
Version: time.Now().Unix(),
Config: ConfigInit(),
Cache: CacheInit(),
}
// Загрузка конфига
if err := a.Config.Load(configPath); err != nil {
return nil, err
}
// Загрузка шаблонов
if err := a.loadTemplates(a.Config.TemplatesPath, a.Config.TemplatesExt); err != nil {
log.Fatal(err)
}
return a, nil
}
// Загрузка шаблонов
func (a *App) loadTemplates(templatesPath string, ext string) error {
tmpls := template.New("")
err := filepath.Walk(templatesPath, func(path string, f os.FileInfo, err error) error {
if err != nil {
return err
}
if !f.IsDir() && strings.HasSuffix(f.Name(), ext) {
_, err = tmpls.ParseFiles(path)
if err != nil {
return err
}
}
return nil
})
if err != nil {
return err
}
a.Templates = tmpls
return nil
}