Эх сурвалжийг харах

Browse to root if file in incorrect folder path

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk 9 сар өмнө
parent
commit
bcfde98cd1

+ 5 - 3
app/src/main/java/com/nextcloud/utils/extensions/StringExtensions.kt

@@ -25,6 +25,8 @@ fun String.removeFileExtension(): String {
     }
 }
 
-fun dot(): String = "."
-
-fun space(): String = " "
+object StringConstants {
+    const val SLASH = "/"
+    const val DOT = "."
+    const val SPACE = " "
+}

+ 17 - 6
app/src/main/java/com/nextcloud/utils/fileNameValidator/FileNameValidator.kt

@@ -9,14 +9,14 @@ package com.nextcloud.utils.fileNameValidator
 
 import android.content.Context
 import android.text.TextUtils
-import com.nextcloud.utils.extensions.dot
+import com.nextcloud.utils.extensions.StringConstants
 import com.nextcloud.utils.extensions.forbiddenFilenameBaseNames
 import com.nextcloud.utils.extensions.forbiddenFilenameCharacters
 import com.nextcloud.utils.extensions.forbiddenFilenameExtension
 import com.nextcloud.utils.extensions.forbiddenFilenames
 import com.nextcloud.utils.extensions.removeFileExtension
-import com.nextcloud.utils.extensions.space
 import com.owncloud.android.R
+import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.lib.resources.status.OCCapability
 
 object FileNameValidator {
@@ -48,7 +48,7 @@ object FileNameValidator {
             }
         }
 
-        if (filename.endsWith(space()) || filename.endsWith(dot())) {
+        if (filename.endsWith(StringConstants.SPACE) || filename.endsWith(StringConstants.DOT)) {
             return context.getString(R.string.file_name_validator_error_ends_with_space_period)
         }
 
@@ -65,7 +65,7 @@ object FileNameValidator {
             ) {
                 return context.getString(
                     R.string.file_name_validator_error_reserved_names,
-                    filename.substringBefore(dot())
+                    filename.substringBefore(StringConstants.DOT)
                 )
             }
         }
@@ -79,7 +79,7 @@ object FileNameValidator {
             ) {
                 return context.getString(
                     R.string.file_name_validator_error_reserved_names,
-                    filename.substringBefore(dot())
+                    filename.substringBefore(StringConstants.DOT)
                 )
             }
         }
@@ -90,7 +90,7 @@ object FileNameValidator {
             if (forbiddenFilenameExtension.any { filename.endsWith(it, ignoreCase = true) }) {
                 return context.getString(
                     R.string.file_name_validator_error_forbidden_file_extensions,
-                    filename.substringAfter(dot())
+                    filename.substringAfter(StringConstants.DOT)
                 )
             }
         }
@@ -116,6 +116,17 @@ object FileNameValidator {
         return checkFolderPath(folderPath, capability, context) && checkFilePaths(filePaths, capability, context)
     }
 
+    fun checkParentRemotePaths(filePaths: List<OCFile>, capability: OCCapability, context: Context): Boolean {
+        return filePaths.all {
+            if (it.parentRemotePath != StringConstants.SLASH) {
+                val parentFolderName = it.parentRemotePath.replace(StringConstants.SLASH, "")
+                checkFileName(parentFolderName, capability, context) == null
+            } else {
+                true
+            }
+        }
+    }
+
     private fun checkFilePaths(filePaths: List<String>, capability: OCCapability, context: Context): Boolean {
         return filePaths.all { checkFileName(it, capability, context) == null }
     }

+ 12 - 1
app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -1250,7 +1250,13 @@ public class OCFileListFragment extends ExtendedListFragment implements
             boolean isFilenamesCorrect = checkFilenames(checkedFiles);
 
             if (!isFilenamesCorrect) {
-                DisplayUtils.showSnackMessage(requireActivity(),R.string.file_name_validator_rename_before_move_or_copy);
+                DisplayUtils.showSnackMessage(requireActivity(), R.string.file_name_validator_rename_before_move_or_copy);
+                return false;
+            }
+
+            if (!FileNameValidator.INSTANCE.checkParentRemotePaths(new ArrayList<>(checkedFiles), getCapabilities(), requireContext())) {
+                browseToRoot();
+                DisplayUtils.showSnackMessage(requireActivity(), R.string.file_name_validator_current_path_is_invalid);
                 return false;
             }
 
@@ -1272,6 +1278,11 @@ public class OCFileListFragment extends ExtendedListFragment implements
         return false;
     }
 
+    private void browseToRoot() {
+        OCFile root = mContainerActivity.getStorageManager().getFileByEncryptedRemotePath(OCFile.ROOT_PATH);
+        browseToFolder(root,0);
+    }
+
     private OCCapability getCapabilities() {
         final User currentUser = accountManager.getUser();
         return mContainerActivity.getStorageManager().getCapability(currentUser.getAccountName());

+ 2 - 1
app/src/main/res/values/strings.xml

@@ -1219,7 +1219,8 @@
     <string name="unified_search_fragment_contact_not_found">Contact not found, you can always sync to update. Redirecting to web…</string>
     <string name="unified_search_fragment_permission_needed">Permissions are required to open search result otherwise it will redirected to web…</string>
 
-    <string name="file_name_validator_rename_before_move_or_copy">Some file names are invalid. Please rename the file before moving or copying.</string>
+    <string name="file_name_validator_current_path_is_invalid">Current folder name is invalid, please rename the folder. Redirecting to root</string>
+    <string name="file_name_validator_rename_before_move_or_copy">Some file names are invalid. Please rename the file before moving or copying</string>
     <string name="file_name_validator_upload_content_error">Some contents cannot able to uploaded due to contains reserved names or invalid character</string>
     <string name="file_name_validator_error_contains_reserved_names_or_invalid_characters">Folder path contains reserved names or invalid character</string>
     <string name="file_name_validator_error_invalid_character">File name contains invalid characters: %s</string>