Documentation
¶
Index ¶
- func CompareVersions(v1, v2 string) int
- func IsNewerVersion(currentVersion, newVersion string) bool
- type DependencyResolver
- type DownloadProgress
- type Downloader
- type Extractor
- type Installer
- func (i *Installer) GetDeployedFiles(game *domain.Game, mod *domain.Mod) ([]string, error)
- func (i *Installer) Install(ctx context.Context, game *domain.Game, mod *domain.Mod, profileName string) error
- func (i *Installer) IsInstalled(game *domain.Game, mod *domain.Mod) (bool, error)
- func (i *Installer) Uninstall(ctx context.Context, game *domain.Game, mod *domain.Mod) error
- type ProfileManager
- func (pm *ProfileManager) AddMod(gameID, profileName string, mod domain.ModReference) error
- func (pm *ProfileManager) Create(gameID, name string) (*domain.Profile, error)
- func (pm *ProfileManager) Delete(gameID, name string) error
- func (pm *ProfileManager) Export(gameID, profileName string) ([]byte, error)
- func (pm *ProfileManager) Get(gameID, name string) (*domain.Profile, error)
- func (pm *ProfileManager) GetDefault(gameID string) (*domain.Profile, error)
- func (pm *ProfileManager) Import(data []byte) (*domain.Profile, error)
- func (pm *ProfileManager) ImportWithOptions(data []byte, force bool) (*domain.Profile, error)
- func (pm *ProfileManager) List(gameID string) ([]*domain.Profile, error)
- func (pm *ProfileManager) ParseProfile(data []byte) (*domain.Profile, error)
- func (pm *ProfileManager) RemoveMod(gameID, profileName, sourceID, modID string) error
- func (pm *ProfileManager) ReorderMods(gameID, profileName string, mods []domain.ModReference) error
- func (pm *ProfileManager) SetDefault(gameID, name string) error
- func (pm *ProfileManager) Switch(ctx context.Context, game *domain.Game, newProfileName string) error
- func (pm *ProfileManager) UpsertMod(gameID, profileName string, mod domain.ModReference) error
- type ProgressFunc
- type Service
- func (s *Service) AddGame(game *domain.Game) error
- func (s *Service) Cache() *cache.Cache
- func (s *Service) Close() error
- func (s *Service) ConfigDir() string
- func (s *Service) DB() *db.DB
- func (s *Service) DeleteSourceToken(sourceID string) error
- func (s *Service) DownloadMod(ctx context.Context, sourceID string, game *domain.Game, mod *domain.Mod, ...) (int, error)
- func (s *Service) GetDefaultLinkMethod() domain.LinkMethod
- func (s *Service) GetDownloadURL(ctx context.Context, sourceID string, mod *domain.Mod, fileID string) (string, error)
- func (s *Service) GetGame(gameID string) (*domain.Game, error)
- func (s *Service) GetGameCache(game *domain.Game) *cache.Cache
- func (s *Service) GetGameCachePath(game *domain.Game) string
- func (s *Service) GetGameLinkMethod(game *domain.Game) domain.LinkMethod
- func (s *Service) GetInstalledMod(sourceID, modID, gameID, profileName string) (*domain.InstalledMod, error)
- func (s *Service) GetInstalledMods(gameID, profileName string) ([]domain.InstalledMod, error)
- func (s *Service) GetLinker(method domain.LinkMethod) linker.Linker
- func (s *Service) GetMod(ctx context.Context, sourceID, gameID, modID string) (*domain.Mod, error)
- func (s *Service) GetModFiles(ctx context.Context, sourceID string, mod *domain.Mod) ([]domain.DownloadableFile, error)
- func (s *Service) GetSource(id string) (source.ModSource, error)
- func (s *Service) GetSourceToken(sourceID string) (*db.StoredToken, error)
- func (s *Service) IsSourceAuthenticated(sourceID string) bool
- func (s *Service) ListGames() []*domain.Game
- func (s *Service) ListSources() []source.ModSource
- func (s *Service) RegisterSource(src source.ModSource)
- func (s *Service) Registry() *source.Registry
- func (s *Service) RollbackModVersion(sourceID, modID, gameID, profileName string) error
- func (s *Service) SaveSourceToken(sourceID, apiKey string) error
- func (s *Service) SearchMods(ctx context.Context, sourceID, gameID, query string) ([]domain.Mod, error)
- func (s *Service) SetModFileIDs(sourceID, modID, gameID, profileName string, fileIDs []string) error
- func (s *Service) SetModLinkMethod(sourceID, modID, gameID, profileName string, linkMethod domain.LinkMethod) error
- func (s *Service) SetModUpdatePolicy(sourceID, modID, gameID, profileName string, policy domain.UpdatePolicy) error
- func (s *Service) UpdateModVersion(sourceID, modID, gameID, profileName, newVersion string) error
- type ServiceConfig
- type Updater
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CompareVersions ¶
CompareVersions compares two version strings Returns: -1 if v1 < v2, 0 if v1 == v2, 1 if v1 > v2
func IsNewerVersion ¶
IsNewerVersion returns true if newVersion is newer than currentVersion
Types ¶
type DependencyResolver ¶
type DependencyResolver struct{}
DependencyResolver resolves mod dependencies and detects cycles
func NewDependencyResolver ¶
func NewDependencyResolver() *DependencyResolver
NewDependencyResolver creates a new dependency resolver
func (*DependencyResolver) GetDependencyTree ¶
func (r *DependencyResolver) GetDependencyTree(mod *domain.Mod, modMap map[string]*domain.Mod) ([]domain.Mod, error)
GetDependencyTree returns all dependencies for a mod (including transitive)
func (*DependencyResolver) Resolve ¶
Resolve returns mods in dependency order (dependencies first) Returns ErrDependencyLoop if a circular dependency is detected
func (*DependencyResolver) ValidateDependencies ¶
func (r *DependencyResolver) ValidateDependencies(mods []domain.Mod) error
ValidateDependencies checks if all dependencies are satisfied
type DownloadProgress ¶
type DownloadProgress struct {
TotalBytes int64 // Total size in bytes (0 if unknown)
Downloaded int64 // Bytes downloaded so far
Percentage float64 // Completion percentage (0-100)
}
DownloadProgress represents the current state of a download
type Downloader ¶
type Downloader struct {
// contains filtered or unexported fields
}
Downloader handles HTTP file downloads with progress tracking
func NewDownloader ¶
func NewDownloader(httpClient *http.Client) *Downloader
NewDownloader creates a new Downloader with the given HTTP client If httpClient is nil, http.DefaultClient is used
func (*Downloader) Download ¶
func (d *Downloader) Download(ctx context.Context, url, destPath string, progressFn ProgressFunc) error
Download fetches a file from the URL and saves it to destPath Progress updates are sent to the optional progressFn callback
type Extractor ¶
type Extractor struct{}
Extractor handles archive extraction for mod files
func (*Extractor) CanExtract ¶
CanExtract returns true if the extractor can handle the given filename
func (*Extractor) DetectFormat ¶
DetectFormat returns the archive format based on filename extension
type Installer ¶
type Installer struct {
// contains filtered or unexported fields
}
Installer handles mod installation and uninstallation
func NewInstaller ¶
NewInstaller creates a new installer
func (*Installer) GetDeployedFiles ¶
GetDeployedFiles returns the list of files deployed for a mod
func (*Installer) Install ¶
func (i *Installer) Install(ctx context.Context, game *domain.Game, mod *domain.Mod, profileName string) error
Install deploys a mod to the game directory
func (*Installer) IsInstalled ¶
IsInstalled checks if a mod is currently deployed
type ProfileManager ¶
type ProfileManager struct {
// contains filtered or unexported fields
}
ProfileManager handles profile CRUD operations and switching
func NewProfileManager ¶
func NewProfileManager(configDir string, database *db.DB, cache *cache.Cache, lnk linker.Linker) *ProfileManager
NewProfileManager creates a new profile manager
func (*ProfileManager) AddMod ¶
func (pm *ProfileManager) AddMod(gameID, profileName string, mod domain.ModReference) error
AddMod adds a mod reference to a profile
func (*ProfileManager) Create ¶
func (pm *ProfileManager) Create(gameID, name string) (*domain.Profile, error)
Create creates a new profile for a game
func (*ProfileManager) Delete ¶
func (pm *ProfileManager) Delete(gameID, name string) error
Delete removes a profile
func (*ProfileManager) Export ¶
func (pm *ProfileManager) Export(gameID, profileName string) ([]byte, error)
Export exports a profile to a portable format
func (*ProfileManager) Get ¶
func (pm *ProfileManager) Get(gameID, name string) (*domain.Profile, error)
Get retrieves a specific profile
func (*ProfileManager) GetDefault ¶
func (pm *ProfileManager) GetDefault(gameID string) (*domain.Profile, error)
GetDefault returns the default profile for a game
func (*ProfileManager) Import ¶
func (pm *ProfileManager) Import(data []byte) (*domain.Profile, error)
Import imports a profile from portable format
func (*ProfileManager) ImportWithOptions ¶
ImportWithOptions imports a profile with optional force overwrite
func (*ProfileManager) List ¶
func (pm *ProfileManager) List(gameID string) ([]*domain.Profile, error)
List returns all profiles for a game
func (*ProfileManager) ParseProfile ¶
func (pm *ProfileManager) ParseProfile(data []byte) (*domain.Profile, error)
ParseProfile parses profile data without saving (for preview)
func (*ProfileManager) RemoveMod ¶
func (pm *ProfileManager) RemoveMod(gameID, profileName, sourceID, modID string) error
RemoveMod removes a mod reference from a profile
func (*ProfileManager) ReorderMods ¶
func (pm *ProfileManager) ReorderMods(gameID, profileName string, mods []domain.ModReference) error
ReorderMods updates the load order of mods in a profile
func (*ProfileManager) SetDefault ¶
func (pm *ProfileManager) SetDefault(gameID, name string) error
SetDefault sets a profile as the default for a game
func (*ProfileManager) Switch ¶
func (pm *ProfileManager) Switch(ctx context.Context, game *domain.Game, newProfileName string) error
Switch switches to a different profile, undeploying the current profile's mods and deploying the new profile's mods
func (*ProfileManager) UpsertMod ¶ added in v0.7.5
func (pm *ProfileManager) UpsertMod(gameID, profileName string, mod domain.ModReference) error
UpsertMod adds or updates a mod reference in a profile. If the mod exists, it updates Version and FileIDs while preserving position. If the mod doesn't exist, it appends to the end. This is the preferred method for install/update operations.
type ProgressFunc ¶
type ProgressFunc func(DownloadProgress)
ProgressFunc is called periodically during download with progress updates
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
Service is the main orchestrator for mod management operations
func NewService ¶
func NewService(cfg ServiceConfig) (*Service, error)
NewService creates a new core service instance
func (*Service) DeleteSourceToken ¶
DeleteSourceToken removes an API token for a source
func (*Service) DownloadMod ¶
func (s *Service) DownloadMod(ctx context.Context, sourceID string, game *domain.Game, mod *domain.Mod, file *domain.DownloadableFile, progressFn ProgressFunc) (int, error)
DownloadMod downloads a mod file, extracts it, and stores it in the cache Returns the number of files extracted
func (*Service) GetDefaultLinkMethod ¶
func (s *Service) GetDefaultLinkMethod() domain.LinkMethod
GetDefaultLinkMethod returns the default link method from config
func (*Service) GetDownloadURL ¶
func (s *Service) GetDownloadURL(ctx context.Context, sourceID string, mod *domain.Mod, fileID string) (string, error)
GetDownloadURL gets the download URL for a specific mod file
func (*Service) GetGameCache ¶
GetGameCache returns a cache manager for the specified game. Uses the game's cache_path if configured, otherwise uses the global cache.
func (*Service) GetGameCachePath ¶
GetGameCachePath returns the effective cache path for a game. Uses the game's cache_path if configured, otherwise falls back to global cache.
func (*Service) GetGameLinkMethod ¶
func (s *Service) GetGameLinkMethod(game *domain.Game) domain.LinkMethod
GetGameLinkMethod returns the effective link method for a game. Uses the game's explicit setting if configured, otherwise falls back to global default.
func (*Service) GetInstalledMod ¶
func (s *Service) GetInstalledMod(sourceID, modID, gameID, profileName string) (*domain.InstalledMod, error)
GetInstalledMod retrieves a single installed mod
func (*Service) GetInstalledMods ¶
func (s *Service) GetInstalledMods(gameID, profileName string) ([]domain.InstalledMod, error)
GetInstalledMods returns all installed mods for a game/profile
func (*Service) GetLinker ¶
func (s *Service) GetLinker(method domain.LinkMethod) linker.Linker
GetLinker returns a linker for the given method
func (*Service) GetModFiles ¶
func (s *Service) GetModFiles(ctx context.Context, sourceID string, mod *domain.Mod) ([]domain.DownloadableFile, error)
GetModFiles retrieves available download files for a mod
func (*Service) GetSourceToken ¶
func (s *Service) GetSourceToken(sourceID string) (*db.StoredToken, error)
GetSourceToken retrieves an API token for a source
func (*Service) IsSourceAuthenticated ¶
IsSourceAuthenticated checks if a source has a stored API token
func (*Service) ListSources ¶
ListSources returns all registered sources
func (*Service) RegisterSource ¶
RegisterSource adds a mod source to the registry
func (*Service) RollbackModVersion ¶
RollbackModVersion reverts a mod to its previous version
func (*Service) SaveSourceToken ¶
SaveSourceToken saves an API token for a source
func (*Service) SearchMods ¶
func (s *Service) SearchMods(ctx context.Context, sourceID, gameID, query string) ([]domain.Mod, error)
SearchMods searches for mods in a source
func (*Service) SetModFileIDs ¶ added in v0.7.3
func (s *Service) SetModFileIDs(sourceID, modID, gameID, profileName string, fileIDs []string) error
SetModFileIDs updates the file IDs for an installed mod
func (*Service) SetModLinkMethod ¶
func (s *Service) SetModLinkMethod(sourceID, modID, gameID, profileName string, linkMethod domain.LinkMethod) error
SetModLinkMethod sets the deployment method for an installed mod
func (*Service) SetModUpdatePolicy ¶
func (s *Service) SetModUpdatePolicy(sourceID, modID, gameID, profileName string, policy domain.UpdatePolicy) error
SetModUpdatePolicy sets the update policy for an installed mod
func (*Service) UpdateModVersion ¶
UpdateModVersion updates the version of an installed mod, preserving the previous version for rollback
type ServiceConfig ¶
type ServiceConfig struct {
ConfigDir string // Directory for configuration files
DataDir string // Directory for database and persistent data
CacheDir string // Directory for mod file cache
}
ServiceConfig holds configuration for the core service
type Updater ¶
type Updater struct {
// contains filtered or unexported fields
}
Updater checks for and applies mod updates
func NewUpdater ¶
NewUpdater creates a new updater
func (*Updater) CheckUpdates ¶
func (u *Updater) CheckUpdates(ctx context.Context, installed []domain.InstalledMod) ([]domain.Update, error)
CheckUpdates checks for available updates for installed mods
func (*Updater) GetAutoUpdateMods ¶
func (u *Updater) GetAutoUpdateMods(installed []domain.InstalledMod) []domain.InstalledMod
GetAutoUpdateMods filters installed mods to those with auto-update enabled