From 1d910419d1eb919b6246b168ebf8e2a325b4502a Mon Sep 17 00:00:00 2001 From: WithoutPants <53250216+WithoutPants@users.noreply.github.com> Date: Fri, 27 Nov 2020 08:01:36 +1100 Subject: [PATCH] Replace natural_sort with third party call (#964) --- pkg/manager/generator_sprite.go | 4 +- pkg/utils/natural_sort.go | 112 -------------------------------- 2 files changed, 3 insertions(+), 113 deletions(-) delete mode 100644 pkg/utils/natural_sort.go diff --git a/pkg/manager/generator_sprite.go b/pkg/manager/generator_sprite.go index c2d642cb1..308b85714 100644 --- a/pkg/manager/generator_sprite.go +++ b/pkg/manager/generator_sprite.go @@ -8,10 +8,12 @@ import ( "math" "os" "path/filepath" + "sort" "strings" "github.com/bmatcuk/doublestar/v2" "github.com/disintegration/imaging" + "github.com/fvbommel/sortorder" "github.com/stashapp/stash/pkg/ffmpeg" "github.com/stashapp/stash/pkg/logger" "github.com/stashapp/stash/pkg/utils" @@ -89,7 +91,7 @@ func (g *SpriteGenerator) generateSpriteImage(encoder *ffmpeg.Encoder) error { // Combine all of the thumbnails into a sprite image globPath := filepath.Join(instance.Paths.Generated.Tmp, fmt.Sprintf("thumbnail_%s_*.jpg", g.VideoChecksum)) imagePaths, _ := doublestar.Glob(globPath) - utils.NaturalSort(imagePaths) + sort.Sort(sortorder.Natural(imagePaths)) var images []image.Image for _, imagePath := range imagePaths { img, err := imaging.Open(imagePath) diff --git a/pkg/utils/natural_sort.go b/pkg/utils/natural_sort.go deleted file mode 100644 index a2bbcf003..000000000 --- a/pkg/utils/natural_sort.go +++ /dev/null @@ -1,112 +0,0 @@ -/* -https://github.com/facette/natsort - -Copyright (c) 2015, Vincent Batoufflet and Marc Falzon -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the authors nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -*/ - -package utils - -import ( - "regexp" - "sort" - "strconv" -) - -type naturalStringSlice []string - -func (s naturalStringSlice) Len() int { - return len(s) -} - -func (s naturalStringSlice) Less(a, b int) bool { - return NaturalCompare(s[a], s[b]) -} - -func (s naturalStringSlice) Swap(a, b int) { - s[a], s[b] = s[b], s[a] -} - -var chunkifyRegexp = regexp.MustCompile(`(\d+|\D+)`) - -func chunkify(s string) []string { - return chunkifyRegexp.FindAllString(s, -1) -} - -func NaturalSort(l []string) { - sort.Sort(naturalStringSlice(l)) -} - -func NaturalCompare(a, b string) bool { - chunksA := chunkify(a) - chunksB := chunkify(b) - - nChunksA := len(chunksA) - nChunksB := len(chunksB) - - for i := range chunksA { - if i >= nChunksB { - return false - } - - aInt, aErr := strconv.Atoi(chunksA[i]) - bInt, bErr := strconv.Atoi(chunksB[i]) - - // If both chunks are numeric, compare them as integers - if aErr == nil && bErr == nil { - if aInt == bInt { - if i == nChunksA-1 { - // We reached the last chunk of A, thus B is greater than A - return true - } else if i == nChunksB-1 { - // We reached the last chunk of B, thus A is greater than B - return false - } - continue - } - return aInt < bInt - } - - // So far both strings are equal, continue to next chunk - if chunksA[i] == chunksB[i] { - if i == nChunksA-1 { - // We reached the last chunk of A, thus B is greater than A - return true - } else if i == nChunksB-1 { - // We reached the last chunk of B, thus A is greater than B - return false - } - continue - } - return chunksA[i] < chunksB[i] - } - - return false -}