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

Fix stuff

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic 7 жил өмнө
parent
commit
4c50bb999c

+ 1 - 1
src/main/AndroidManifest.xml

@@ -121,7 +121,7 @@
             android:theme="@style/Theme.ownCloud.Fullscreen" />
 
         <service
-            android:name=".jobs.M1ContentObserverJob"
+            android:name=".jobs.NContentObserverJob"
             android:permission="android.permission.BIND_JOB_SERVICE" >
 
         </service>

+ 64 - 67
src/main/java/com/owncloud/android/jobs/FilesSyncJob.java

@@ -72,77 +72,74 @@ public class FilesSyncJob extends Job {
 
         PersistableBundleCompat bundle = params.getExtras();
         final boolean skipCustom = bundle.getBoolean(SKIP_CUSTOM, false);
-
-        if (JobManager.instance().getAllJobsForTag(FilesSyncJob.TAG).size() == 1) {
-
-            FilesSyncHelper.restartJobsIfNeeded();
-            FilesSyncHelper.insertAllDBEntries(skipCustom);
-
-            // Create all the providers we'll need
-            final FilesystemDataProvider filesystemDataProvider = new FilesystemDataProvider(contentResolver);
-            SyncedFolderProvider syncedFolderProvider = new SyncedFolderProvider(contentResolver);
-
-            for (SyncedFolder syncedFolder : syncedFolderProvider.getSyncedFolders()) {
-                if (syncedFolder.isEnabled()) {
-                    if (!skipCustom || MediaFolder.CUSTOM != syncedFolder.getType()) {
-                        for (String path : filesystemDataProvider.getFilesForUpload(syncedFolder.getLocalPath(),
-                                Long.toString(syncedFolder.getId()))) {
-                            if (JobManager.instance().getAllJobRequests().size() < 80) {
-                                File file = new File(path);
-
-                                Long lastModificationTime = file.lastModified();
-                                final Locale currentLocale = context.getResources().getConfiguration().locale;
-
-                                if (MediaFolder.IMAGE == syncedFolder.getType()) {
-                                    String mimetypeString = FileStorageUtils.getMimeTypeFromName(file.getAbsolutePath());
-                                    if ("image/jpeg".equalsIgnoreCase(mimetypeString) || "image/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);
-                                                SimpleDateFormat sFormatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss",
-                                                        currentLocale);
-                                                sFormatter.setTimeZone(TimeZone.getTimeZone(TimeZone.getDefault().getID()));
-                                                Date dateTime = sFormatter.parse(exifDate, pos);
-                                                lastModificationTime = dateTime.getTime();
-                                            }
-
-                                        } catch (IOException e) {
-                                            Log_OC.d(TAG, "Failed to get the proper time " + e.getLocalizedMessage());
+        
+        FilesSyncHelper.restartJobsIfNeeded();
+        FilesSyncHelper.insertAllDBEntries(skipCustom);
+
+        // Create all the providers we'll need
+        final FilesystemDataProvider filesystemDataProvider = new FilesystemDataProvider(contentResolver);
+        SyncedFolderProvider syncedFolderProvider = new SyncedFolderProvider(contentResolver);
+
+        for (SyncedFolder syncedFolder : syncedFolderProvider.getSyncedFolders()) {
+            if (syncedFolder.isEnabled()) {
+                if (!skipCustom || MediaFolder.CUSTOM != syncedFolder.getType()) {
+                    for (String path : filesystemDataProvider.getFilesForUpload(syncedFolder.getLocalPath(),
+                            Long.toString(syncedFolder.getId()))) {
+                        if (JobManager.instance().getAllJobRequests().size() < 80) {
+                            File file = new File(path);
+
+                            Long lastModificationTime = file.lastModified();
+                            final Locale currentLocale = context.getResources().getConfiguration().locale;
+
+                            if (MediaFolder.IMAGE == syncedFolder.getType()) {
+                                String mimetypeString = FileStorageUtils.getMimeTypeFromName(file.getAbsolutePath());
+                                if ("image/jpeg".equalsIgnoreCase(mimetypeString) || "image/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);
+                                            SimpleDateFormat sFormatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss",
+                                                    currentLocale);
+                                            sFormatter.setTimeZone(TimeZone.getTimeZone(TimeZone.getDefault().getID()));
+                                            Date dateTime = sFormatter.parse(exifDate, pos);
+                                            lastModificationTime = dateTime.getTime();
                                         }
+
+                                    } catch (IOException e) {
+                                        Log_OC.d(TAG, "Failed to get the proper time " + e.getLocalizedMessage());
                                     }
                                 }
-
-                                boolean needsCharging = syncedFolder.getChargingOnly();
-                                boolean needsWifi = syncedFolder.getWifiOnly();
-
-                                String mimeType = MimeTypeUtil.getBestMimeTypeByFilename(file.getAbsolutePath());
-
-                                Account account = AccountUtils.getOwnCloudAccountByName(context, syncedFolder.getAccount());
-
-                                requester.uploadFileWithOverwrite(
-                                        context,
-                                        account,
-                                        file.getAbsolutePath(),
-                                        FileStorageUtils.getInstantUploadFilePath(
-                                                currentLocale,
-                                                syncedFolder.getRemotePath(), file.getName(),
-                                                lastModificationTime,
-                                                syncedFolder.getSubfolderByDate()),
-                                        syncedFolder.getUploadAction(),
-                                        mimeType,
-                                        true,           // create parent folder if not existent
-                                        UploadFileOperation.CREATED_AS_INSTANT_PICTURE,
-                                        needsWifi,
-                                        needsCharging,
-                                        true
-                                );
-
-                                filesystemDataProvider.updateFilesystemFileAsSentForUpload(path,
-                                        Long.toString(syncedFolder.getId()));
                             }
+
+                            boolean needsCharging = syncedFolder.getChargingOnly();
+                            boolean needsWifi = syncedFolder.getWifiOnly();
+
+                            String mimeType = MimeTypeUtil.getBestMimeTypeByFilename(file.getAbsolutePath());
+
+                            Account account = AccountUtils.getOwnCloudAccountByName(context, syncedFolder.getAccount());
+
+                            requester.uploadFileWithOverwrite(
+                                    context,
+                                    account,
+                                    file.getAbsolutePath(),
+                                    FileStorageUtils.getInstantUploadFilePath(
+                                            currentLocale,
+                                            syncedFolder.getRemotePath(), file.getName(),
+                                            lastModificationTime,
+                                            syncedFolder.getSubfolderByDate()),
+                                    syncedFolder.getUploadAction(),
+                                    mimeType,
+                                    true,           // create parent folder if not existent
+                                    UploadFileOperation.CREATED_AS_INSTANT_PICTURE,
+                                    needsWifi,
+                                    needsCharging,
+                                    true
+                            );
+
+                            filesystemDataProvider.updateFilesystemFileAsSentForUpload(path,
+                                    Long.toString(syncedFolder.getId()));
                         }
                     }
                 }

+ 6 - 2
src/main/java/com/owncloud/android/jobs/M1ContentObserverJob.java → src/main/java/com/owncloud/android/jobs/NContentObserverJob.java

@@ -25,6 +25,7 @@ import android.app.job.JobParameters;
 import android.app.job.JobService;
 import android.os.Build;
 import android.support.annotation.RequiresApi;
+import android.util.Log;
 
 import com.evernote.android.job.JobRequest;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
@@ -33,12 +34,13 @@ import com.owncloud.android.utils.FilesSyncHelper;
 import java.util.concurrent.TimeUnit;
 
 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
-public class M1ContentObserverJob extends JobService {
+public class NContentObserverJob extends JobService {
     @Override
     public boolean onStartJob(JobParameters params) {
 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             if (params.getJobId() == FilesSyncHelper.ContentSyncJobId) {
+
                 if (params.getTriggeredContentAuthorities() != null && params.getTriggeredContentUris() != null
                         && params.getTriggeredContentUris().length > 0) {
 
@@ -53,6 +55,8 @@ public class M1ContentObserverJob extends JobService {
                             .schedule();
                 }
             }
+
+            FilesSyncHelper.scheduleNJobs(true);
         }
 
         return true;
@@ -60,6 +64,6 @@ public class M1ContentObserverJob extends JobService {
 
     @Override
     public boolean onStopJob(JobParameters params) {
-        return true;
+        return false;
     }
 }

+ 3 - 3
src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.java

@@ -457,7 +457,7 @@ public class SyncedFoldersActivity extends FileActivity implements SyncedFolderA
         if (syncedFolderDisplayItem.getId() > UNPERSISTED_ID) {
             mSyncedFolderProvider.updateSyncedFolderEnabled(syncedFolderDisplayItem.getId(),
                     syncedFolderDisplayItem.isEnabled());
-            FilesSyncHelper.scheduleNJobs();
+            FilesSyncHelper.scheduleNJobs(false);
         } else {
             long storedId = mSyncedFolderProvider.storeSyncedFolder(syncedFolderDisplayItem);
             if (storedId != -1) {
@@ -534,7 +534,7 @@ public class SyncedFoldersActivity extends FileActivity implements SyncedFolderA
             } else {
                 // existing synced folder setup to be updated
                 mSyncedFolderProvider.updateSyncFolder(item);
-                FilesSyncHelper.scheduleNJobs();
+                FilesSyncHelper.scheduleNJobs(false);
             }
 
             mAdapter.setSyncFolderItem(syncedFolder.getSection(), item);
@@ -609,7 +609,7 @@ public class SyncedFoldersActivity extends FileActivity implements SyncedFolderA
     @Subscribe(threadMode = ThreadMode.BACKGROUND)
     public void onMessageEvent(InitiateSyncedFolder event) {
         FilesSyncHelper.insertAllDBEntriesForSyncedFolder(event.getSyncedFolder());
-        FilesSyncHelper.scheduleNJobs();
+        FilesSyncHelper.scheduleNJobs(false);
     }
 
     public void onAddCustomFolderClick(View view) {

+ 8 - 7
src/main/java/com/owncloud/android/utils/FilesSyncHelper.java

@@ -46,7 +46,7 @@ import com.owncloud.android.datamodel.UploadsStorageManager;
 import com.owncloud.android.db.OCUpload;
 import com.owncloud.android.files.services.FileUploader;
 import com.owncloud.android.jobs.FilesSyncJob;
-import com.owncloud.android.jobs.M1ContentObserverJob;
+import com.owncloud.android.jobs.NContentObserverJob;
 
 import org.lukhnos.nnio.file.FileVisitResult;
 import org.lukhnos.nnio.file.Files;
@@ -231,7 +231,7 @@ public class FilesSyncHelper {
         return false;
     }
 
-    public static void scheduleNJobs() {
+    public static void scheduleNJobs(boolean force) {
         SyncedFolderProvider syncedFolderProvider = new SyncedFolderProvider(MainApp.getAppContext().
                 getContentResolver());
 
@@ -255,7 +255,7 @@ public class FilesSyncHelper {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             if (hasImageFolders || hasVideoFolders) {
                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
-                    scheduleJobOnN(hasImageFolders, hasVideoFolders);
+                    scheduleJobOnN(hasImageFolders, hasVideoFolders, force);
                 }
             } else {
                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
@@ -273,7 +273,7 @@ public class FilesSyncHelper {
                 .build()
                 .schedule();
 
-        scheduleNJobs();
+        scheduleNJobs(false);
     }
 
     @RequiresApi(api = Build.VERSION_CODES.N)
@@ -285,13 +285,14 @@ public class FilesSyncHelper {
     }
 
     @RequiresApi(api = Build.VERSION_CODES.N)
-    private static void scheduleJobOnN(boolean hasImageFolders, boolean hasVideoFolders) {
+    private static void scheduleJobOnN(boolean hasImageFolders, boolean hasVideoFolders,
+                                       boolean force) {
         JobScheduler jobScheduler = MainApp.getAppContext().getSystemService(JobScheduler.class);
 
         if ((android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) && (hasImageFolders || hasVideoFolders)) {
-            if (!isContentObserverJobScheduled()) {
+            if (!isContentObserverJobScheduled() || force) {
                 JobInfo.Builder builder = new JobInfo.Builder(ContentSyncJobId, new ComponentName(MainApp.getAppContext(),
-                        M1ContentObserverJob.class.getName()));
+                        NContentObserverJob.class.getName()));
                 builder.addTriggerContentUri(new JobInfo.TriggerContentUri(android.provider.MediaStore.
                         Images.Media.INTERNAL_CONTENT_URI,
                         JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));