Browse Source

Added experimental patch to render thumbnail sequence bug

Toby Chui 3 years ago
parent
commit
36c07f47e1
3 changed files with 30 additions and 27 deletions
  1. 1 20
      mod/agi/agi.file.go
  2. 25 0
      mod/filesystem/fssort/fssort.go
  3. 4 7
      mod/filesystem/metadata/metadata.go

+ 1 - 20
mod/agi/agi.file.go

@@ -487,28 +487,9 @@ func (g *Gateway) injectFileLibFunctions(vm *otto.Otto, u *user.User) {
 		}
 
 		//Sort the dirEntry by file info, a bit slow :(
-		entries := map[string]fs.DirEntry{}
-		fnames := []string{}
-		fis := []fs.FileInfo{}
 		if userSortMode != "default" {
 			//Prepare the data structure for sorting
-			for _, de := range dirEntry {
-				fnames = append(fnames, de.Name())
-				fstat, _ := de.Info()
-				fis = append(fis, fstat)
-				thisFsDirEntry := de
-				entries[de.Name()] = thisFsDirEntry
-			}
-
-			//Sort it
-			sortedNameList := fssort.SortFileList(fnames, fis, userSortMode)
-
-			//Update dirEntry sequence
-			newDirEntry := []fs.DirEntry{}
-			for _, key := range sortedNameList {
-				newDirEntry = append(newDirEntry, entries[key])
-			}
-
+			newDirEntry := fssort.SortDirEntryList(dirEntry, userSortMode)
 			dirEntry = newDirEntry
 		}
 

+ 25 - 0
mod/filesystem/fssort/fssort.go

@@ -70,6 +70,31 @@ func SortFileList(filelistRealpath []string, fileInfos []fs.FileInfo, sortMode s
 	return results
 }
 
+func SortDirEntryList(dirEntries []fs.DirEntry, sortMode string) []fs.DirEntry {
+	entries := map[string]fs.DirEntry{}
+	fnames := []string{}
+	fis := []fs.FileInfo{}
+
+	for _, de := range dirEntries {
+		fnames = append(fnames, de.Name())
+		fstat, _ := de.Info()
+		fis = append(fis, fstat)
+		thisFsDirEntry := de
+		entries[de.Name()] = thisFsDirEntry
+	}
+
+	//Sort it
+	sortedNameList := SortFileList(fnames, fis, sortMode)
+
+	//Update dirEntry sequence
+	newDirEntry := []fs.DirEntry{}
+	for _, key := range sortedNameList {
+		newDirEntry = append(newDirEntry, entries[key])
+	}
+
+	return newDirEntry
+}
+
 func SortModeIsSupported(sortMode string) bool {
 	return contains(sortMode, []string{"default", "reverse", "smallToLarge", "largeToSmall", "mostRecent", "leastRecent", "smart"})
 }

+ 4 - 7
mod/filesystem/metadata/metadata.go

@@ -4,7 +4,6 @@ import (
 	"encoding/base64"
 	"encoding/json"
 	"errors"
-	"io/fs"
 	"log"
 	"net/http"
 	"os"
@@ -254,21 +253,19 @@ func (rh *RenderHandler) HandleLoadCache(w http.ResponseWriter, r *http.Request,
 		sortmode = "default"
 	}
 
+	sortedFis := fssort.SortDirEntryList(fis, sortmode)
+
 	pendingFiles := []string{}
-	sortingFileInfos := []fs.FileInfo{}
 	pendingFolders := []string{}
-	for _, fileInfo := range fis {
+	for _, fileInfo := range sortedFis {
 		if !fileInfo.IsDir() {
 			pendingFiles = append(pendingFiles, filepath.Join(targetPath, fileInfo.Name()))
-			info, _ := fileInfo.Info()
-			sortingFileInfos = append(sortingFileInfos, info)
 		} else {
 			pendingFolders = append(pendingFolders, filepath.Join(targetPath, fileInfo.Name()))
 		}
 	}
 	pendingFiles = append(pendingFiles, pendingFolders...)
-
-	files := fssort.SortFileList(pendingFiles, sortingFileInfos, sortmode)
+	files := pendingFiles
 
 	//Updated implementation 24/12/2020: Load image with cache first before rendering those without
 	for _, file := range files {