Files
seanime-docker/seanime-2.9.10/internal/core/migrations.go
2025-09-20 14:08:38 +01:00

118 lines
4.6 KiB
Go

package core
import (
"seanime/internal/constants"
"seanime/internal/util"
"strings"
"github.com/Masterminds/semver/v3"
)
func (a *App) runMigrations() {
go func() {
done := false
defer func() {
if done {
a.Logger.Info().Msg("app: Version migration complete")
}
}()
defer util.HandlePanicThen(func() {
a.Logger.Error().Msg("app: runMigrations failed")
})
previousVersion, err := semver.NewVersion(a.previousVersion)
if err != nil {
a.Logger.Error().Err(err).Msg("app: Failed to parse previous version")
return
}
if a.previousVersion != constants.Version {
hasUpdated := util.VersionIsOlderThan(a.previousVersion, constants.Version)
//-----------------------------------------------------------------------------------------
// DEVNOTE: 1.2.0 uses an incorrect manga cache format for MangaSee pages
// This migration will remove all manga cache files that start with "manga_"
if a.previousVersion == "1.2.0" && hasUpdated {
a.Logger.Debug().Msg("app: Executing version migration task")
err := a.FileCacher.RemoveAllBy(func(filename string) bool {
return strings.HasPrefix(filename, "manga_")
})
if err != nil {
a.Logger.Error().Err(err).Msg("app: MIGRATION FAILED; READ THIS")
a.Logger.Error().Msg("app: Failed to remove 'manga' cache files, please clear them manually by going to the settings. Ignore this message if you have no manga cache files.")
}
done = true
}
//-----------------------------------------------------------------------------------------
c1, _ := semver.NewConstraint("<= 1.3.0, >= 1.2.0")
if c1.Check(previousVersion) {
a.Logger.Debug().Msg("app: Executing version migration task")
err := a.FileCacher.RemoveAllBy(func(filename string) bool {
return strings.HasPrefix(filename, "manga_")
})
if err != nil {
a.Logger.Error().Err(err).Msg("app: MIGRATION FAILED; READ THIS")
a.Logger.Error().Msg("app: Failed to remove 'manga' cache files, please clear them manually by going to the settings. Ignore this message if you have no manga cache files.")
}
done = true
}
//-----------------------------------------------------------------------------------------
// DEVNOTE: 1.5.6 uses a different cache format for media streaming info
// -> Delete the cache files when updated from any version between 1.5.0 and 1.5.5
c2, _ := semver.NewConstraint("<= 1.5.5, >= 1.5.0")
if c2.Check(previousVersion) {
a.Logger.Debug().Msg("app: Executing version migration task")
err := a.FileCacher.RemoveAllBy(func(filename string) bool {
return strings.HasPrefix(filename, "mediastream_mediainfo_")
})
if err != nil {
a.Logger.Error().Err(err).Msg("app: MIGRATION FAILED; READ THIS")
a.Logger.Error().Msg("app: Failed to remove transcoding cache files, please clear them manually by going to the settings. Ignore this message if you have no transcoding cache files.")
}
done = true
}
//-----------------------------------------------------------------------------------------
// DEVNOTE: 2.0.0 uses a different cache format for online streaming
// -> Delete the cache files when updated from a version older than 2.0.0 and newer than 1.5.0
c3, _ := semver.NewConstraint("< 2.0.0, >= 1.5.0")
if c3.Check(previousVersion) {
a.Logger.Debug().Msg("app: Executing version migration task")
err := a.FileCacher.RemoveAllBy(func(filename string) bool {
return strings.HasPrefix(filename, "onlinestream_")
})
if err != nil {
a.Logger.Error().Err(err).Msg("app: MIGRATION FAILED; READ THIS")
a.Logger.Error().Msg("app: Failed to remove online streaming cache files, please clear them manually by going to the settings. Ignore this message if you have no online streaming cache files.")
}
done = true
}
//-----------------------------------------------------------------------------------------
// DEVNOTE: 2.1.0 refactored the manga cache format
// -> Delete the cache files when updated from a version older than 2.1.0
c4, _ := semver.NewConstraint("< 2.1.0")
if c4.Check(previousVersion) {
a.Logger.Debug().Msg("app: Executing version migration task")
err := a.FileCacher.RemoveAllBy(func(filename string) bool {
return strings.HasPrefix(filename, "manga_")
})
if err != nil {
a.Logger.Error().Err(err).Msg("app: MIGRATION FAILED; READ THIS")
a.Logger.Error().Msg("app: Failed to remove 'manga' cache files, please clear them manually by going to the settings. Ignore this message if you have no manga cache files.")
}
done = true
}
}
}()
}