66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
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.TemplatesDir, 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
|
||
}
|