Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordesperateCoder <echotodevnull@gmail.com>2019-12-27 15:18:14 +0300
committerdesperateCoder <echotodevnull@gmail.com>2019-12-27 15:18:14 +0300
commitb47340db452a510b78520578369135ee4c1fa90d (patch)
tree71beea4c39d201d2e9f54840e9c708fa5636b69a
parent2956f0f909573f13de126a3ee8609ae28c34442f (diff)
#230 implemented SyncManager.syncEverything()
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/api/ApiProvider.java41
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java57
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java12
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDao.java13
5 files changed, 87 insertions, 46 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/ApiProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/ApiProvider.java
index 9d2b19ea4..fcac68710 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/api/ApiProvider.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/ApiProvider.java
@@ -2,10 +2,10 @@ package it.niedermann.nextcloud.deck.api;
import android.content.Context;
+import com.nextcloud.android.sso.AccountImporter;
import com.nextcloud.android.sso.api.NextcloudAPI;
import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException;
-import com.nextcloud.android.sso.exceptions.SSOException;
import com.nextcloud.android.sso.helper.SingleAccountHelper;
import com.nextcloud.android.sso.model.SingleSignOnAccount;
@@ -25,27 +25,36 @@ public class ApiProvider {
private NextcloudServerAPI nextcloudAPI;
private Context context;
private SingleSignOnAccount ssoAccount;
+ private String ssoAccountName;
public ApiProvider(Context context) {
+ this(context, null);
+ }
+
+ public ApiProvider(Context context, String ssoAccountName) {
this.context = context;
+ this.ssoAccountName = ssoAccountName;
+ setAccount();
}
public void initSsoApi(final NextcloudAPI.ApiConnectedListener callback) {
+ NextcloudAPI nextcloudAPI = new NextcloudAPI(context, ssoAccount, GsonConfig.getGson(), callback);
+ deckAPI = new NextcloudRetrofitApiBuilder(nextcloudAPI, DECK_API_ENDPOINT).create(DeckAPI.class);
+ this.nextcloudAPI = new NextcloudRetrofitApiBuilder(nextcloudAPI, NC_API_ENDPOINT).create(NextcloudServerAPI.class);
+ }
+
+ private void setAccount() {
try {
- setAccount();
- NextcloudAPI nextcloudAPI = new NextcloudAPI(context, ssoAccount, GsonConfig.getGson(), callback);
- deckAPI = new NextcloudRetrofitApiBuilder(nextcloudAPI, DECK_API_ENDPOINT).create(DeckAPI.class);
- this.nextcloudAPI = new NextcloudRetrofitApiBuilder(nextcloudAPI, NC_API_ENDPOINT).create(NextcloudServerAPI.class);
- } catch (SSOException e) {
+ if (ssoAccountName == null) {
+ this.ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(context);
+ } else {
+ this.ssoAccount = AccountImporter.getSingleSignOnAccount(context, ssoAccountName);
+ }
+ } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) {
DeckLog.logError(e);
- callback.onError(e);
}
}
- private void setAccount() throws NextcloudFilesAppAccountNotFoundException, NoCurrentAccountSelectedException {
- ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(context);
- }
-
public DeckAPI getDeckAPI() {
return deckAPI;
}
@@ -54,18 +63,18 @@ public class ApiProvider {
return nextcloudAPI;
}
- public String getServerUrl() throws NextcloudFilesAppAccountNotFoundException, NoCurrentAccountSelectedException {
- if (ssoAccount==null){
+ public String getServerUrl(){
+ if (ssoAccount == null) {
setAccount();
}
return ssoAccount.url;
}
- public String getApiPath(){
+ public String getApiPath() {
return DECK_API_ENDPOINT;
}
- public String getApiUrl() throws NextcloudFilesAppAccountNotFoundException, NoCurrentAccountSelectedException {
- return getServerUrl()+getApiPath();
+ public String getApiUrl() {
+ return getServerUrl() + getApiPath();
}
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
index 13f16a951..50510aaf8 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
@@ -16,6 +16,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
+import java.util.concurrent.CountDownLatch;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.api.IResponseCallback;
@@ -52,37 +53,60 @@ import it.niedermann.nextcloud.deck.util.DateUtil;
public class SyncManager {
-
private DataBaseAdapter dataBaseAdapter;
private ServerAdapter serverAdapter;
+ public SyncManager(Activity sourceActivity) {
+ this(sourceActivity, sourceActivity);
+ }
+
public SyncManager(Context context, @Nullable Activity sourceActivity) {
+ this(context, sourceActivity, null);
+ }
+ public SyncManager(Context context, @Nullable Activity sourceActivity, String ssoAccountName) {
if (context == null) {
throw new IllegalArgumentException("Provide a valid context.");
}
Context applicationContext = context.getApplicationContext();
LastSyncUtil.init(applicationContext);
dataBaseAdapter = new DataBaseAdapter(applicationContext);
- this.serverAdapter = new ServerAdapter(applicationContext, sourceActivity);
- }
-
- public SyncManager(Activity sourceActivity) {
- this(sourceActivity, sourceActivity);
+ this.serverAdapter = new ServerAdapter(applicationContext, sourceActivity, ssoAccountName);
}
private void doAsync(Runnable r) {
new Thread(r).start();
}
- boolean synchronizeEverything() {
- // TODO do some magic here
- try {
- Thread.sleep(2000);
- return true;
- } catch (InterruptedException e) {
- e.printStackTrace();
+ public boolean synchronizeEverything() {
+ List<Account> accounts = dataBaseAdapter.getAllAccountsDirectly();
+ if (accounts.size() > 0){
+ final BooleanResultHolder success = new BooleanResultHolder();
+ CountDownLatch latch = new CountDownLatch(accounts.size());
+ try {
+ for (Account account : accounts) {
+ new SyncManager(dataBaseAdapter.getContext(), null, account.getName()).synchronize(new IResponseCallback<Boolean>(account) {
+ @Override
+ public void onResponse(Boolean response) {
+ success.result = success.result && response.booleanValue() ;
+ latch.countDown();
+ }
+
+ @Override
+ public void onError(Throwable throwable) {
+ success.result = false;
+ super.onError(throwable);
+ latch.countDown();
+ }
+ });
+ }
+ latch.await();
+ return success.result;
+ } catch (InterruptedException e) {
+ DeckLog.logError(e);
+ return false;
+ }
}
- return false;
+ return true;
}
public void synchronize(IResponseCallback<Boolean> responseCallback) {
@@ -949,4 +973,9 @@ public class SyncManager {
});
return liveData;
}
+
+
+ private class BooleanResultHolder {
+ public boolean result = true;
+ }
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java
index b59cbcc63..772afd701 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java
@@ -12,9 +12,6 @@ import android.preference.PreferenceManager;
import androidx.annotation.Nullable;
-import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
-import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException;
-
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -64,15 +61,18 @@ public class ServerAdapter {
private SharedPreferences lastSyncPref;
public ServerAdapter(Context applicationContext, @Nullable Activity sourceActivity) {
+ this(applicationContext, sourceActivity, null);
+ }
+ public ServerAdapter(Context applicationContext, @Nullable Activity sourceActivity, String ssoAccountName) {
this.applicationContext = applicationContext;
this.sourceActivity = sourceActivity;
prefKeyWifiOnly = applicationContext.getResources().getString(R.string.pref_key_wifi_only);
- provider = new ApiProvider(applicationContext);
+ provider = new ApiProvider(applicationContext, ssoAccountName);
lastSyncPref = applicationContext.getSharedPreferences(
applicationContext.getString(R.string.shared_preference_last_sync), Context.MODE_PRIVATE);
}
- public String getServerUrl() throws NextcloudFilesAppAccountNotFoundException, NoCurrentAccountSelectedException {
+ public String getServerUrl() {
return provider.getServerUrl();
}
@@ -80,7 +80,7 @@ public class ServerAdapter {
return provider.getApiPath();
}
- public String getApiUrl() throws NextcloudFilesAppAccountNotFoundException, NoCurrentAccountSelectedException {
+ public String getApiUrl() {
return provider.getApiUrl();
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
index 684096318..60e05708c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
@@ -290,11 +290,11 @@ public class DataBaseAdapter {
}
public LiveData<Account> readAccount(long id) {
- return LiveDataHelper.onlyIfChanged(db.getAccountDao().selectById(id));
+ return LiveDataHelper.onlyIfChanged(db.getAccountDao().getAccountById(id));
}
public LiveData<Account> readAccount(String name) {
- return LiveDataHelper.onlyIfChanged(db.getAccountDao().selectById(name));
+ return LiveDataHelper.onlyIfChanged(db.getAccountDao().getAccountByName(name));
}
public Account readAccountDirectly(long id) {
@@ -302,7 +302,7 @@ public class DataBaseAdapter {
}
public LiveData<List<Account>> readAccounts() {
- return LiveDataHelper.onlyIfChanged(db.getAccountDao().selectAll());
+ return LiveDataHelper.onlyIfChanged(db.getAccountDao().getAllAccounts());
}
public LiveData<List<Board>> getBoards(long accountId) {
@@ -520,6 +520,10 @@ public class DataBaseAdapter {
return db.getAccountDao().getAccountByIdDirectly(accountId);
}
+ public List<Account> getAllAccountsDirectly() {
+ return db.getAccountDao().getAllAccountsDirectly();
+ }
+
public User getUserByLocalIdDirectly(long localUserId) {
return db.getUserDao().getUserByLocalIdDirectly(localUserId);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDao.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDao.java
index 56ac92008..0e56c7e0a 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDao.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/AccountDao.java
@@ -10,10 +10,6 @@ import it.niedermann.nextcloud.deck.model.Account;
@Dao
public interface AccountDao extends GenericDao<Account> {
-
- @Query("SELECT * FROM account")
- LiveData<List<Account>> getAccounts();
-
@Query("SELECT count(*) FROM account")
int countAccountsDirectly();
@@ -27,11 +23,14 @@ public interface AccountDao extends GenericDao<Account> {
Account getAccountByIdDirectly(long id);
@Query("SELECT * from account where id = :id")
- LiveData<Account> selectById(long id);
+ LiveData<Account> getAccountById(long id);
@Query("SELECT * from account where name = :name")
- LiveData<Account> selectById(String name);
+ LiveData<Account> getAccountByName(String name);
+
+ @Query("SELECT * from account")
+ LiveData<List<Account>> getAllAccounts();
@Query("SELECT * from account")
- LiveData<List<Account>> selectAll();
+ List<Account> getAllAccountsDirectly();
} \ No newline at end of file