mirror of
https://github.com/derfenix/photocatalog.git
synced 2026-03-11 20:46:24 +03:00
Refactoring
This commit is contained in:
@@ -14,7 +14,7 @@ const (
|
|||||||
ModeMove Mode = "move"
|
ModeMove Mode = "move"
|
||||||
)
|
)
|
||||||
|
|
||||||
var supportedModes = []Mode{ModeHardlink, ModeSymlink, ModeMove, ModeCopy}
|
var SupportedModes = []Mode{ModeHardlink, ModeSymlink, ModeMove, ModeCopy}
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
SourceDir string
|
SourceDir string
|
||||||
@@ -36,8 +36,8 @@ func (c *Config) Validate() error {
|
|||||||
return fmt.Errorf("target dir is required")
|
return fmt.Errorf("target dir is required")
|
||||||
}
|
}
|
||||||
|
|
||||||
if !slices.Contains(supportedModes, c.Mode) {
|
if !slices.Contains(SupportedModes, c.Mode) {
|
||||||
return fmt.Errorf("invalid mode %s, supported modes: %s", c.Mode, supportedModes)
|
return fmt.Errorf("invalid mode %s, supported modes: %s", c.Mode, SupportedModes)
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.SkipFullSync && !c.Watch {
|
if c.SkipFullSync && !c.Watch {
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ WantedBy=default.target
|
|||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
EnvironmentFile=/home/%u/.config/photocatalog
|
EnvironmentFile=/home/%u/.config/photocatalog
|
||||||
ExecStart=photocatalog -mode $MODE -target $TARGET -monitor $MONITOR -update_mtime $UPDATECTIME
|
ExecStart=photocatalog -mode $MODE -target $TARGET -watch -source $MONITOR -skip-full-sync
|
||||||
ExecStartPre=photocatalog -mode $MODE -target $TARGET ${MONITOR}
|
ExecStartPre=photocatalog -mode $MODE -target $TARGET -source ${MONITOR}
|
||||||
|
|||||||
60
main.go
60
main.go
@@ -3,8 +3,10 @@ package main
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"flag"
|
"flag"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"slices"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
@@ -39,36 +41,48 @@ func loadCfg() application.Config {
|
|||||||
flag.StringVar(&cfg.TargetDir, "target", "", "Target directory")
|
flag.StringVar(&cfg.TargetDir, "target", "", "Target directory")
|
||||||
flag.BoolVar(&cfg.Overwrite, "overwrite", false, "Overwrite existing files")
|
flag.BoolVar(&cfg.Overwrite, "overwrite", false, "Overwrite existing files")
|
||||||
flag.BoolVar(&cfg.Watch, "watch", false, "Watch for changes in the source directory")
|
flag.BoolVar(&cfg.Watch, "watch", false, "Watch for changes in the source directory")
|
||||||
|
flag.BoolVar(&cfg.Watch, "monitor", false, "Watch for changes in the source directory") // Legacy option
|
||||||
flag.BoolVar(&cfg.SkipFullSync, "skip-full-sync", false, "Skip full sync at startup")
|
flag.BoolVar(&cfg.SkipFullSync, "skip-full-sync", false, "Skip full sync at startup")
|
||||||
|
|
||||||
var (
|
flag.Func("dir-mode", "Mode bits for directories can be created while syncing", func(s string) error {
|
||||||
dirMode string
|
var err error
|
||||||
fileMode string
|
|
||||||
mode string
|
|
||||||
)
|
|
||||||
|
|
||||||
flag.StringVar(&dirMode, "dir-mode", "0777", "Mode bits for directories can be created while syncing")
|
cfg.DirMode, err = strconv.ParseUint(s, 8, 32)
|
||||||
flag.StringVar(&fileMode, "file-mode", "0644", "Mode bits for files created while syncing (not applicable for hardlink mode)")
|
if err != nil {
|
||||||
flag.StringVar(&mode, "mode", "hardlink", "Organizing mode")
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
flag.Func("file-mode", "Mode bits for files created while syncing (not applicable for hardlink mode)", func(s string) error {
|
||||||
|
var err error
|
||||||
|
|
||||||
|
cfg.FileMode, err = strconv.ParseUint(s, 8, 32)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
flag.Func("mode", "Organizing mode", func(s string) error {
|
||||||
|
cfg.Mode = application.Mode(s)
|
||||||
|
|
||||||
|
if !slices.Contains(application.SupportedModes, cfg.Mode) {
|
||||||
|
return fmt.Errorf("invalid mode, supported modes: %s", application.SupportedModes)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
cfg.Mode = application.Mode(mode)
|
// Legacy fallback
|
||||||
|
if cfg.SourceDir == "" {
|
||||||
|
log.Println("Source directory not specified. May be using old systemd unit file.")
|
||||||
|
|
||||||
var err error
|
cfg.SourceDir = flag.Arg(0)
|
||||||
|
|
||||||
cfg.DirMode, err = strconv.ParseUint(dirMode, 8, 32)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Parse -dir-mode failed:", err)
|
|
||||||
|
|
||||||
cfg.DirMode = 0o777
|
|
||||||
}
|
|
||||||
|
|
||||||
cfg.FileMode, err = strconv.ParseUint(fileMode, 8, 32)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Parse -file-mode failed:", err)
|
|
||||||
|
|
||||||
cfg.DirMode = 0o644
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return cfg
|
return cfg
|
||||||
|
|||||||
Reference in New Issue
Block a user