mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 07:13:00 +00:00 
			
		
		
		
	Check if file really exists before asking user to overwrite it
This commit is contained in:
		| @@ -757,15 +757,14 @@ public class DownloadDialog extends DialogFragment | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // check if is our file | ||||
|         // get state of potential mission referring to the same file | ||||
|         final MissionState state = downloadManager.checkForExistingMission(storage); | ||||
|         @StringRes | ||||
|         final int msgBtn; | ||||
|         @StringRes | ||||
|         final int msgBody; | ||||
|         @StringRes final int msgBtn; | ||||
|         @StringRes final int msgBody; | ||||
|  | ||||
|         // this switch checks if there is already a mission referring to the same file | ||||
|         switch (state) { | ||||
|             case Finished: | ||||
|             case Finished: // there is already a finished mission | ||||
|                 msgBtn = R.string.overwrite; | ||||
|                 msgBody = R.string.overwrite_finished_warning; | ||||
|                 break; | ||||
| @@ -777,7 +776,7 @@ public class DownloadDialog extends DialogFragment | ||||
|                 msgBtn = R.string.generate_unique_name; | ||||
|                 msgBody = R.string.download_already_running; | ||||
|                 break; | ||||
|             case None: | ||||
|             case None: // there is no mission referring to the same file | ||||
|                 if (mainStorage == null) { | ||||
|                     // This part is called if: | ||||
|                     // * using SAF on older android version | ||||
| @@ -812,7 +811,7 @@ public class DownloadDialog extends DialogFragment | ||||
|                 msgBody = R.string.overwrite_unrelated_warning; | ||||
|                 break; | ||||
|             default: | ||||
|                 return; | ||||
|                 return; // unreachable | ||||
|         } | ||||
|  | ||||
|         final AlertDialog.Builder askDialog = new AlertDialog.Builder(context) | ||||
|   | ||||
| @@ -290,11 +290,10 @@ public class StoredFileHelper implements Serializable { | ||||
|         } | ||||
|  | ||||
|         // WARNING: DocumentFile.exists() and DocumentFile.isFile() methods are slow | ||||
|         final boolean exists = docFile == null ? ioFile.exists() : docFile.exists(); | ||||
|         // ¿docFile.isVirtual() means is no-physical? | ||||
|         final boolean isFile = docFile == null ? ioFile.isFile() : docFile.isFile(); | ||||
|  | ||||
|         return exists && isFile; | ||||
|         // docFile.isVirtual() means it is non-physical? | ||||
|         return docFile == null | ||||
|                 ? (ioFile.exists() && ioFile.isFile()) | ||||
|                 : (docFile.exists() && docFile.isFile()); | ||||
|     } | ||||
|  | ||||
|     public boolean create() { | ||||
|   | ||||
| @@ -106,7 +106,8 @@ public class DownloadManager { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Loads finished missions from the data source | ||||
|      * Loads finished missions from the data source and forgets finished missions whose file does | ||||
|      * not exist anymore. | ||||
|      */ | ||||
|     private ArrayList<FinishedMission> loadFinishedMissions() { | ||||
|         ArrayList<FinishedMission> finishedMissions = mFinishedMissionStore.loadFinishedMissions(); | ||||
| @@ -331,14 +332,29 @@ public class DownloadManager { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get a finished mission by its path | ||||
|      * Get the index into {@link #mMissionsFinished} of a finished mission by its path, return | ||||
|      * {@code -1} if there is no such mission. This function also checks if the matched mission's | ||||
|      * file exists, and, if it does not, the related mission is forgotten about (like in {@link | ||||
|      * #loadFinishedMissions()}) and {@code -1} is returned. | ||||
|      * | ||||
|      * @param storage where the file possible is stored | ||||
|      * @param storage where the file would be stored | ||||
|      * @return the mission index or -1 if no such mission exists | ||||
|      */ | ||||
|     private int getFinishedMissionIndex(StoredFileHelper storage) { | ||||
|         for (int i = 0; i < mMissionsFinished.size(); i++) { | ||||
|             if (mMissionsFinished.get(i).storage.equals(storage)) { | ||||
|                 // If the file does not exist the mission is not valid anymore. Also checking if | ||||
|                 // length == 0 since the file picker may create an empty file before yielding it, | ||||
|                 // but that does not mean the file really belonged to a previous mission. | ||||
|                 if (!storage.existsAsFile() || storage.length() == 0) { | ||||
|                     if (DEBUG) { | ||||
|                         Log.d(TAG, "matched downloaded file removed: " + storage.getName()); | ||||
|                     } | ||||
|  | ||||
|                     mFinishedMissionStore.deleteMission(mMissionsFinished.get(i)); | ||||
|                     mMissionsFinished.remove(i); | ||||
|                     return -1; // finished mission whose associated file was removed | ||||
|                 } | ||||
|                 return i; | ||||
|             } | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Stypox
					Stypox