hikan.ru/mvc/models/context.go

59 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package models
import (
"database/sql"
"html/template"
"main/config"
"main/tools"
"sync"
"time"
"git.hikan.ru/serr/candycache"
"github.com/gin-gonic/gin"
)
// Контекст сайта
type Site struct {
sync.RWMutex
Cfg *config.Config
Tmpl *template.Template // Хранилище шаблонов
Bot *TGBot // Контроллер для отстука в тг бота
LFM *LFMWorker // Контроллер ЛАСТ ФМ
LogEntries []string // Журнал логов (отправляется в ТГ бота)
Posts Posts // Список со всеми постами из базы данных
Tags map[string]int // Список всех тегов
Cache *candycache.Cache // Домик для кэша
LastTrackAjaxBlock string // HTML Аякс блок, соответствующий последнему кэшированному треку с ластфм
RestartTime time.Time // Временной момент рестарта серверного приложения
Version int64 // Окончание ?v=version для всех кэшируемых файлов
DB *sql.DB // Открытое соединение с БД
GinEngine *gin.Engine // Движок Gin
}
// Функция возвращает пустой экземпляр контекста сайта
func NewSiteCtx() *Site {
return &Site{
RestartTime: time.Now(),
Version: time.Now().Unix(),
}
}
// Запуск параллельных процессов
func (s *Site) RunSubProcesses() {
go tools.Ticker(config.Cfg.TgTickerTime*time.Hour, func() {
s.Bot.Backup(config.Cfg.DBPath, s.LogEntries, s.Cache)
})
go tools.Ticker(config.Cfg.LastFmTickerTime*time.Second, func() {
if track, err := s.LFM.LastTrack(); err == nil {
s.LastTrackAjaxBlock = s.LFM.TrackAjax(track)
}
})
}
func (s *Site) Run(ip string) error {
if err := s.GinEngine.Run(ip); err != nil {
return err
}
return nil
}