package main import ( "backend/config" "backend/parser" "backend/typesdefs" "backend/utils" "fmt" "log" "reflect" "regexp" "slices" "strconv" "strings" "time" "github.com/schollz/progressbar/v3" ) type MiogestHandler struct { Caratterisiche typesdefs.ListaCaratteristiche Categorie []typesdefs.Categoria AnnunciXML typesdefs.AnnunciXML AnnunciParsed typesdefs.AnnunciParsed annunci_cache_expires time.Time vars_cache_expires time.Time } func NewMiogestHandler() *MiogestHandler { return &MiogestHandler{ Caratterisiche: typesdefs.ListaCaratteristiche{}, Categorie: nil, AnnunciXML: typesdefs.AnnunciXML{}, AnnunciParsed: typesdefs.AnnunciParsed{}, annunci_cache_expires: time.Now(), vars_cache_expires: time.Now(), } } // ANNUNCI FROM MIOGEST func (m *MiogestHandler) GetAnnunci() typesdefs.AnnunciXML { if len(m.AnnunciXML.Annuncio) == 0 || time.Now().After(m.annunci_cache_expires) { m.GetAnnunciFromMiogest() } return m.AnnunciXML } func (m *MiogestHandler) GetAnnunciFromMiogest() { maxRetries := 3 baseDelay := 30 * time.Second for attempt := 0; attempt < maxRetries; attempt++ { var err error m.AnnunciXML, err = utils.GetDataXML[typesdefs.AnnunciXML]("http://partner.miogest.com/agenzie/infoalloggi.xml") if err == nil { // Success m.annunci_cache_expires = time.Now().Add(1 * time.Hour) return } // Failed - check if we should retry if attempt < maxRetries-1 { delay := baseDelay * time.Duration(1<