Skip to content

Commit daba647

Browse files
committed
make datetime tokens significantly easier to type
1 parent b9fa51a commit daba647

12 files changed

Lines changed: 149 additions & 0 deletions

File tree

app/app.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ func CreateCLIApp(r io.Reader, w io.Writer) *cli.Command {
130130
flagUndo,
131131
flagAllowOverwrites,
132132
flagClean,
133+
flagDT,
133134
flagExclude,
134135
flagExcludeDir,
135136
flagExec,

app/flag.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ var (
7171
Usage: localize.T("flag.clean.usage"),
7272
}
7373

74+
flagDT = &cli.StringFlag{
75+
Name: "dt",
76+
Usage: localize.T("flag.dt.usage"),
77+
}
78+
7479
flagExclude = &cli.StringSliceFlag{
7580
Name: "exclude",
7681
Aliases: []string{"E"},

app/help.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ func helpText(app *cli.Command) string {
5353
flagClean.GetUsage(),
5454
)
5555

56+
flagDTHelp := fmt.Sprintf(
57+
`%s %s`,
58+
pterm.Green("--", flagDT.Name),
59+
flagDT.GetUsage(),
60+
)
61+
5662
flagExcludeHelp := fmt.Sprintf(
5763
`%s, %s %s`,
5864
pterm.Green("-", flagExclude.Aliases[0]),
@@ -342,6 +348,8 @@ Project repository: https://github.com/ayoisaiah/f2
342348
343349
%s
344350
351+
%s
352+
345353
%s
346354
%s
347355
@@ -365,6 +373,7 @@ Project repository: https://github.com/ayoisaiah/f2
365373
pterm.Bold.Sprintf("%s", localize.T("help.options.heading")),
366374
flagAllowOverwritesHelp,
367375
flagCleanHelp,
376+
flagDTHelp,
368377
flagExcludeHelp,
369378
flagExcludeDirHelp,
370379
flagExiftoolOptsHelp,

internal/config/config.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ var (
5252
)
5353
findVariableRegex = regexp.MustCompile(`{(.*)}`)
5454
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+
)
5558
)
5659

5760
var conf *Config
@@ -88,6 +91,7 @@ type Config struct {
8891
WorkingDir string `json:"working_dir"`
8992
SortVariable string `json:"sort_variable"`
9093
Replacement string `json:"replacement"`
94+
DateTimeVariable string `json:"dt"`
9195
ExiftoolOpts ExiftoolOpts `json:"exiftool_opts"`
9296
FilesAndDirPaths []string `json:"files_and_dir_paths"`
9397
FindSlice []string `json:"find_slice"`
@@ -277,6 +281,32 @@ func (c *Config) setOptions(cmd *cli.Command) error {
277281
c.PairOrder = strings.Split(cmd.String("pair-order"), ",")
278282
c.Clean = cmd.Bool("clean")
279283
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+
}
280310

281311
rng, err := parseMultiRange(cmd.String("replace-range"))
282312
if err != nil {

internal/localize/i18n/de.toml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,17 @@ Das Stapel-Umbenennungswerkzeug, das Sie wirklich gerne verwenden werden.
100100
usage = """
101101
102102
Bereinigt leere Verzeichnisse, die bei einem Umbenennungsvorgang durchlaufen wurden."""
103+
[flag.dt]
104+
usage = """
105+
106+
Legt die Standard-Datum/Zeit-Variable für Ihr Ersetzungsmuster fest, damit Sie
107+
nicht für jedes Token den vollständigen Variablenpfad wiederholen müssen. Zum
108+
Beispiel erzeugen die beiden folgenden Befehle dasselbe Ergebnis, aber der zweite
109+
ist wesentlich einfacher zu tippen:
110+
111+
$ f2 -r '{xt.DateTimeOriginal.dt.YYYY}-{xt.DateTimeOriginal.dt.MM}-{xt.DateTimeOriginal.DD}T{xt.DateTimeOriginal.dt.H}{xt.DateTimeOriginal.dt.MM}{xt.DateTimeOriginal.dt.ss}'
112+
113+
$ f2 -r '{YYYY}-{MM}-{DD}T{H}{MM}{ss}' --dt 'xt.DateTimeOriginal'"""
103114
[flag.exclude]
104115
usage = """
105116

internal/localize/i18n/en.toml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,17 @@ Override the default options according to your preferences. For example,
100100
usage = """
101101
102102
Clean empty directories that were traversed in a renaming operation."""
103+
[flag.dt]
104+
usage = """
105+
106+
Sets the default datetime variable for your replace pattern so that you don't
107+
have to repeat the full variable path for each token. For example, the
108+
following two commands produce the same result, but the second is significantly
109+
easier to type:
110+
111+
$ f2 -r '{xt.DateTimeOriginal.dt.YYYY}-{xt.DateTimeOriginal.dt.MM}-{xt.DateTimeOriginal.DD}T{xt.DateTimeOriginal.dt.H}{xt.DateTimeOriginal.dt.MM}{xt.DateTimeOriginal.dt.ss}'
112+
113+
$ f2 -r '{YYYY}-{MM}-{DD}T{H}{MM}{ss}' --dt 'xt.DateTimeOriginal'"""
103114
[flag.exclude]
104115
usage = """
105116

internal/localize/i18n/es.toml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,17 @@ Sobrescriba las opciones predeterminadas según sus preferencias. Por ejemplo,
100100
usage = """
101101
102102
Limpiar los directorios vacíos que se recorrieron en una operación de renombrado."""
103+
[flag.dt]
104+
usage = """
105+
106+
Establece la variable de fecha y hora predeterminada para su patrón de reemplazo,
107+
de modo que no tenga que repetir la ruta completa de la variable para cada token.
108+
Por ejemplo, los dos comandos siguientes producen el mismo resultado, pero el
109+
segundo es significativamente más fácil de escribir:
110+
111+
$ f2 -r '{xt.DateTimeOriginal.dt.YYYY}-{xt.DateTimeOriginal.dt.MM}-{xt.DateTimeOriginal.DD}T{xt.DateTimeOriginal.dt.H}{xt.DateTimeOriginal.dt.MM}{xt.DateTimeOriginal.dt.ss}'
112+
113+
$ f2 -r '{YYYY}-{MM}-{DD}T{H}{MM}{ss}' --dt 'xt.DateTimeOriginal'"""
103114
[flag.exclude]
104115
usage = """
105116

internal/localize/i18n/fr.toml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,17 @@ Remplacez les options par défaut selon vos préférences. Par exemple,
100100
usage = """
101101
102102
Nettoie les répertoires vides qui ont été parcourus lors d'une opération de renommage."""
103+
[flag.dt]
104+
usage = """
105+
106+
Définit la variable de date et d'heure par défaut pour votre modèle de
107+
remplacement afin que vous n'ayez pas à répéter le chemin complet de la
108+
variable pour chaque jeton. Par exemple, les deux commandes suivantes
109+
produisent le même résultat, mais la seconde est nettement plus facile à taper :
110+
111+
$ f2 -r '{xt.DateTimeOriginal.dt.YYYY}-{xt.DateTimeOriginal.dt.MM}-{xt.DateTimeOriginal.DD}T{xt.DateTimeOriginal.dt.H}{xt.DateTimeOriginal.dt.MM}{xt.DateTimeOriginal.dt.ss}'
112+
113+
$ f2 -r '{YYYY}-{MM}-{DD}T{H}{MM}{ss}' --dt 'xt.DateTimeOriginal'"""
103114
[flag.exclude]
104115
usage = """
105116

internal/localize/i18n/pt.toml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,17 @@ Substitua as opções padrão de acordo com suas preferências. Por exemplo,
100100
usage = """
101101
102102
Limpa diretórios vazios que foram percorridos em uma operação de renomeação."""
103+
[flag.dt]
104+
usage = """
105+
106+
Define a variável de data e hora padrão para o seu padrão de substituição,
107+
de modo que você não precise repetir o caminho completo da variável para cada
108+
token. Por exemplo, os dois comandos a seguir produzem o mesmo resultado,
109+
mas o segundo é significativamente mais fácil de digitar:
110+
111+
$ f2 -r '{xt.DateTimeOriginal.dt.YYYY}-{xt.DateTimeOriginal.dt.MM}-{xt.DateTimeOriginal.DD}T{xt.DateTimeOriginal.dt.H}{xt.DateTimeOriginal.dt.MM}{xt.DateTimeOriginal.dt.ss}'
112+
113+
$ f2 -r '{YYYY}-{MM}-{DD}T{H}{MM}{ss}' --dt 'xt.DateTimeOriginal'"""
103114
[flag.exclude]
104115
usage = """
105116

internal/localize/i18n/ru.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,17 @@ f2 ФЛАГИ [ОПЦИИ] [ПУТИ К ФАЙЛАМ И КАТАЛОГАМ...]
100100
usage = """
101101
102102
Очистить пустые каталоги, которые были пройдены в ходе операции переименования."""
103+
[flag.dt]
104+
usage = """
105+
106+
Устанавливает переменную даты и времени по умолчанию для вашего шаблона замены,
107+
чтобы вам не приходилось повторять полный путь переменной для каждого токена.
108+
Например, следующие две команды приводят к одинаковому результату, но вторую
109+
значительно проще вводить:
110+
111+
$ f2 -r '{xt.DateTimeOriginal.dt.YYYY}-{xt.DateTimeOriginal.dt.MM}-{xt.DateTimeOriginal.DD}T{xt.DateTimeOriginal.dt.H}{xt.DateTimeOriginal.dt.MM}{xt.DateTimeOriginal.dt.ss}'
103112
113+
$ f2 -r '{YYYY}-{MM}-{DD}T{H}{MM}{ss}' --dt 'xt.DateTimeOriginal'"""
104114
[flag.exclude]
105115
usage = """
106116

0 commit comments

Comments
 (0)