|
52 | 52 | ) |
53 | 53 | findVariableRegex = regexp.MustCompile(`{(.*)}`) |
54 | 54 | exifToolVarRegex = regexp.MustCompile(`{xt\..*}`) |
| 55 | + dateTokenRegex = regexp.MustCompile( |
| 56 | + `{(YYYY|YY|MMMM|MMM|MM|M|DDDD|DDD|DD|D|H|hh|h|mm|m|ss|s|A|a|unix|since)}`, |
| 57 | + ) |
55 | 58 | ) |
56 | 59 |
|
57 | 60 | var conf *Config |
@@ -88,6 +91,7 @@ type Config struct { |
88 | 91 | WorkingDir string `json:"working_dir"` |
89 | 92 | SortVariable string `json:"sort_variable"` |
90 | 93 | Replacement string `json:"replacement"` |
| 94 | + DateTimeVariable string `json:"dt"` |
91 | 95 | ExiftoolOpts ExiftoolOpts `json:"exiftool_opts"` |
92 | 96 | FilesAndDirPaths []string `json:"files_and_dir_paths"` |
93 | 97 | FindSlice []string `json:"find_slice"` |
@@ -277,6 +281,32 @@ func (c *Config) setOptions(cmd *cli.Command) error { |
277 | 281 | c.PairOrder = strings.Split(cmd.String("pair-order"), ",") |
278 | 282 | c.Clean = cmd.Bool("clean") |
279 | 283 | c.SortVariable = cmd.String("sort-var") |
| 284 | + c.DateTimeVariable = cmd.String("dt") |
| 285 | + |
| 286 | + if c.DateTimeVariable != "" { |
| 287 | + for i, v := range c.ReplacementSlice { |
| 288 | + if dateTokenRegex.MatchString(v) { |
| 289 | + submatches := dateTokenRegex.FindAllStringSubmatch(v, -1) |
| 290 | + |
| 291 | + for _, submatch := range submatches { |
| 292 | + repl := fmt.Sprintf( |
| 293 | + "{%s.dt.%s}", |
| 294 | + c.DateTimeVariable, |
| 295 | + submatch[1], |
| 296 | + ) |
| 297 | + |
| 298 | + regex, err := regexp.Compile(submatch[0]) |
| 299 | + if err != nil { |
| 300 | + return err |
| 301 | + } |
| 302 | + |
| 303 | + v = regex.ReplaceAllString(v, repl) |
| 304 | + } |
| 305 | + } |
| 306 | + |
| 307 | + c.ReplacementSlice[i] = v |
| 308 | + } |
| 309 | + } |
280 | 310 |
|
281 | 311 | rng, err := parseMultiRange(cmd.String("replace-range")) |
282 | 312 | if err != nil { |
|
0 commit comments