浏览代码

Check file name before move or copy

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk 9 月之前
父节点
当前提交
cbf9d869a9

+ 27 - 0
app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -60,6 +60,7 @@ import com.nextcloud.utils.ShortcutUtil;
 import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.nextcloud.utils.extensions.FileExtensionsKt;
 import com.nextcloud.utils.extensions.IntentExtensionsKt;
+import com.nextcloud.utils.fileNameValidator.FileNameValidator;
 import com.nextcloud.utils.view.FastScrollUtils;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
@@ -1246,6 +1247,13 @@ public class OCFileListFragment extends ExtendedListFragment implements
             mContainerActivity.getFileOperationsHelper().toggleFavoriteFiles(checkedFiles, false);
             return true;
         } else if (itemId == R.id.action_move_or_copy) {
+            boolean isFilenamesCorrect = checkFilenames(checkedFiles);
+
+            if (!isFilenamesCorrect) {
+                DisplayUtils.showSnackMessage(requireActivity(),R.string.file_name_validator_rename_before_move_or_copy);
+                return false;
+            }
+
             pickFolderForMoveOrCopy(checkedFiles);
             return true;
         } else if (itemId == R.id.action_select_all_action_menu) {
@@ -1264,6 +1272,25 @@ public class OCFileListFragment extends ExtendedListFragment implements
         return false;
     }
 
+    private OCCapability getCapabilities() {
+        final User currentUser = accountManager.getUser();
+        return mContainerActivity.getStorageManager().getCapability(currentUser.getAccountName());
+    }
+
+    private boolean checkFilenames(Set<OCFile> checkedFiles) {
+        boolean result = true;
+
+        for (OCFile file : checkedFiles) {
+            String errorMessage = FileNameValidator.INSTANCE.checkFileName(file.getFileName(), getCapabilities(), requireContext(), null);
+            if (errorMessage != null) {
+                result = false;
+                break;
+            }
+        }
+
+        return result;
+    }
+
     private void pickFolderForMoveOrCopy(final Set<OCFile> checkedFiles) {
         int requestCode = FileDisplayActivity.REQUEST_CODE__MOVE_OR_COPY_FILES;
         String extraAction = FolderPickerActivity.MOVE_OR_COPY;

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

@@ -1219,8 +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_upload_content_error">Some contents cannot able to uploaded due to contains reserved names or invalid character.</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>
     <string name="file_name_validator_error_reserved_names">%s is a reserved name</string>