Ver Fonte

Fixed bugs in file manager search var

tobychui há 4 anos atrás
pai
commit
6a68cd86dc

+ 30 - 9
file_system.go

@@ -215,6 +215,9 @@ func system_fs_handleFileSearch(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 
+	//Check if case sensitive is enabled
+	casesensitve, _ := mv(r, "casesensitive", true)
+
 	//Translate the vpath to realpath
 	rpath, err := userinfo.VirtualPathToRealPath(vpath)
 	if err != nil {
@@ -262,18 +265,36 @@ func system_fs_handleFileSearch(w http.ResponseWriter, r *http.Request) {
 	} else {
 		//Recursive keyword
 		results := []fs.FileData{}
-		err := filepath.Walk(rpath, func(path string, info os.FileInfo, err error) error {
+		var err error = nil
+		if casesensitve == "true" {
+			//Require case sensitive match
+			err = filepath.Walk(rpath, func(path string, info os.FileInfo, err error) error {
+				if strings.Contains(filepath.Base(path), keyword) {
+					//This is a matching file
+					if !fs.IsInsideHiddenFolder(path) {
+						thisVpath, _ := userinfo.RealPathToVirtualPath(path)
+						results = append(results, fs.GetFileDataFromPath(thisVpath, path, 2))
+					}
 
-			if strings.Contains(filepath.Base(path), keyword) {
-				//This is a matching file
-				if !fs.IsInsideHiddenFolder(path) {
-					thisVpath, _ := userinfo.RealPathToVirtualPath(path)
-					results = append(results, fs.GetFileDataFromPath(thisVpath, path, 2))
 				}
+				return nil
+			})
+		} else {
+			//Require general match
+			keywordLower := strings.ToLower(keyword)
+			err = filepath.Walk(rpath, func(path string, info os.FileInfo, err error) error {
+
+				if strings.Contains(strings.ToLower(filepath.Base(path)), keywordLower) {
+					//This is a matching file
+					if !fs.IsInsideHiddenFolder(path) {
+						thisVpath, _ := userinfo.RealPathToVirtualPath(path)
+						results = append(results, fs.GetFileDataFromPath(thisVpath, path, 2))
+					}
 
-			}
-			return nil
-		})
+				}
+				return nil
+			})
+		}
 
 		if err != nil {
 			sendErrorResponse(w, err.Error())

+ 10 - 0
web/Music/functions/common.js

@@ -23,6 +23,16 @@ function IsSupportExt(ext){
     return false
 }
 
+//Check if the file is a hidden or meta file
+function IsMetaFile(filepath){
+    var filename = filepath.split("/").pop();
+    if (filename.substr(0,2) == "._"){
+        return true;
+    }
+
+    return false;
+}
+
 //Convert filesize from bytes to human readable format
 function bytesToSize(bytes) {
     var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];

+ 4 - 4
web/Music/functions/listSong.js

@@ -85,7 +85,7 @@ function handleUserRequest(){
                     var allfilelist = filelib.walk(thisFileLib, "file");
                     for (var k = 0; k < allfilelist.length; k++){
                         var ext = allfilelist[k].split('.').pop();
-                        if (IsSupportExt(ext) == true){
+                        if (IsSupportExt(ext) == true && !IsMetaFile(allfilelist[k])){
                             musicFiles.push(allfilelist[k]);
                         }
                     }
@@ -163,7 +163,7 @@ function handleUserRequest(){
                     var thisFile = allfilelist[k];
                     var ext = allfilelist[k].split('.').pop();
                     var filename = allfilelist[k].split('/').pop();
-                    if (IsSupportExt(ext) == true && filename.indexOf(keyword) !== -1){
+                    if (IsSupportExt(ext) == true && filename.indexOf(keyword) !== -1 && !IsMetaFile(allfilelist[k])){
                         //This file match our ext req and keyword exists
                         var thisSongData = [];
                         //Access Path 
@@ -248,7 +248,7 @@ function handleUserRequest(){
                         folders.push(filelist[j]);
                     }else{
                         var ext = filelist[j].split(".").pop();
-                        if (IsSupportExt(ext)){
+                        if (IsSupportExt(ext)  && !IsMetaFile(filelist[j])){
                             files.push(filelist[j]);
                         }
                         
@@ -272,7 +272,7 @@ function handleUserRequest(){
                             }
                         }else{
                             var ext = subFolderFileList[j].split(".").pop();
-                            if (IsSupportExt(ext)){
+                            if (IsSupportExt(ext) && !IsMetaFile(subFolderFileList[j])){
                                 thisFolderSubfiles.push(subFolderFileList[j]);
                             }
                             

+ 27 - 4
web/SystemAO/file_system/file_explorer.html

@@ -79,6 +79,12 @@
                 color:white;
             }
 
+            .ts.button.active.darkTheme{
+                background-color:#312f42 !important;
+                border: 1px solid #262533;
+                color:white;
+            }
+
             .ts.button.darkTheme:hover{
                 background-color:#312f42 !important;
                 color:white !important;
@@ -686,8 +692,9 @@
                         <input autocomplete="off" id="searchInput" type="text" class="whiteTheme" placeholder="File Search (Start wildcard search with / , e.g. /*.mp3)" onkeypress="handleSearchBarPress(event);">
                     </div>
                 </div>
-                <button class="ts icon tiny button standard whiteTheme" onclick="handleSearch();"><i class="search icon"></i></button>
-                <button class="ts icon tiny button standard whiteTheme" onclick="hideSearchBar();"><i class="remove icon"></i></button>
+                <button class="ts icon tiny button standard whiteTheme" title="Case Sensitive" onclick="toggleCaseSensitive(this);">Aa</button>
+                <button class="ts icon tiny button standard whiteTheme" title="Search" onclick="handleSearch();"><i class="search icon"></i></button>
+                <button class="ts icon tiny button standard whiteTheme" title="Clear Search" onclick="hideSearchBar();"><i class="remove icon"></i></button>
             </div>
              <div class="msgbox" style="z-index:999; display:none;">
                 <i class="checkmark icon"></i> <span>No Message</span>
@@ -1111,6 +1118,7 @@
             let useLocalstorage = lscheck();
             let overwriteMode = "keep"; //Overwrite mode, support {skip, overwrite, keep}
             let thumbRenderWebSocket = null;
+            let searchCaseSensitive = false;
 
             //Keypress listeners
             let ctrlHold = false;
@@ -1136,7 +1144,7 @@
             let isChromium = window.chrome;
             let isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
             let isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
-            var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
+            let isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
 
             //Intiiation functions
             initRootDirs();
@@ -4419,15 +4427,29 @@
             }
             searchMode = false;
         }
+        
+        //Handle case sensitive in keyword searching
+        function toggleCaseSensitive(btn){
+            if ($(btn).hasClass("active")){
+                $(btn).removeClass("active");
+                searchCaseSensitive = false;
+            }else{
+                $(btn).addClass("active");
+                searchCaseSensitive = true;
+            }
+        }
 
         function handleSearch(){
             var keyword = $("#searchInput").val();
             $("#folderList").html(`<div class="ts basic segment ${currentTheme}">
                 <i class="loading spinner icon ${currentTheme}"></i> <span class="${currentTheme}">Searching</span>
             </div>`);
+            $("#fileList").hide();
+            $("#fileList").html("");
+           
             $.ajax({
                 url: "../../system/file_system/search",
-                data: {path: currentPath, keyword: keyword},
+                data: {path: currentPath, keyword: keyword, casesensitive: searchCaseSensitive},
                 success: function(data){
                     if (data.error !== undefined){
                         msgbox("remove", data.error);
@@ -4435,6 +4457,7 @@
                         //Render the filelist
                         console.log(data);
                         if (data.length == 0){
+                            $("#folderList").show();
                             $("#folderList").html(`<div class="ts basic segment ${currentTheme}">
                                 <div class="ts header ${currentTheme}">
                                     <i class="question icon" ${currentTheme}></i> <span class="${currentTheme}">No Matching Results</span>