2025-02-02 16:43:55 +03:00
|
|
|
|
package models
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"database/sql"
|
|
|
|
|
"html/template"
|
2025-02-03 10:04:08 +03:00
|
|
|
|
"log"
|
2025-02-02 16:43:55 +03:00
|
|
|
|
"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(),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Запуск параллельных процессов
|
2025-02-03 10:04:08 +03:00
|
|
|
|
func (s *Site) RunTickers() {
|
2025-02-02 16:43:55 +03:00
|
|
|
|
go tools.Ticker(config.Cfg.TgTickerTime*time.Hour, func() {
|
2025-02-03 10:04:08 +03:00
|
|
|
|
if err := s.Bot.Backup(config.Cfg.DBPath, s.LogEntries, s.Cache); err != nil {
|
|
|
|
|
log.Println("s.Bot.Backup() error: ", err)
|
|
|
|
|
}
|
2025-02-02 16:43:55 +03:00
|
|
|
|
})
|
|
|
|
|
go tools.Ticker(config.Cfg.LastFmTickerTime*time.Second, func() {
|
2025-02-03 10:04:08 +03:00
|
|
|
|
if track, err := s.LFM.LastTrack(); err != nil {
|
|
|
|
|
log.Println("s.LFM.LastTrack() error: ", err)
|
|
|
|
|
} else {
|
2025-02-02 16:43:55 +03:00
|
|
|
|
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
|
|
|
|
|
}
|