Quellcode durchsuchen

Added auto sort mode saving for file explorer

TC pushbot 5 vor 4 Jahren
Ursprung
Commit
f5bc4fa8e1
2 geänderte Dateien mit 118 neuen und 47 gelöschten Zeilen
  1. 50 1
      file_system.go
  2. 68 46
      web/SystemAO/file_system/file_explorer.html

+ 50 - 1
file_system.go

@@ -93,6 +93,9 @@ func FileSystemInit() {
 	router.HandleFunc("/system/file_system/handleFolderCache", system_fs_handleFolderCache)
 	router.HandleFunc("/system/file_system/handleCacheRender", system_fs_handleCacheRender)
 
+	//Directory specific config
+	router.HandleFunc("/system/file_system/sortMode", system_fs_handleFolderSortModePreference)
+
 	//Register the module
 	moduleHandler.RegisterModule(module.ModuleInfo{
 		Name:        "File Manager",
@@ -147,6 +150,13 @@ func FileSystemInit() {
 		panic(err)
 	}
 
+	//Create new table for sort preference
+	err = sysdb.NewTable("fs-sortpref")
+	if err != nil {
+		log.Println("Failed to create table for file system")
+		panic(err)
+	}
+
 	//Create a RenderHandler for caching thumbnails
 	thumbRenderHandler = metadata.NewRenderHandler()
 
@@ -2383,10 +2393,49 @@ func system_fs_handleFolderCache(w http.ResponseWriter, r *http.Request) {
 	}
 
 	thumbRenderHandler.BuildCacheForFolder(rpath)
-
 	sendOK(w)
 }
 
+//Handle the get and set of sort mode of a particular folder
+func system_fs_handleFolderSortModePreference(w http.ResponseWriter, r *http.Request) {
+	folder, err := mv(r, "folder", true)
+	if err != nil {
+		sendErrorResponse(w, "Invalid folder given")
+		return
+	}
+
+	opr, _ := mv(r, "opr", true)
+
+	folder = filepath.ToSlash(filepath.Clean(folder))
+
+	if opr == "" || opr == "get" {
+		sortMode := "default"
+		if sysdb.KeyExists("fs-sortpref", folder) {
+			sysdb.Read("fs-sortpref", folder, &sortMode)
+		}
+
+		js, _ := json.Marshal(sortMode)
+		sendJSONResponse(w, string(js))
+	} else if opr == "set" {
+		sortMode, err := mv(r, "mode", true)
+		if err != nil {
+			sendErrorResponse(w, "Invalid sort mode given")
+			return
+		}
+
+		if !stringInSlice(sortMode, []string{"default", "reverse", "smallToLarge", "largeToSmall", "mostRecent", "leastRecent"}) {
+			sendErrorResponse(w, "Not supported sort mode: "+sortMode)
+			return
+		}
+
+		sysdb.Write("fs-sortpref", folder, sortMode)
+		sendOK(w)
+	} else {
+		sendErrorResponse(w, "Invalid opr mode")
+		return
+	}
+}
+
 //Handle setting and loading of file permission on Linux
 func system_fs_handleFilePermission(w http.ResponseWriter, r *http.Request) {
 	file, err := mv(r, "file", true)

+ 68 - 46
web/SystemAO/file_system/file_explorer.html

@@ -1449,58 +1449,70 @@
                     </div>`);
                 }
                
+                //Get sort mode from server side
                 $.ajax({
-                    url: "../../system/file_system/listDir",
-                    method: "POST",
-                    data: {dir: decodeURIComponent(path), sort: sortMode},
+                    url: "../../system/file_system/sortMode",
+                    data: {opr: "get", folder: currentPath},
                     success: function(data){
-                        //Parse the filelist into global variable
-                        currentFilelist = [];
-                        if (data === null){
-                            //There is nothing is this folder.
-                            $("#folderList").hide();
-                            $("#fileList").hide();
-                            return;
+                        if (data.error == undefined){
+                            sortMode = data;
                         }
+                        $("#sortingMethodSelector").val(sortMode);
+                        //Start listdir event
+                        $.ajax({
+                            url: "../../system/file_system/listDir",
+                            method: "POST",
+                            data: {dir: decodeURIComponent(path), sort: sortMode},
+                            success: function(data){
+                                //Parse the filelist into global variable
+                                currentFilelist = [];
+                                if (data === null){
+                                    //There is nothing is this folder.
+                                    $("#folderList").hide();
+                                    $("#fileList").hide();
+                                    return;
+                                }
 
-                        if (data.error !== undefined){
-                            //Parse path error. Try to refresh the page
-                            console.log("Path parse error! Redirecting to parent directory.", data.error);
-                            var pdir = currentPath.split("/");
-                            pdir.pop(); pdir.pop();
-                            pdir = pdir.join("/");
-                            currentPath = pdir;
-
-                            //Check if it is already rooted and no more parent ahead
-                            if (currentPath == ""){
-                                currentPath = "user:/";
-                            }
-                            
-                            //listDirectory(currentPath, function(){
-                            //    window.location.reload();
-                            //});
-                            return;
-                        }else{
-                            //Filelist returned. Render it
-                            renderDirectory(data,function(){
-                                //Restore the selected file list
-                                $(".fileObject.item").each(function(){
-                                    for (var i = 0; i < selectedFiles.length; i++){
-                                        var thisFilename = selectedFiles[i];
-                                        if (thisFilename == $(this).attr("filename")){
-                                            $(this).addClass("selected");
-                                        }
+                                if (data.error !== undefined){
+                                    //Parse path error. Try to refresh the page
+                                    console.log("Path parse error! Redirecting to parent directory.", data.error);
+                                    var pdir = currentPath.split("/");
+                                    pdir.pop(); pdir.pop();
+                                    pdir = pdir.join("/");
+                                    currentPath = pdir;
+
+                                    //Check if it is already rooted and no more parent ahead
+                                    if (currentPath == ""){
+                                        currentPath = "user:/";
                                     }
-                                });
-                               
+                                    
+                                    //listDirectory(currentPath, function(){
+                                    //    window.location.reload();
+                                    //});
+                                    return;
+                                }else{
+                                    //Filelist returned. Render it
+                                    renderDirectory(data,function(){
+                                        //Restore the selected file list
+                                        $(".fileObject.item").each(function(){
+                                            for (var i = 0; i < selectedFiles.length; i++){
+                                                var thisFilename = selectedFiles[i];
+                                                if (thisFilename == $(this).attr("filename")){
+                                                    $(this).addClass("selected");
+                                                }
+                                            }
+                                        });
+                                    
 
-                                //Perform the callback
-                                if (callback !== undefined){
-                                    callback();
+                                        //Perform the callback
+                                        if (callback !== undefined){
+                                            callback();
+                                        }
+                                    });
                                 }
-                            });
-                        }
-                    } 
+                            } 
+                        });
+                    }
                 });
             }
 
@@ -4886,7 +4898,17 @@
             function updateSortingMethods(){
                 var method = $("#sortingMethodSelector").val();
                 sortMode = method;
-                refreshList();
+
+                //Save it to server side
+                $.ajax({
+                    url: "../../system/file_system/sortMode",
+                    method: "POST",
+                    data: {opr: "set", folder: currentPath, mode: sortMode},
+                    success: function(data){
+                        //console.log("Sort mode saved: " + data)
+                        refreshList();
+                    }
+                });
             }
 
             function requestCSRFToken(callback){