Replaced separate values for base, file number, and file extension with a struct, and added methods to increment/decrement that value
This commit is contained in:
parent
0d9e74fbca
commit
c8971f5187
122
cmd/files.go
122
cmd/files.go
|
@ -18,6 +18,20 @@ import (
|
||||||
"github.com/h2non/filetype"
|
"github.com/h2non/filetype"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Path struct {
|
||||||
|
Base string
|
||||||
|
Number int
|
||||||
|
Extension string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Path) Increment() {
|
||||||
|
p.Number = p.Number + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Path) Decrement() {
|
||||||
|
p.Number = p.Number - 1
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrNoImagesFound = fmt.Errorf("no supported image formats found")
|
ErrNoImagesFound = fmt.Errorf("no supported image formats found")
|
||||||
)
|
)
|
||||||
|
@ -39,20 +53,10 @@ func appendPaths(m map[string][]string, path, filter string) (map[string][]strin
|
||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFirstFile(path string) (string, error) {
|
func getFirstFile(p Path) (string, error) {
|
||||||
re := regexp.MustCompile(`(.+)([0-9]{3})(\..+)`)
|
p.Number = 1
|
||||||
|
|
||||||
split := re.FindAllStringSubmatch(path, -1)
|
fileName, err := tryExtensions(p)
|
||||||
|
|
||||||
if len(split) < 1 || len(split[0]) < 3 {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
base := split[0][1]
|
|
||||||
number := 1
|
|
||||||
extension := split[0][3]
|
|
||||||
|
|
||||||
fileName, err := tryExtensions(base, number, extension)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -60,57 +64,36 @@ func getFirstFile(path string) (string, error) {
|
||||||
return fileName, nil
|
return fileName, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getLastFile(path string) (string, error) {
|
func getLastFile(p Path) (string, error) {
|
||||||
re := regexp.MustCompile(`(.+)([0-9]{3})(\..+)`)
|
|
||||||
|
|
||||||
split := re.FindAllStringSubmatch(path, -1)
|
|
||||||
|
|
||||||
if len(split) < 1 || len(split[0]) < 3 {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
base := split[0][1]
|
|
||||||
number := 1
|
|
||||||
extension := split[0][3]
|
|
||||||
|
|
||||||
var fileName string
|
var fileName string
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
p.Number = 1
|
||||||
|
|
||||||
for {
|
for {
|
||||||
fileName, err = tryExtensions(base, number, extension)
|
p.Increment()
|
||||||
|
|
||||||
|
fileName, err = tryExtensions(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if fileName == "" {
|
if fileName == "" {
|
||||||
fileName, err = tryExtensions(base, number-1, extension)
|
p.Decrement()
|
||||||
|
|
||||||
|
fileName, err = tryExtensions(p)
|
||||||
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
number = number + 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return fileName, nil
|
return fileName, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getNextFile(path string) (string, error) {
|
func getNextFile(p Path) (string, error) {
|
||||||
re := regexp.MustCompile(`(.+)([0-9]{3})(\..+)`)
|
p.Increment()
|
||||||
|
|
||||||
split := re.FindAllStringSubmatch(path, -1)
|
fileName, err := tryExtensions(p)
|
||||||
|
|
||||||
if len(split) < 1 || len(split[0]) < 3 {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
base := split[0][1]
|
|
||||||
number, err := strconv.Atoi(split[0][2])
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
extension := split[0][3]
|
|
||||||
|
|
||||||
fileName, err := tryExtensions(base, number+1, extension)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -118,23 +101,10 @@ func getNextFile(path string) (string, error) {
|
||||||
return fileName, err
|
return fileName, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPreviousFile(path string) (string, error) {
|
func getPreviousFile(p Path) (string, error) {
|
||||||
re := regexp.MustCompile(`(.+)([0-9]{3})(\..+)`)
|
p.Decrement()
|
||||||
|
|
||||||
split := re.FindAllStringSubmatch(path, -1)
|
fileName, err := tryExtensions(p)
|
||||||
|
|
||||||
if len(split) < 1 || len(split[0]) < 3 {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
base := split[0][1]
|
|
||||||
number, err := strconv.Atoi(split[0][2])
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
extension := split[0][3]
|
|
||||||
|
|
||||||
fileName, err := tryExtensions(base, number-1, extension)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -142,13 +112,35 @@ func getPreviousFile(path string) (string, error) {
|
||||||
return fileName, err
|
return fileName, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func tryExtensions(base string, number int, extension string) (string, error) {
|
func splitPath(path string) (Path, error) {
|
||||||
extensions := [6]string{extension, ".jpg", ".jpeg", ".png", ".gif", ".webp"}
|
re := regexp.MustCompile(`(.+)([0-9]{3})(\..+)`)
|
||||||
|
|
||||||
|
split := re.FindAllStringSubmatch(path, -1)
|
||||||
|
|
||||||
|
if len(split) < 1 || len(split[0]) < 3 {
|
||||||
|
return Path{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
p := Path{}
|
||||||
|
var err error
|
||||||
|
|
||||||
|
p.Base = split[0][1]
|
||||||
|
p.Number, err = strconv.Atoi(split[0][2])
|
||||||
|
if err != nil {
|
||||||
|
return Path{}, err
|
||||||
|
}
|
||||||
|
p.Extension = split[0][3]
|
||||||
|
|
||||||
|
return p, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func tryExtensions(p Path) (string, error) {
|
||||||
|
extensions := [6]string{p.Extension, ".jpg", ".jpeg", ".png", ".gif", ".webp"}
|
||||||
|
|
||||||
var fileName string
|
var fileName string
|
||||||
|
|
||||||
for _, i := range extensions {
|
for _, i := range extensions {
|
||||||
fileName = fmt.Sprintf("%v%.3d%v", base, number, i)
|
fileName = fmt.Sprintf("%v%.3d%v", p.Base, p.Number, i)
|
||||||
|
|
||||||
exists, err := fileExists(fileName)
|
exists, err := fileExists(fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Version = "0.13.0"
|
var Version = "0.13.1"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
rootCmd.AddCommand(versionCmd)
|
rootCmd.AddCommand(versionCmd)
|
||||||
|
|
42
cmd/web.go
42
cmd/web.go
|
@ -151,7 +151,12 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
filePath, err := getNextFile(query)
|
path, err := splitPath(query)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
filePath, err := getNextFile(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -167,7 +172,12 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
filePath, err = getFirstFile(filePath)
|
path, err := splitPath(filePath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
filePath, err = getFirstFile(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -185,7 +195,12 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
filePath, err = getFirstFile(filePath)
|
path, err := splitPath(filePath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
filePath, err = getFirstFile(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -198,7 +213,12 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
filePath, err := getPreviousFile(query)
|
path, err := splitPath(query)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
filePath, err := getPreviousFile(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -214,7 +234,12 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
filePath, err = getLastFile(filePath)
|
path, err := splitPath(filePath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
filePath, err = getLastFile(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -232,7 +257,12 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
filePath, err = getLastFile(filePath)
|
path, err := splitPath(filePath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
filePath, err = getLastFile(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue