Эх сурвалжийг харах

extract sync into separate method to reduce complexity

AndyScherzinger 6 жил өмнө
parent
commit
ae256ad13a

+ 90 - 80
src/main/java/com/owncloud/android/jobs/FilesSyncJob.java

@@ -90,7 +90,6 @@ public class FilesSyncJob extends Job {
             return Result.SUCCESS;
         }
 
-
         Resources resources = MainApp.getAppContext().getResources();
         boolean lightVersion = resources.getBoolean(R.bool.syncedFolder_light);
 
@@ -106,100 +105,111 @@ public class FilesSyncJob extends Job {
         Locale currentLocale = context.getResources().getConfiguration().locale;
         SimpleDateFormat sFormatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss", currentLocale);
         sFormatter.setTimeZone(TimeZone.getTimeZone(TimeZone.getDefault().getID()));
-
         FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
 
         for (SyncedFolder syncedFolder : syncedFolderProvider.getSyncedFolders()) {
             if ((syncedFolder.isEnabled()) && (!skipCustom || MediaFolderType.CUSTOM != syncedFolder.getType())) {
-                for (String path : filesystemDataProvider.getFilesForUpload(syncedFolder.getLocalPath(),
-                        Long.toString(syncedFolder.getId()))) {
-                    File file = new File(path);
-                    Long lastModificationTime = file.lastModified();
-
-                    if (MediaFolderType.IMAGE == syncedFolder.getType()) {
-                        String mimeTypeString = FileStorageUtils.getMimeTypeFromName(file.getAbsolutePath());
-                        if (MimeType.JPEG.equalsIgnoreCase(mimeTypeString)
-                                || MimeType.TIFF.equalsIgnoreCase(mimeTypeString)) {
-                            try {
-                                ExifInterface exifInterface = new ExifInterface(file.getAbsolutePath());
-                                String exifDate = exifInterface.getAttribute(ExifInterface.TAG_DATETIME);
-                                if (!TextUtils.isEmpty(exifDate)) {
-                                    ParsePosition pos = new ParsePosition(0);
-                                    Date dateTime = sFormatter.parse(exifDate, pos);
-                                    lastModificationTime = dateTime.getTime();
-                                }
-                            } catch (Exception e) {
-                                Log_OC.d(TAG, "Failed to get the proper time " + e.getLocalizedMessage());
-                            }
-                        }
-                    }
-
-                    String mimeType = MimeTypeUtil.getBestMimeTypeByFilename(file.getAbsolutePath());
-
-                    Account account = AccountUtils.getOwnCloudAccountByName(context, syncedFolder.getAccount());
+                syncFolder(context, resources, lightVersion, filesystemDataProvider, currentLocale, sFormatter,
+                        requester, syncedFolder);
+            }
+        }
 
-                    String remotePath;
-                    boolean subfolderByDate;
-                    Integer uploadAction;
-                    boolean needsCharging;
-                    boolean needsWifi;
+        if (wakeLock != null) {
+            wakeLock.release();
+        }
 
-                    if (lightVersion) {
-                        ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(
-                                context.getContentResolver());
+        return Result.SUCCESS;
+    }
 
-                        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);
+    private void syncFolder(Context context, Resources resources, boolean lightVersion,
+                            FilesystemDataProvider filesystemDataProvider, Locale currentLocale,
+                            SimpleDateFormat sFormatter, FileUploader.UploadRequester requester,
+                            SyncedFolder syncedFolder) {
+        String remotePath;
+        boolean subfolderByDate;
+        Integer uploadAction;
+        boolean needsCharging;
+        boolean needsWifi;
+        Account account = AccountUtils.getOwnCloudAccountByName(context, syncedFolder.getAccount());
+
+        for (String path : filesystemDataProvider.getFilesForUpload(syncedFolder.getLocalPath(),
+                Long.toString(syncedFolder.getId()))) {
+            File file = new File(path);
+            Long lastModificationTime = calculateLastModificationTime(file, syncedFolder, sFormatter);
+            String mimeType = MimeTypeUtil.getBestMimeTypeByFilename(file.getAbsolutePath());
+
+            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();
+            }
 
-                        subfolderByDate = resources.getBoolean(R.bool.syncedFolder_light_use_subfolders);
+            if (!subfolderByDate) {
+                String adaptedPath = file.getAbsolutePath()
+                        .replace(syncedFolder.getLocalPath(), "")
+                        .replace("/" + file.getName(), "");
+                remotePath += adaptedPath;
+            }
 
-                        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(
+                    context,
+                    account,
+                    file.getAbsolutePath(),
+                    FileStorageUtils.getInstantUploadFilePath(
+                            currentLocale,
+                            remotePath, file.getName(),
+                            lastModificationTime, subfolderByDate),
+                    uploadAction,
+                    mimeType,
+                    true,           // create parent folder if not existent
+                    UploadFileOperation.CREATED_AS_INSTANT_PICTURE,
+                    needsWifi,
+                    needsCharging,
+                    true
+            );
+
+            filesystemDataProvider.updateFilesystemFileAsSentForUpload(path,
+                    Long.toString(syncedFolder.getId()));
+        }
+    }
 
-                    if (!subfolderByDate) {
-                        String adaptedPath = file.getAbsolutePath()
-                                .replace(syncedFolder.getLocalPath(), "")
-                                .replace("/" + file.getName(), "");
-                        remotePath += adaptedPath;
+    private Long calculateLastModificationTime(File file, SyncedFolder syncedFolder, SimpleDateFormat formatter) {
+        Long lastModificationTime = file.lastModified();
+
+        if (MediaFolderType.IMAGE == syncedFolder.getType()) {
+            String mimeTypeString = FileStorageUtils.getMimeTypeFromName(file.getAbsolutePath());
+            if (MimeType.JPEG.equalsIgnoreCase(mimeTypeString)
+                    || MimeType.TIFF.equalsIgnoreCase(mimeTypeString)) {
+                try {
+                    ExifInterface exifInterface = new ExifInterface(file.getAbsolutePath());
+                    String exifDate = exifInterface.getAttribute(ExifInterface.TAG_DATETIME);
+                    if (!TextUtils.isEmpty(exifDate)) {
+                        ParsePosition pos = new ParsePosition(0);
+                        Date dateTime = formatter.parse(exifDate, pos);
+                        lastModificationTime = dateTime.getTime();
                     }
-
-                    requester.uploadFileWithOverwrite(
-                            context,
-                            account,
-                            file.getAbsolutePath(),
-                            FileStorageUtils.getInstantUploadFilePath(
-                                    currentLocale,
-                                    remotePath, file.getName(),
-                                    lastModificationTime, subfolderByDate),
-                            uploadAction,
-                            mimeType,
-                            true,           // create parent folder if not existent
-                            UploadFileOperation.CREATED_AS_INSTANT_PICTURE,
-                            needsWifi,
-                            needsCharging,
-                            true
-                    );
-
-                    filesystemDataProvider.updateFilesystemFileAsSentForUpload(path,
-                            Long.toString(syncedFolder.getId()));
+                } catch (IOException e) {
+                    Log_OC.d(TAG, "Failed to get the proper time " + e.getLocalizedMessage());
                 }
             }
         }
 
-        if (wakeLock != null) {
-            wakeLock.release();
-        }
-
-        return Result.SUCCESS;
+        return lastModificationTime;
     }
 
     private Integer getUploadAction(String action) {