58 lines
2.5 KiB
Kotlin
58 lines
2.5 KiB
Kotlin
package org.mariotaku.twidere.util.sync.google
|
|
|
|
import android.content.Context
|
|
import android.util.Log
|
|
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential
|
|
import com.google.api.client.http.javanet.NetHttpTransport
|
|
import com.google.api.client.json.jackson2.JacksonFactory
|
|
import com.google.api.services.drive.Drive
|
|
import nl.komponents.kovenant.task
|
|
import nl.komponents.kovenant.ui.failUi
|
|
import nl.komponents.kovenant.ui.successUi
|
|
import org.mariotaku.twidere.BuildConfig
|
|
import org.mariotaku.twidere.model.sync.GoogleDriveSyncProviderInfo
|
|
import org.mariotaku.twidere.util.DebugLog
|
|
import org.mariotaku.twidere.util.TaskServiceRunner
|
|
import org.mariotaku.twidere.util.sync.*
|
|
import java.io.IOException
|
|
|
|
|
|
/**
|
|
* Created by mariotaku on 2017/1/6.
|
|
*/
|
|
|
|
class GoogleDriveSyncTaskRunner(context: Context, val refreshToken: String) : SyncTaskRunner(context) {
|
|
override fun onRunningTask(action: String, callback: (Boolean) -> Unit): Boolean {
|
|
val httpTransport = NetHttpTransport.Builder().build()
|
|
val jsonFactory = JacksonFactory.getDefaultInstance()
|
|
val credential = GoogleCredential.Builder()
|
|
.setTransport(httpTransport)
|
|
.setJsonFactory(jsonFactory)
|
|
.setClientSecrets(GoogleDriveSyncProviderInfo.WEB_CLIENT_ID, GoogleDriveSyncProviderInfo.WEB_CLIENT_SECRET)
|
|
.build()
|
|
credential.refreshToken = refreshToken
|
|
val drive = Drive.Builder(httpTransport, JacksonFactory.getDefaultInstance(), credential).build()
|
|
val syncAction: ISyncAction = when (action) {
|
|
TaskServiceRunner.ACTION_SYNC_DRAFTS -> GoogleDriveDraftsSyncAction(context, drive)
|
|
TaskServiceRunner.ACTION_SYNC_FILTERS -> GoogleDriveFiltersDataSyncAction(context, drive)
|
|
TaskServiceRunner.ACTION_SYNC_USER_COLORS -> GoogleDrivePreferencesValuesSyncAction(context,
|
|
drive, userColorNameManager.colorPreferences, UserColorsSyncProcessor,
|
|
"user_colors.xml")
|
|
TaskServiceRunner.ACTION_SYNC_USER_NICKNAMES -> GoogleDrivePreferencesValuesSyncAction(context,
|
|
drive, userColorNameManager.nicknamePreferences, UserNicknamesSyncProcessor,
|
|
"user_nicknames.xml")
|
|
else -> null
|
|
} ?: return false
|
|
task {
|
|
syncAction.execute()
|
|
}.successUi {
|
|
callback(true)
|
|
}.failUi {
|
|
DebugLog.w(LOGTAG_SYNC, "Sync $action failed", it)
|
|
callback(false)
|
|
}
|
|
return true
|
|
}
|
|
|
|
}
|