Documentation
¶
Index ¶
- Constants
- Variables
- type InPlaceNoRenameFolderStrategy
- type InPlaceStrategy
- type LinkMode
- type MetadataOnlyStrategy
- type OperationMode
- type OperationStrategy
- type OrganizePlan
- type OrganizeResult
- type OrganizeStrategy
- type Organizer
- func (o *Organizer) CleanEmptyDirectories(path string, baseDir string) error
- func (o *Organizer) Copy(plan *OrganizePlan, dryRun bool) (*OrganizeResult, error)
- func (o *Organizer) CopyWithLinkMode(plan *OrganizePlan, dryRun bool, linkMode LinkMode) (*OrganizeResult, error)
- func (o *Organizer) Execute(plan *OrganizePlan, dryRun bool) (*OrganizeResult, error)
- func (o *Organizer) Organize(match matcher.MatchResult, movie *models.Movie, destDir string, dryRun bool, ...) (*OrganizeResult, error)
- func (o *Organizer) OrganizeBatch(matches []matcher.MatchResult, movies map[string]*models.Movie, destDir string, ...) ([]OrganizeResult, error)
- func (o *Organizer) OrganizeBatchWithLinkMode(matches []matcher.MatchResult, movies map[string]*models.Movie, destDir string, ...) ([]OrganizeResult, error)
- func (o *Organizer) OrganizeWithLinkMode(match matcher.MatchResult, movie *models.Movie, destDir string, dryRun bool, ...) (*OrganizeResult, error)
- func (o *Organizer) Plan(match matcher.MatchResult, movie *models.Movie, destDir string, ...) (*OrganizePlan, error)
- func (o *Organizer) Revert(result *OrganizeResult) error
- func (o *Organizer) SetMatcher(m *matcher.Matcher)
- func (o *Organizer) ValidatePlan(plan *OrganizePlan) []string
- type PreviewStrategy
- type SubtitleHandler
- type SubtitleMatch
- type SubtitleResult
Constants ¶
const ( OperationModeOrganize = types.OperationModeOrganize OperationModeInPlace = types.OperationModeInPlace OperationModeInPlaceNoRenameFolder = types.OperationModeInPlaceNoRenameFolder OperationModeMetadataOnly = types.OperationModeMetadataOnly OperationModePreview = types.OperationModePreview )
Variables ¶
var ParseOperationMode = types.ParseOperationMode
Functions ¶
This section is empty.
Types ¶
type InPlaceNoRenameFolderStrategy ¶
type InPlaceNoRenameFolderStrategy struct {
// contains filtered or unexported fields
}
func NewInPlaceNoRenameFolderStrategy ¶
func NewInPlaceNoRenameFolderStrategy(fs afero.Fs, cfg *config.OutputConfig, m *matcher.Matcher) *InPlaceNoRenameFolderStrategy
func (*InPlaceNoRenameFolderStrategy) Execute ¶
func (s *InPlaceNoRenameFolderStrategy) Execute(plan *OrganizePlan) (*OrganizeResult, error)
func (*InPlaceNoRenameFolderStrategy) Plan ¶
func (s *InPlaceNoRenameFolderStrategy) Plan(match matcher.MatchResult, movie *models.Movie, destDir string, forceUpdate bool) (*OrganizePlan, error)
type InPlaceStrategy ¶
type InPlaceStrategy struct {
// contains filtered or unexported fields
}
func NewInPlaceStrategy ¶
func NewInPlaceStrategy(fs afero.Fs, cfg *config.OutputConfig, m *matcher.Matcher) *InPlaceStrategy
func (*InPlaceStrategy) Execute ¶
func (s *InPlaceStrategy) Execute(plan *OrganizePlan) (*OrganizeResult, error)
func (*InPlaceStrategy) Plan ¶
func (s *InPlaceStrategy) Plan(match matcher.MatchResult, movie *models.Movie, destDir string, forceUpdate bool) (*OrganizePlan, error)
type LinkMode ¶
type LinkMode string
LinkMode controls how files are materialized when copy mode is enabled.
func ParseLinkMode ¶
ParseLinkMode validates and normalizes user input.
type MetadataOnlyStrategy ¶
type MetadataOnlyStrategy struct {
// contains filtered or unexported fields
}
func NewMetadataOnlyStrategy ¶
func NewMetadataOnlyStrategy(fs afero.Fs, cfg *config.OutputConfig) *MetadataOnlyStrategy
func (*MetadataOnlyStrategy) Execute ¶
func (s *MetadataOnlyStrategy) Execute(plan *OrganizePlan) (*OrganizeResult, error)
func (*MetadataOnlyStrategy) Plan ¶
func (s *MetadataOnlyStrategy) Plan(match matcher.MatchResult, movie *models.Movie, destDir string, forceUpdate bool) (*OrganizePlan, error)
type OperationMode ¶
type OperationMode = types.OperationMode
type OperationStrategy ¶
type OperationStrategy interface {
Plan(match matcher.MatchResult, movie *models.Movie, destDir string, forceUpdate bool) (*OrganizePlan, error)
Execute(plan *OrganizePlan) (*OrganizeResult, error)
}
type OrganizePlan ¶
type OrganizePlan struct {
Match matcher.MatchResult
Movie *models.Movie
SourcePath string
TargetDir string
TargetFile string
TargetPath string
WillMove bool
Conflicts []string
InPlace bool // Whether renaming folder in-place
OldDir string // Original directory path (for in-place renames)
IsDedicated bool // Whether source folder is dedicated to this ID
SkipInPlaceReason string // Reason why in-place was not used
}
OrganizePlan represents a planned file organization operation
type OrganizeResult ¶
type OrganizeResult struct {
OriginalPath string
NewPath string
FolderPath string
FileName string
Moved bool
Error error
Subtitles []SubtitleResult
InPlaceRenamed bool // Whether an in-place directory rename occurred
OldDirectoryPath string // Original directory path (for updating subsequent file paths)
NewDirectoryPath string // New directory path after in-place rename
ShouldGenerateMetadata bool // Whether NFO/media should be generated for this result
}
OrganizeResult represents the result of organizing a file
type OrganizeStrategy ¶
type OrganizeStrategy struct {
// contains filtered or unexported fields
}
func NewOrganizeStrategy ¶
func NewOrganizeStrategy(fs afero.Fs, cfg *config.OutputConfig) *OrganizeStrategy
func (*OrganizeStrategy) Execute ¶
func (s *OrganizeStrategy) Execute(plan *OrganizePlan) (*OrganizeResult, error)
func (*OrganizeStrategy) Plan ¶
func (s *OrganizeStrategy) Plan(match matcher.MatchResult, movie *models.Movie, destDir string, forceUpdate bool) (*OrganizePlan, error)
type Organizer ¶
type Organizer struct {
// contains filtered or unexported fields
}
Organizer handles file organization (moving/renaming)
func NewOrganizer ¶
func NewOrganizer(fs afero.Fs, cfg *config.OutputConfig) *Organizer
NewOrganizer creates a new file organizer
func (*Organizer) CleanEmptyDirectories ¶
CleanEmptyDirectories removes empty directories up to the base path
func (*Organizer) Copy ¶
func (o *Organizer) Copy(plan *OrganizePlan, dryRun bool) (*OrganizeResult, error)
Copy copies a file instead of moving it
func (*Organizer) CopyWithLinkMode ¶
func (o *Organizer) CopyWithLinkMode(plan *OrganizePlan, dryRun bool, linkMode LinkMode) (*OrganizeResult, error)
CopyWithLinkMode materializes a file using direct copy, hard link, or soft link.
func (*Organizer) Execute ¶
func (o *Organizer) Execute(plan *OrganizePlan, dryRun bool) (*OrganizeResult, error)
Execute executes an organization plan
func (*Organizer) Organize ¶
func (o *Organizer) Organize(match matcher.MatchResult, movie *models.Movie, destDir string, dryRun bool, forceUpdate bool, copyOnly bool) (*OrganizeResult, error)
Organize plans and executes file organization in one step
func (*Organizer) OrganizeBatch ¶
func (o *Organizer) OrganizeBatch(matches []matcher.MatchResult, movies map[string]*models.Movie, destDir string, dryRun bool, forceUpdate bool, copyOnly bool) ([]OrganizeResult, error)
OrganizeBatch organizes multiple files
func (*Organizer) OrganizeBatchWithLinkMode ¶
func (o *Organizer) OrganizeBatchWithLinkMode( matches []matcher.MatchResult, movies map[string]*models.Movie, destDir string, dryRun bool, forceUpdate bool, copyOnly bool, linkMode LinkMode, ) ([]OrganizeResult, error)
OrganizeBatchWithLinkMode organizes multiple files with optional link behavior for copy operations.
func (*Organizer) OrganizeWithLinkMode ¶
func (o *Organizer) OrganizeWithLinkMode( match matcher.MatchResult, movie *models.Movie, destDir string, dryRun bool, forceUpdate bool, copyOnly bool, linkMode LinkMode, ) (*OrganizeResult, error)
OrganizeWithLinkMode plans and executes file organization with optional link behavior for copy operations.
func (*Organizer) Plan ¶
func (o *Organizer) Plan(match matcher.MatchResult, movie *models.Movie, destDir string, forceUpdate bool) (*OrganizePlan, error)
Plan creates an organization plan without executing it
func (*Organizer) Revert ¶
func (o *Organizer) Revert(result *OrganizeResult) error
Revert reverts an organization operation (moves file back)
func (*Organizer) SetMatcher ¶
SetMatcher sets the matcher instance for in-place rename detection
func (*Organizer) ValidatePlan ¶
func (o *Organizer) ValidatePlan(plan *OrganizePlan) []string
ValidatePlan checks if a plan is valid and safe to execute
type PreviewStrategy ¶
type PreviewStrategy struct {
// contains filtered or unexported fields
}
func NewPreviewStrategy ¶
func NewPreviewStrategy(delegate OperationStrategy) *PreviewStrategy
func (*PreviewStrategy) Execute ¶
func (s *PreviewStrategy) Execute(plan *OrganizePlan) (*OrganizeResult, error)
func (*PreviewStrategy) Plan ¶
func (s *PreviewStrategy) Plan(match matcher.MatchResult, movie *models.Movie, destDir string, forceUpdate bool) (*OrganizePlan, error)
type SubtitleHandler ¶
type SubtitleHandler struct {
// contains filtered or unexported fields
}
SubtitleHandler manages subtitle file operations
func NewSubtitleHandler ¶
func NewSubtitleHandler(fs afero.Fs, cfg *config.OutputConfig) *SubtitleHandler
NewSubtitleHandler creates a new subtitle handler
func (*SubtitleHandler) FindSubtitles ¶
func (sh *SubtitleHandler) FindSubtitles(videoFile scanner.FileInfo) []SubtitleMatch
FindSubtitles searches for subtitle files associated with a video file
func (*SubtitleHandler) MoveSubtitles ¶
func (sh *SubtitleHandler) MoveSubtitles(subtitles []SubtitleMatch, targetDir, videoFileName string, dryRun bool) error
MoveSubtitles moves subtitle files to the target directory with the video file