Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2579a54e authored by Stefan Niedermann's avatar Stefan Niedermann
Browse files

Use CountdownLatch for SyncWorker

parent 5e3fdb6f
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -210,9 +210,9 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
            }
        });

        mainViewModel.hasMultipleAccountsConfigured().observe(this, (hasMultipleAccountsConfigured) -> canMoveNoteToAnotherAccounts = hasMultipleAccountsConfigured);
        mainViewModel.getSyncStatus().observe(this, (syncStatus) -> swipeRefreshLayout.setRefreshing(syncStatus));
        mainViewModel.getSyncErrors().observe(this, (exceptions) -> BrandedSnackbar.make(coordinatorLayout, R.string.error_synchronization, Snackbar.LENGTH_LONG)
        mainViewModel.hasMultipleAccountsConfigured().observe(this, hasMultipleAccountsConfigured -> canMoveNoteToAnotherAccounts = hasMultipleAccountsConfigured);
        mainViewModel.getSyncStatus().observe(this, syncStatus -> swipeRefreshLayout.setRefreshing(syncStatus));
        mainViewModel.getSyncErrors().observe(this, exceptions -> BrandedSnackbar.make(coordinatorLayout, R.string.error_synchronization, Snackbar.LENGTH_LONG)
                .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(exceptions)
                        .show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()))
                .show());
@@ -666,7 +666,7 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A
                    AccountImporter.onActivityResult(requestCode, resultCode, data, this, (ssoAccount) -> {
                        CapabilitiesWorker.update(this);
                        executor.submit(() -> {
                            final var importSnackbar = BrandedSnackbar.make(binding.drawerLayout, R.string.progress_import_indeterminate, Snackbar.LENGTH_INDEFINITE);
                            final var importSnackbar = BrandedSnackbar.make(coordinatorLayout, R.string.progress_import_indeterminate, Snackbar.LENGTH_INDEFINITE);
                            Log.i(TAG, "Added account: " + "name:" + ssoAccount.name + ", " + ssoAccount.url + ", userId" + ssoAccount.userId);
                            try {
                                Log.i(TAG, "Refreshing capabilities for " + ssoAccount.name);
+18 −7
Original line number Diff line number Diff line
@@ -13,10 +13,9 @@ import androidx.work.Worker;
import androidx.work.WorkerParameters;

import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import it.niedermann.owncloud.notes.persistence.entity.Account;

public class SyncWorker extends Worker {

    private static final String TAG = Objects.requireNonNull(SyncWorker.class.getSimpleName());
@@ -34,18 +33,30 @@ public class SyncWorker extends Worker {
    @Override
    public Result doWork() {
        final var repo = NotesRepository.getInstance(getApplicationContext());
        for (final var account : repo.getAccounts()) {
        final var accounts = repo.getAccounts();
        final var latch = new CountDownLatch(accounts.size());

        for (final var account : accounts) {
            Log.v(TAG, "Starting background synchronization for " + account.getAccountName());
            repo.addCallbackPull(account, () -> Log.v(TAG, "Finished background synchronization for " + account.getAccountName()));
            repo.addCallbackPull(account, () -> {
                Log.v(TAG, "Finished background synchronization for " + account.getAccountName());
                latch.countDown();
            });
            repo.scheduleSync(account, false);
        }
        // TODO return result depending on callbackPull

        try {
            latch.await();
            return Result.success();
        } catch (InterruptedException e) {
            return Result.failure();
        }
    }

    /**
     * Set up sync work to enabled every 15 minutes or just disabled
     * https://github.com/stefan-niedermann/nextcloud-notes/issues/1168
     *
     * @param context        the application
     * @param backgroundSync the toggle result backgroundSync
     */