mirror of
https://github.com/idanoo/autobrr
synced 2025-07-23 08:49:13 +00:00
feat: show new updates in dashboard (#690)
* feat: show new update banner * feat(http): add request logger * refactor: updates checker * feat: make update check optional * fix: empty releases * add toggle switch for update checks * feat: toggle updates check from settings * feat: toggle updates check from settings * feat: check on toggle enabled --------- Co-authored-by: soup <soup@r4tio.dev>
This commit is contained in:
parent
3fdd7cf5e4
commit
2917a7d42d
24 changed files with 687 additions and 121 deletions
71
internal/update/update.go
Normal file
71
internal/update/update.go
Normal file
|
@ -0,0 +1,71 @@
|
|||
package update
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
|
||||
"github.com/autobrr/autobrr/internal/domain"
|
||||
"github.com/autobrr/autobrr/internal/logger"
|
||||
"github.com/autobrr/autobrr/pkg/version"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
log zerolog.Logger
|
||||
config *domain.Config
|
||||
|
||||
m sync.RWMutex
|
||||
releaseChecker *version.Checker
|
||||
latestRelease *version.Release
|
||||
}
|
||||
|
||||
func NewUpdate(log logger.Logger, config *domain.Config) *Service {
|
||||
return &Service{
|
||||
log: log.With().Str("module", "update").Logger(),
|
||||
config: config,
|
||||
releaseChecker: version.NewChecker("autobrr", "autobrr", config.Version),
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) GetLatestRelease(ctx context.Context) *version.Release {
|
||||
s.m.RLock()
|
||||
defer s.m.RUnlock()
|
||||
return s.latestRelease
|
||||
}
|
||||
|
||||
func (s *Service) CheckUpdates(ctx context.Context) {
|
||||
if _, err := s.CheckUpdateAvailable(ctx); err != nil {
|
||||
s.log.Error().Err(err).Msg("error checking new release")
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (s *Service) CheckUpdateAvailable(ctx context.Context) (*version.Release, error) {
|
||||
s.log.Trace().Msg("checking for updates...")
|
||||
|
||||
newAvailable, newVersion, err := s.releaseChecker.CheckNewVersion(ctx, s.config.Version)
|
||||
if err != nil {
|
||||
s.log.Error().Err(err).Msg("could not check for new release")
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
if newAvailable {
|
||||
s.log.Info().Msgf("autobrr outdated, found newer release: %s", newVersion.TagName)
|
||||
|
||||
s.m.Lock()
|
||||
defer s.m.Unlock()
|
||||
|
||||
if s.latestRelease != nil && s.latestRelease.TagName == newVersion.TagName {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
s.latestRelease = newVersion
|
||||
|
||||
return newVersion, nil
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue