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 from this specific download. Multiple files from the same mod can be downloaded to the same cache location.
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