From 94c235c116ebca594662417b5fb2c7378f326c6b Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 08 一月 2025 18:12:31 +0800
Subject: [PATCH] 1.优化上传相关代码。 2.修复多个文件上传时进度条显示异常。

---
 app/src/main/java/com/dayu/pipirrapp/tool/FileUploadUtils.java |   92 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 86 insertions(+), 6 deletions(-)

diff --git a/app/src/main/java/com/dayu/pipirrapp/tool/FileUploadUtils.java b/app/src/main/java/com/dayu/pipirrapp/tool/FileUploadUtils.java
index 5755332..6803845 100644
--- a/app/src/main/java/com/dayu/pipirrapp/tool/FileUploadUtils.java
+++ b/app/src/main/java/com/dayu/pipirrapp/tool/FileUploadUtils.java
@@ -1,13 +1,18 @@
 package com.dayu.pipirrapp.tool;
 
+import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread;
+
 import android.content.Context;
+import android.text.TextUtils;
 
 import com.dayu.pipirrapp.adapter.AddPictureAdapter;
 import com.dayu.pipirrapp.bean.net.UplodFileState;
 import com.dayu.pipirrapp.net.ApiManager;
 import com.dayu.pipirrapp.net.BaseResponse;
-import com.dayu.pipirrapp.net.upload.UploadFileListener;
+import com.luck.picture.lib.entity.LocalMedia;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 import retrofit2.Call;
@@ -38,21 +43,96 @@
     }
 
     /**
-     *  褰撳叧闂璦ctivity鏃跺叧闂墍鏈夎姹�
+     * 褰撳叧闂璦ctivity鏃跺叧闂墍鏈夎姹�
+     *
      * @param uplodFileStates
      */
-    public static void cancelAllCall(Map<String, UplodFileState> uplodFileStates){
+    public static void cancelAllCall(Map<String, UplodFileState> uplodFileStates) {
         try {
-            for(UplodFileState uplodFileState:uplodFileStates.values()){
-                Call<BaseResponse> mCall =uplodFileState.getThisCall();
+            for (UplodFileState uplodFileState : uplodFileStates.values()) {
+                Call<BaseResponse> mCall = uplodFileState.getThisCall();
                 if (mCall != null) {
                     mCall.cancel();
                 }
             }
         } catch (Exception e) {
-           e.printStackTrace();
+            e.printStackTrace();
         }
 
     }
 
+    // 鏇存柊UI
+    public static void updateUI(ArrayList<LocalMedia> result, AddPictureAdapter mAdapter) {
+        runOnUiThread(() -> {
+            boolean isMaxSize = result.size() == mAdapter.getSelectMax();
+            int oldSize = mAdapter.getData().size();
+            mAdapter.notifyItemRangeRemoved(0, isMaxSize ? oldSize + 1 : oldSize);
+            mAdapter.getData().clear();
+            mAdapter.getData().addAll(result);
+            mAdapter.notifyItemRangeInserted(0, result.size());
+        });
+    }
+
+    public static void cancelRemovedUploads(ArrayList<LocalMedia> result, Map<String, UplodFileState> uplodFileStates) {
+        List<String> pathsToRemove = new ArrayList<>();
+        for (UplodFileState uplodFileState : uplodFileStates.values()) {
+            String filePath = uplodFileState.getFilePath();
+            // 妫�鏌� result 涓槸鍚﹀寘鍚鏂囦欢璺緞
+            boolean isInResult = false;
+            for (LocalMedia media : result) {
+                String compressPath = media.getCompressPath();
+                //鍒ゆ柇鏄惁鏈夎繖涓矾寰勶紝娌℃湁鐨勮瘽涓婁紶璇ュ浘鐗囧苟娣诲姞uplodFileStates涓�
+                if (TextUtils.isEmpty(compressPath)) {
+                    compressPath = media.getRealPath();
+                }
+                if (compressPath.equals(filePath)) {
+                    isInResult = true;
+                    break;
+                }
+            }
+            // 濡傛灉 result 涓病鏈夎璺緞锛屽垯灏嗗叾鍔犲叆寰呯Щ闄ゅ垪琛�
+            if (!isInResult) {
+                try {
+                    //娌℃湁璇ユ枃浠朵互鍚庡彇娑堜笂浼�
+                    uplodFileState.getThisCall().cancel();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                pathsToRemove.add(filePath);
+            }
+        }
+        for (String removeFile : pathsToRemove) {
+            uplodFileStates.remove(removeFile);
+        }
+    }
+
+    /**
+     *
+     * @param context
+     * @param media
+     * @param uplodFileStates
+     * @param mAdapter
+     */
+    public static void creatAndUploadFile(Context context, LocalMedia media, Map<String, UplodFileState> uplodFileStates, AddPictureAdapter mAdapter) {
+        String compressPath = media.getCompressPath();
+        //鍒ゆ柇鏄惁鏈夎繖涓矾寰勶紝娌℃湁鐨勮瘽涓婁紶璇ュ浘鐗囧苟娣诲姞uplodFileStates涓�
+        if (TextUtils.isEmpty(compressPath)) {
+            compressPath = media.getRealPath();
+        }
+        if (!uplodFileStates.containsKey(compressPath)) {
+            UplodFileState uplodFileState = new UplodFileState();
+            uplodFileState.setFilePath(compressPath);
+            if (compressPath.toLowerCase().endsWith(".mp4") || compressPath.toLowerCase().endsWith(".avi") || compressPath.toLowerCase().endsWith(".mkv") || compressPath.toLowerCase().endsWith(".mov")) {
+                // 杩欐槸瑙嗛鏂囦欢
+                uplodFileState.setUploadType(UplodFileState.VIDEO_TYPE);
+            } else {
+                uplodFileState.setUploadType(UplodFileState.IMG_TYPE);
+            }
+            uplodFileState.setExtName(media.getMimeType());
+            uplodFileStates.put(compressPath, uplodFileState);
+            // 鎵ц涓婁紶鍥剧墖鐨勬搷浣�
+            FileUploadUtils.uploadFile(context, uplodFileState, uplodFileStates, mAdapter);
+        }
+    }
+
 }

--
Gitblit v1.8.0