59 lines
2.1 KiB
Go
59 lines
2.1 KiB
Go
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
|
||
}
|