This commit is contained in:
Tobias Kaminsky 2017-08-09 12:15:27 +00:00 committed by GitHub
commit 46e62cfb80

View file

@ -1,4 +1,4 @@
/** /*
* Nextcloud Android client application * Nextcloud Android client application
* *
* @author Mario Danic * @author Mario Danic
@ -24,6 +24,7 @@ package com.owncloud.android.jobs;
import android.accounts.Account; import android.accounts.Account;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.res.Resources;
import android.os.PowerManager; import android.os.PowerManager;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.media.ExifInterface; import android.support.media.ExifInterface;
@ -32,7 +33,9 @@ import android.text.TextUtils;
import com.evernote.android.job.Job; import com.evernote.android.job.Job;
import com.evernote.android.job.util.support.PersistableBundleCompat; import com.evernote.android.job.util.support.PersistableBundleCompat;
import com.owncloud.android.MainApp; import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.datamodel.ArbitraryDataProvider;
import com.owncloud.android.datamodel.FilesystemDataProvider; import com.owncloud.android.datamodel.FilesystemDataProvider;
import com.owncloud.android.datamodel.MediaFolderType; import com.owncloud.android.datamodel.MediaFolderType;
import com.owncloud.android.datamodel.SyncedFolder; import com.owncloud.android.datamodel.SyncedFolder;
@ -40,6 +43,7 @@ import com.owncloud.android.datamodel.SyncedFolderProvider;
import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.operations.UploadFileOperation; import com.owncloud.android.operations.UploadFileOperation;
import com.owncloud.android.ui.activity.Preferences;
import com.owncloud.android.utils.FileStorageUtils; import com.owncloud.android.utils.FileStorageUtils;
import com.owncloud.android.utils.FilesSyncHelper; import com.owncloud.android.utils.FilesSyncHelper;
import com.owncloud.android.utils.MimeTypeUtil; import com.owncloud.android.utils.MimeTypeUtil;
@ -78,6 +82,9 @@ public class FilesSyncJob extends Job {
PersistableBundleCompat bundle = params.getExtras(); PersistableBundleCompat bundle = params.getExtras();
final boolean skipCustom = bundle.getBoolean(SKIP_CUSTOM, false); final boolean skipCustom = bundle.getBoolean(SKIP_CUSTOM, false);
Resources resources = MainApp.getAppContext().getResources();
boolean lightVersion = resources.getBoolean(R.bool.syncedFolder_light);
FilesSyncHelper.restartJobsIfNeeded(); FilesSyncHelper.restartJobsIfNeeded();
FilesSyncHelper.insertAllDBEntries(skipCustom); FilesSyncHelper.insertAllDBEntries(skipCustom);
@ -95,9 +102,9 @@ public class FilesSyncJob extends Job {
final Locale currentLocale = context.getResources().getConfiguration().locale; final Locale currentLocale = context.getResources().getConfiguration().locale;
if (MediaFolderType.IMAGE == syncedFolder.getType()) { if (MediaFolderType.IMAGE == syncedFolder.getType()) {
String mimetypeString = FileStorageUtils.getMimeTypeFromName(file.getAbsolutePath()); String mimeTypeString = FileStorageUtils.getMimeTypeFromName(file.getAbsolutePath());
if ("image/jpeg".equalsIgnoreCase(mimetypeString) || "image/tiff". if ("image/jpeg".equalsIgnoreCase(mimeTypeString) || "image/tiff".
equalsIgnoreCase(mimetypeString)) { equalsIgnoreCase(mimeTypeString)) {
try { try {
ExifInterface exifInterface = new ExifInterface(file.getAbsolutePath()); ExifInterface exifInterface = new ExifInterface(file.getAbsolutePath());
String exifDate = exifInterface.getAttribute(ExifInterface.TAG_DATETIME); String exifDate = exifInterface.getAttribute(ExifInterface.TAG_DATETIME);
@ -116,23 +123,46 @@ public class FilesSyncJob extends Job {
} }
} }
boolean needsCharging = syncedFolder.getChargingOnly();
boolean needsWifi = syncedFolder.getWifiOnly();
String mimeType = MimeTypeUtil.getBestMimeTypeByFilename(file.getAbsolutePath()); String mimeType = MimeTypeUtil.getBestMimeTypeByFilename(file.getAbsolutePath());
Account account = AccountUtils.getOwnCloudAccountByName(context, syncedFolder.getAccount()); Account account = AccountUtils.getOwnCloudAccountByName(context, syncedFolder.getAccount());
String remotePath;
boolean subfolderByDate;
Integer uploadAction;
boolean needsCharging;
boolean needsWifi;
if (lightVersion) {
ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(
context.getContentResolver());
needsCharging = resources.getBoolean(R.bool.syncedFolder_light_on_charging);
needsWifi = account == null || arbitraryDataProvider.getBooleanValue(account.name,
Preferences.SYNCED_FOLDER_LIGHT_UPLOAD_ON_WIFI);
String uploadActionString = resources.getString(R.string.syncedFolder_light_upload_behaviour);
uploadAction = getUploadAction(uploadActionString);
subfolderByDate = resources.getBoolean(R.bool.syncedFolder_light_use_subfolders);
remotePath = resources.getString(R.string.syncedFolder_remote_folder);
} else {
needsCharging = syncedFolder.getChargingOnly();
needsWifi = syncedFolder.getWifiOnly();
uploadAction = syncedFolder.getUploadAction();
subfolderByDate = syncedFolder.getSubfolderByDate();
remotePath = syncedFolder.getRemotePath();
}
requester.uploadFileWithOverwrite( requester.uploadFileWithOverwrite(
context, context,
account, account,
file.getAbsolutePath(), file.getAbsolutePath(),
FileStorageUtils.getInstantUploadFilePath( FileStorageUtils.getInstantUploadFilePath(
currentLocale, currentLocale,
syncedFolder.getRemotePath(), file.getName(), remotePath, file.getName(),
lastModificationTime, lastModificationTime, subfolderByDate),
syncedFolder.getSubfolderByDate()), uploadAction,
syncedFolder.getUploadAction(),
mimeType, mimeType,
true, // create parent folder if not existent true, // create parent folder if not existent
UploadFileOperation.CREATED_AS_INSTANT_PICTURE, UploadFileOperation.CREATED_AS_INSTANT_PICTURE,
@ -150,4 +180,17 @@ public class FilesSyncJob extends Job {
wakeLock.release(); wakeLock.release();
return Result.SUCCESS; return Result.SUCCESS;
} }
private Integer getUploadAction(String action) {
switch (action) {
case "LOCAL_BEHAVIOUR_FORGET":
return FileUploader.LOCAL_BEHAVIOUR_FORGET;
case "LOCAL_BEHAVIOUR_MOVE":
return FileUploader.LOCAL_BEHAVIOUR_MOVE;
case "LOCAL_BEHAVIOUR_DELETE":
return FileUploader.LOCAL_BEHAVIOUR_DELETE;
default:
return FileUploader.LOCAL_BEHAVIOUR_FORGET;
}
}
} }