X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/a9bfb401d529649aa07170f7f22975d2cbd363a3..8b3c9f14dc08d799996da01f18ca369643a3c61d:/src/com/owncloud/android/services/OperationsService.java diff --git a/src/com/owncloud/android/services/OperationsService.java b/src/com/owncloud/android/services/OperationsService.java index 0f836524..3c56dea3 100644 --- a/src/com/owncloud/android/services/OperationsService.java +++ b/src/com/owncloud/android/services/OperationsService.java @@ -23,10 +23,15 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentMap; +import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.datamodel.FileDataStorageManager; -import com.owncloud.android.lib.common.OwnCloudClientFactory; +import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; +import com.owncloud.android.lib.common.OwnCloudCredentials; +import com.owncloud.android.lib.common.OwnCloudCredentialsFactory; +import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException; import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -46,6 +51,8 @@ import com.owncloud.android.utils.Log_OC; import android.accounts.Account; import android.accounts.AccountsException; +import android.accounts.AuthenticatorException; +import android.accounts.OperationCanceledException; import android.app.Service; import android.content.Intent; import android.net.Uri; @@ -75,7 +82,6 @@ public class OperationsService extends Service { public static final String EXTRA_RESULT = "RESULT"; // TODO review if ALL OF THEM are necessary - public static final String EXTRA_WEBDAV_PATH = "WEBDAV_PATH"; public static final String EXTRA_SUCCESS_IF_ABSENT = "SUCCESS_IF_ABSENT"; public static final String EXTRA_USERNAME = "USERNAME"; public static final String EXTRA_PASSWORD = "PASSWORD"; @@ -107,18 +113,16 @@ public class OperationsService extends Service { private static class Target { public Uri mServerUrl = null; public Account mAccount = null; - public String mWebDavUrl = null; public String mUsername = null; public String mPassword = null; public String mAuthToken = null; public boolean mFollowRedirects = true; public String mCookie = null; - public Target(Account account, Uri serverUrl, String webdavUrl, String username, String password, String authToken, + public Target(Account account, Uri serverUrl, String username, String password, String authToken, boolean followRedirects, String cookie) { mAccount = account; mServerUrl = serverUrl; - mWebDavUrl = webdavUrl; mUsername = username; mPassword = password; mAuthToken = authToken; @@ -172,8 +176,25 @@ public class OperationsService extends Service { @Override public void onDestroy() { //Log_OC.wtf(TAG, "onDestroy init" ); + // Saving cookies + try { + OwnCloudClientManagerFactory.getDefaultSingleton(). + saveAllClients(this, MainApp.getAccountType()); + + // TODO - get rid of these exceptions + } catch (AccountNotFoundException e) { + e.printStackTrace(); + } catch (AuthenticatorException e) { + e.printStackTrace(); + } catch (OperationCanceledException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + //Log_OC.wtf(TAG, "Clear mUndispatchedFinisiedOperations" ); mUndispatchedFinishedOperations.clear(); + //Log_OC.wtf(TAG, "onDestroy end" ); super.onDestroy(); } @@ -281,8 +302,6 @@ public class OperationsService extends Service { } else { Account account = operationIntent.getParcelableExtra(EXTRA_ACCOUNT); String serverUrl = operationIntent.getStringExtra(EXTRA_SERVER_URL); - String webDavPath = operationIntent.getStringExtra(EXTRA_WEBDAV_PATH); - String webDavUrl = serverUrl + webDavPath; String username = operationIntent.getStringExtra(EXTRA_USERNAME); String password = operationIntent.getStringExtra(EXTRA_PASSWORD); String authToken = operationIntent.getStringExtra(EXTRA_AUTH_TOKEN); @@ -291,7 +310,6 @@ public class OperationsService extends Service { target = new Target( account, (serverUrl == null) ? null : Uri.parse(serverUrl), - ((webDavPath == null) || (serverUrl == null)) ? null : webDavUrl, username, password, authToken, @@ -397,7 +415,6 @@ public class OperationsService extends Service { //Log_OC.wtf(TAG, "Sending callback later"); } else { if (!mPendingOperations.isEmpty()) { - nextOperation(); return true; } else { return false; @@ -454,21 +471,33 @@ public class OperationsService extends Service { if (mLastTarget == null || !mLastTarget.equals(next.first)) { mLastTarget = next.first; if (mLastTarget.mAccount != null) { - mOwnCloudClient = OwnCloudClientFactory.createOwnCloudClient(mLastTarget.mAccount, getApplicationContext()); - mStorageManager = new FileDataStorageManager(mLastTarget.mAccount, getContentResolver()); + OwnCloudAccount ocAccount = new OwnCloudAccount(mLastTarget.mAccount, this); + mOwnCloudClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, this); + mStorageManager = + new FileDataStorageManager( + mLastTarget.mAccount, + getContentResolver()); } else { - mOwnCloudClient = OwnCloudClientFactory.createOwnCloudClient(mLastTarget.mServerUrl, getApplicationContext(), - mLastTarget.mFollowRedirects); // this is not good enough - if (mLastTarget.mWebDavUrl != null) { - mOwnCloudClient.setWebdavUri(Uri.parse(mLastTarget.mWebDavUrl)); - } - if (mLastTarget.mUsername != null && mLastTarget.mPassword != null) { - mOwnCloudClient.setBasicCredentials(mLastTarget.mUsername, mLastTarget.mPassword); + OwnCloudCredentials credentials = null; + if (mLastTarget.mUsername != null) { + credentials = OwnCloudCredentialsFactory.newBasicCredentials( + mLastTarget.mUsername, + mLastTarget.mPassword); // basic + } else if (mLastTarget.mAuthToken != null) { - mOwnCloudClient.setBearerCredentials(mLastTarget.mAuthToken); + credentials = OwnCloudCredentialsFactory.newBearerCredentials( + mLastTarget.mAuthToken); // bearer token + } else if (mLastTarget.mCookie != null) { - mOwnCloudClient.setSsoSessionCookie(mLastTarget.mCookie); + credentials = OwnCloudCredentialsFactory.newSamlSsoCredentials( + mLastTarget.mCookie); // SAML SSO } + OwnCloudAccount ocAccount = new OwnCloudAccount( + mLastTarget.mServerUrl, credentials); + mOwnCloudClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, this); + mOwnCloudClient.setFollowRedirects(mLastTarget.mFollowRedirects); mStorageManager = null; } }