mirror of
https://github.com/nextcloud/android.git
synced 2024-12-18 15:01:57 +03:00
get-files-for-upload
Signed-off-by: alperozturk <alper_ozturk@proton.me>
This commit is contained in:
parent
2ec38321b7
commit
b977b44295
2 changed files with 32 additions and 53 deletions
|
@ -37,6 +37,8 @@ import com.owncloud.android.utils.FileStorageUtils
|
|||
import com.owncloud.android.utils.FilesSyncHelper
|
||||
import com.owncloud.android.utils.MimeType
|
||||
import com.owncloud.android.utils.MimeTypeUtil
|
||||
import com.owncloud.android.utils.SyncedFolderUtils.isFileNameQualifiedForAutoUpload
|
||||
import com.owncloud.android.utils.SyncedFolderUtils.isQualifiedFolder
|
||||
import java.io.File
|
||||
import java.text.ParsePosition
|
||||
import java.text.SimpleDateFormat
|
||||
|
@ -217,6 +219,30 @@ class FilesSyncWork(
|
|||
syncedFolderProvider.updateSyncFolder(syncedFolder)
|
||||
}
|
||||
|
||||
private fun getAllFiles(path: String): Set<String> {
|
||||
val result = mutableListOf<String>()
|
||||
val directory = File(path)
|
||||
|
||||
if (directory.exists()) {
|
||||
val files = directory.listFiles()
|
||||
|
||||
files?.forEach { file ->
|
||||
if (file.isFile) {
|
||||
if (file.exists() &&
|
||||
isQualifiedFolder(file.getParent()) &&
|
||||
isFileNameQualifiedForAutoUpload(file.getName())) {
|
||||
result.add(file.path)
|
||||
}
|
||||
} else if (file.isDirectory) {
|
||||
val allFiles = getAllFiles(file.path)
|
||||
result.addAll(allFiles)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result.toSet()
|
||||
}
|
||||
|
||||
@Suppress("LongMethod") // legacy code
|
||||
private fun uploadFilesFromFolder(
|
||||
context: Context,
|
||||
|
@ -232,22 +258,21 @@ class FilesSyncWork(
|
|||
val needsWifi: Boolean
|
||||
var file: File
|
||||
val accountName = syncedFolder.account
|
||||
|
||||
val optionalUser = userAccountManager.getUser(accountName)
|
||||
if (!optionalUser.isPresent) {
|
||||
return
|
||||
}
|
||||
|
||||
val user = optionalUser.get()
|
||||
val arbitraryDataProvider: ArbitraryDataProvider? = if (lightVersion) {
|
||||
ArbitraryDataProviderImpl(context)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
val paths = filesystemDataProvider.getFilesForUpload(
|
||||
syncedFolder.localPath,
|
||||
syncedFolder.id.toString()
|
||||
)
|
||||
|
||||
if (paths.size == 0) {
|
||||
val paths = getAllFiles(syncedFolder.localPath)
|
||||
if (paths.isEmpty()) {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -260,6 +285,7 @@ class FilesSyncWork(
|
|||
MimeTypeUtil.getBestMimeTypeByFilename(localPath)
|
||||
)
|
||||
}
|
||||
|
||||
val localPaths = pathsAndMimes.map { it.first }.toTypedArray()
|
||||
val remotePaths = pathsAndMimes.map { it.second }.toTypedArray()
|
||||
|
||||
|
@ -276,6 +302,7 @@ class FilesSyncWork(
|
|||
needsWifi = syncedFolder.isWifiOnly
|
||||
uploadAction = syncedFolder.uploadAction
|
||||
}
|
||||
|
||||
FileUploadHelper.instance().uploadNewFiles(
|
||||
user,
|
||||
localPaths,
|
||||
|
|
|
@ -14,16 +14,11 @@ import android.net.Uri;
|
|||
|
||||
import com.owncloud.android.db.ProviderMeta;
|
||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||
import com.owncloud.android.utils.SyncedFolderUtils;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.zip.CRC32;
|
||||
|
||||
/**
|
||||
|
@ -63,49 +58,6 @@ public class FilesystemDataProvider {
|
|||
);
|
||||
}
|
||||
|
||||
public Set<String> getFilesForUpload(String localPath, String syncedFolderId) {
|
||||
Set<String> localPathsToUpload = new HashSet<>();
|
||||
|
||||
String likeParam = localPath + "%";
|
||||
|
||||
Cursor cursor = contentResolver.query(
|
||||
ProviderMeta.ProviderTableMeta.CONTENT_URI_FILESYSTEM,
|
||||
null,
|
||||
ProviderMeta.ProviderTableMeta.FILESYSTEM_FILE_LOCAL_PATH + " LIKE ? and " +
|
||||
ProviderMeta.ProviderTableMeta.FILESYSTEM_SYNCED_FOLDER_ID + " = ? and " +
|
||||
ProviderMeta.ProviderTableMeta.FILESYSTEM_FILE_SENT_FOR_UPLOAD + " = ? and " +
|
||||
ProviderMeta.ProviderTableMeta.FILESYSTEM_FILE_IS_FOLDER + " = ?",
|
||||
new String[]{likeParam, syncedFolderId, "0", "0"},
|
||||
null);
|
||||
|
||||
if (cursor != null) {
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
String value = cursor.getString(cursor.getColumnIndexOrThrow(
|
||||
ProviderMeta.ProviderTableMeta.FILESYSTEM_FILE_LOCAL_PATH));
|
||||
if (value == null) {
|
||||
Log_OC.e(TAG, "Cannot get local path");
|
||||
} else {
|
||||
File file = new File(value);
|
||||
if (!file.exists()) {
|
||||
Log_OC.d(TAG, "Ignoring file for upload (doesn't exist): " + value);
|
||||
} else if (!SyncedFolderUtils.isQualifiedFolder(file.getParent())) {
|
||||
Log_OC.d(TAG, "Ignoring file for upload (unqualified folder): " + value);
|
||||
} else if (!SyncedFolderUtils.isFileNameQualifiedForAutoUpload(file.getName())) {
|
||||
Log_OC.d(TAG, "Ignoring file for upload (unqualified file): " + value);
|
||||
} else {
|
||||
localPathsToUpload.add(value);
|
||||
}
|
||||
}
|
||||
} while (cursor.moveToNext());
|
||||
}
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
return localPathsToUpload;
|
||||
}
|
||||
|
||||
public void storeOrUpdateFileValue(String localPath, long modifiedAt, boolean isFolder, SyncedFolder syncedFolder) {
|
||||
|
||||
// takes multiple milliseconds to query data from database (around 75% of execution time) (6ms)
|
||||
|
|
Loading…
Reference in a new issue