You might see that the Dropbox Community team have been busy working on some major updates to the Community itself! So, here is some info on what’s changed, what’s staying the same and what you can expect from the Dropbox Community overall.
I'm looking for a full example of batch upload (using simple uploads, not chunked) using Android. I have found bits and pieces of info scattered around: SDK docs for uploadSeesionStartBatch, but...
jimbobbles Here's the current link to the example of using upload sessions in the Java SDK, to replace the broken link you found: https://github.com/dropbox/dropbox-sdk-java/blob/main/examples/examples/src/main/java/com/dropbox/core/examples/upload_file/UploadFileExample.java#L57 This example shows how to use an upload session to upload one large file (and it also earlier in the code shows how to use non-upload session functionality to upload one small file). It doesn't show any of the batch functionality, but it can be useful as an introduction to the concepts of upload sessions, cursors, etc. If you want to add the batch functionality, you could use that as a starting point. Note though that there is no "uploadBatch" method; the batch functionality only exists for upload sessions. You can use upload sessions to upload small files too though; that will still require multiple calls (to start, append, and finish). It's not possible to upload multiple different files in just one call though.
I'm not sure what Im supposed to do with this. Do I somehow need to use this result in combination with uploadSessionFinishBatchCheck to check whether the result is complete, or do I need to keep polling the result entries until they complete, or do I just check the result entries immediately (i.e. is uploadSessionFinishBatchV2 a sync method which only returns once the batch finishing is complete ?) It's a little unclear.
Once I get this working I will post my code for others to use as an example for android.
jimbobbles wrote: ... (i.e. is uploadSessionFinishBatchV2 a sync method which only returns once the batch finishing is complete ?) ...
jimbobbles, You're correct - version 2 of that method (and API call accordingly) is sync method. The deprecated version 1 can be sync or async - somethin that need to be checked and traced using the check accordingly (something you don't need to consider).
You need to check the success of all returned entries though. You can take a look here or here.
Thank youЗдравко and Greg-DB I think I have this working now, thanks for the pointers. Here's my code, in case this is useful for anyone else attempting to do this. I'm using Flutter so the code is littered with my own error handling classes which I can serialize and pass back to dart, but it should be a decent starting template for others. It's not fully tested, and also I'm new to Kotlin coroutines so I'm not sure I'm using coroutines / async etc. correctly!
import com.dropbox.core.InvalidAccessTokenException
import com.dropbox.core.NetworkIOException
import com.dropbox.core.RetryException
import com.dropbox.core.v2.DbxClientV2
import com.dropbox.core.v2.files.CommitInfo
import com.dropbox.core.v2.files.UploadSessionCursor
import com.dropbox.core.v2.files.UploadSessionFinishArg
import com.dropbox.core.v2.files.UploadSessionFinishErrorException
import com.dropbox.core.v2.files.UploadSessionType
import com.dropbox.core.v2.files.WriteError
import com.dropbox.core.v2.files.WriteMode
import kotlinx.coroutines.Deferred
import timber.log.Timber
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext
import java.io.File
import java.io.InputStream
class DropboxWriter {
companion object {
private const val BYTES_IN_MEGABYTE = 1048576
// Must be multiple of 4MB
// Larger chunk sizes will upload large files faster and usually with fewer network requests
// but if a chunk upload fails the whole chunk must be re-uploaded
private const val CHUNKED_UPLOAD_CHUNK_SIZE: Long = 4L * BYTES_IN_MEGABYTE
// How many times to retry upload (with exponential time backoff) before returning with failure
private const val MAX_RETRY_ATTEMPTS: Int = 5
}
suspend fun writeFilesToDropbox(
credentialJsonString: String,
filePaths: List<String>,
remoteFolderPath: String
MethodChannelResult<Unit?> = withContext(Dispatchers.IO) {
assert(filePaths.size <= 1000) { "Max batch size is 1000" }
Timber.i("Starting batch of ${filePaths.size} upload sessions")
try {
val client = DropboxClientFactory.getAuthenticatedClient(credentialJsonString)
// Tell Dropbox a batch will be uploaded with the given number of files
val uploadSessionStartBatchResult = client.files().uploadSessionStartBatch(
filePaths.size.toLong(), UploadSessionType.CONCURRENT)
// Upload each file in the batch
val uploadResults: List<MethodChannelResult<UploadSessionFinishArg>> = filePaths.mapIndexed { index, filePath ->
async {
uploadSessionAppend(client, uploadSessionStartBatchResult.sessionIds[index], filePath, remoteFolderPath)
}
}.map {it.await()}
// If there were any failures in uploading
val failureOrNull = uploadResults.firstOrNull { result -> result is MethodChannelResult.Failure }
if(failureOrNull != null) {
// Return the first failure
return@withContext MethodChannelResult.Failure<Unit?>((failureOrNull as MethodChannelResult.Failure).error)
}
else {
// Else we can now commit the batch using the UploadSessionFinishArgs
val finishBatchResult = client.files().uploadSessionFinishBatchV2(
uploadResults.map{ result -> (result as MethodChannelResult.Success).value }
)
// If there were any failures in committing the batch
val firstCommitFailureOrNull = finishBatchResult.entries.firstOrNull { entry -> entry.isFailure }
if(firstCommitFailureOrNull != null) {
if(firstCommitFailureOrNull.failureValue.isPath
&& firstCommitFailureOrNull.failureValue.pathValue is WriteError) {
// Catch some common errors and return handled error codes
if((firstCommitFailureOrNull.failureValue.pathValue as WriteError) == WriteError.INSUFFICIENT_SPACE) {
return@withContext MethodChannelResult.Failure(
MethodChannelError(BackupErrorCode.INSUFFICIENT_SPACE,"Insufficient space")
)
}
else if((firstCommitFailureOrNull.failureValue.pathValue as WriteError) == WriteError.NO_WRITE_PERMISSION) {
return@withContext MethodChannelResult.Failure(
MethodChannelError(BackupErrorCode.PERMISSIONS,"No write permission")
)
}
}
// Else return the first failure
return@withContext MethodChannelResult.Failure<Unit?>(
MethodChannelError(
BackupErrorCode.UNKNOWN,
firstCommitFailureOrNull.failureValue.toString())
)
}
else {
// Upload has succeeded
return@withContext MethodChannelResult.Success(null)
}
}
}
catch (e: Throwable) {
return@withContext when (e) {
is NetworkIOException -> {
MethodChannelResult.Failure(
MethodChannelError(BackupErrorCode.OFFLINE,"Can't reach Dropbox")
)
}
is InvalidAccessTokenException -> {
// Gets thrown when the access token you're using to make API calls is invalid.
// A more typical situation is that your access token was valid, but the user has since
// "unlinked" your application via the Dropbox website (http://www.dropbox.com/account#applications ).
// When a user unlinks your application, your access tokens for that user become invalid.
// You can re-run the authorization process to obtain a new access token.
MethodChannelResult.Failure(
MethodChannelError(
BackupErrorCode.AUTHENTICATION_FAILED,
e.message ?: "Access token was invalid",
e.stackTraceToString())
)
}
else -> {
MethodChannelResult.Failure(
MethodChannelError(
BackupErrorCode.UNKNOWN,
e.message ?: "Unknown error writing to dropbox",
e.stackTraceToString())
)
}
}
}
}
private suspend fun uploadSessionAppend(client: DbxClientV2, sessionId: String,
filePath: String, remoteFolderPath: String): MethodChannelResult<UploadSessionFinishArg> = withContext(Dispatchers.IO) {
Timber.i("Using upload session with ID '${sessionId}' for file '${filePath}'")
val file = File(filePath)
if(file.exists()) {
val remotePath = "/$remoteFolderPath/${file.name}"
file.inputStream().buffered().use { bufferedInputStream ->
val appendTasks: ArrayList<Deferred<Unit>> = arrayListOf()
val sizeOfFileInBytes = file.length()
var cursor: UploadSessionCursor? = null
if(sizeOfFileInBytes > 0L) {
var totalNumberOfBytesRead = 0L
while(totalNumberOfBytesRead < sizeOfFileInBytes) {
cursor = UploadSessionCursor(sessionId, totalNumberOfBytesRead)
totalNumberOfBytesRead += CHUNKED_UPLOAD_CHUNK_SIZE
val close = totalNumberOfBytesRead >= sizeOfFileInBytes
appendTasks.add(
async {createAppendChunkTask(
client, bufferedInputStream, cursor!!, CHUNKED_UPLOAD_CHUNK_SIZE, sizeOfFileInBytes, close)
}
)
}
}
else {
// For empty files, just call append once to close the upload session.
cursor = UploadSessionCursor(sessionId, 0L)
appendTasks.add(
async {
createAppendChunkTask(
client,
bufferedInputStream,
cursor,
chunkSize = 0,
sizeOfFileInBytes,
close = true
)
})
}
try {
awaitAll(*appendTasks.toTypedArray())
return@withContext MethodChannelResult.Success(
UploadSessionFinishArg(cursor!!, CommitInfo(
remotePath,
WriteMode.OVERWRITE,
false, // autorename
null, // clientModified date
// Normally, users are made aware of any file modifications in their
// Dropbox account via notifications in the client software. If true,
// this tells the clients that this modification shouldn't result in a user notification.
false, // mute
// List of custom properties to add to file
null, // propertyGroups
// Be more strict about how each WriteMode detects conflict. For example, always return a conflict error when getMode() = WriteMode.getUpdateValue() and the given "rev" doesn't match the existing file's "rev", even if the existing file has been deleted. This also forces a conflict even when the target path refers to a file with identical contents
false // strictConflict
))
)
}
catch (e: FailedAfterMaxRetryAttemptsException) {
return@withContext MethodChannelResult.Failure(
MethodChannelError(
BackupErrorCode.OFFLINE,
e.message!!
)
)
}
catch (e: NetworkIOException) {
return@withContext MethodChannelResult.Failure(
MethodChannelError(BackupErrorCode.OFFLINE,"Can't reach Dropbox")
)
}
catch (e: Exception) {
return@withContext MethodChannelResult.Failure(
MethodChannelError(
BackupErrorCode.UNKNOWN,
e.message ?: "Unknown error writing to dropbox",
e.stackTraceToString())
)
}
}
}
else {
return@withContext MethodChannelResult.Failure(
MethodChannelError(
BackupErrorCode.UNKNOWN,
"Error writing to dropbox: file $filePath does not exist"))
}
}
private suspend fun createAppendChunkTask(
client: DbxClientV2,
inputStream: InputStream,
cursor: UploadSessionCursor,
chunkSize: Long,
sizeOfFileInBytes: Long,
close: Boolean
) {
var mutableCursor = cursor
var mutableClose = close
for(i in 0..MAX_RETRY_ATTEMPTS) {
// Try to upload the chunk
val result = appendChunkTask(client, inputStream, mutableCursor, chunkSize, mutableClose)
when(result.type) {
AppendResult.ResultType.Success -> {
return
}
// If it fails with a result type of Retry, retry after waiting
AppendResult.ResultType.Retry -> {
// Wait for the specified amount of time
delay(result.backoffMillis!!)
// and try again next time around the loop
}
// If it fails with a result type of RetryWithCorrectedOffset
AppendResult.ResultType.RetryWithCorrectedOffset -> {
// Correct the cursor position
mutableCursor = UploadSessionCursor(cursor.sessionId, result.correctedOffset!!)
mutableClose = result.correctedOffset + CHUNKED_UPLOAD_CHUNK_SIZE >= sizeOfFileInBytes
Timber.w("Append failed because the provided offset ${cursor.offset} " +
"should have been ${mutableCursor.offset}, retrying with corrected offset")
// and try again next time around the loop
}
}
}
// If we reach here, uploading the chunk failed after reaching the max
// number of upload attempts
throw FailedAfterMaxRetryAttemptsException()
}
private fun appendChunkTask(
client: DbxClientV2,
inputStream: InputStream,
cursor: UploadSessionCursor,
chunkSize: Long,
close: Boolean
AppendResult {
try {
Timber.d("Appending to upload session with ID '${cursor.sessionId}' " +
"at offset: ${cursor.offset}")
client.files()
.uploadSessionAppendV2Builder(cursor)
.withClose(close)
.uploadAndFinish(inputStream, chunkSize)
return AppendResult(AppendResult.ResultType.Success)
}
catch(e: RetryException) {
return AppendResult(AppendResult.ResultType.Retry, backoffMillis = e.backoffMillis)
}
catch(e: NetworkIOException) {
return AppendResult(AppendResult.ResultType.Retry)
}
catch (e: UploadSessionFinishErrorException) {
if (e.errorValue.isLookupFailed && e.errorValue.lookupFailedValue.isIncorrectOffset) {
// server offset into the stream doesn't match our offset (uploaded). Seek to
// the expected offset according to the server and try again.
return AppendResult(
AppendResult.ResultType.RetryWithCorrectedOffset,
correctedOffset = e.errorValue
.lookupFailedValue
.incorrectOffsetValue
.correctOffset)
} else {
// some other error occurred
throw e
}
}
}
}
class FailedAfterMaxRetryAttemptsException() : Exception("Upload failed after reaching maximum number of retries")
class AppendResult(val type: ResultType, val correctedOffset: Long? = null, val backoffMillis: Long? = null) {
enum class ResultType {
Success,
Retry,
RetryWithCorrectedOffset;
}
}
enum class BackupErrorCode(val code: Int) {
UNKNOWN(0),
OFFLINE(1),
INSUFFICIENT_SPACE(2),
PERMISSIONS(3),
AUTHENTICATION_FAILED(4),
}
sealed class MethodChannelResult<out S> {
data class Success<out S>(val value: S) : MethodChannelResult<S>()
data class Failure<out S>(val error: MethodChannelError) : MethodChannelResult<S>()
}
data class MethodChannelError(val code: BackupErrorCode, val message: String, val stackTraceAsString: String? = null)
About Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.5,924 PostsLatest Activity: 55 minutes ago
If you need more help you can view your support options (expected response time for an email or ticket is 24 hours), or contact us on X or Facebook.
For more info on available support options for your Dropbox plan, see this article.
If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!
You might see that the Dropbox Community team have been busy working on some major updates to the Community itself! So, here is some info on what’s changed, what’s staying the same and what you can expect from the Dropbox Community overall.
"}},"component({\"componentId\":\"custom.widget.Qualtrics\"})":{"__typename":"Component","render({\"context\":{\"component\":{\"entities\":[],\"props\":{}},\"page\":{\"entities\":[\"board:101000014\",\"message:786437\"],\"name\":\"ForumReplyPage\",\"props\":{},\"url\":\"https://www.dropboxforum.com\"}}})":{"__typename":"ComponentRenderResult","html":" "}},"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarDropdownToggle\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/EscalatedMessageBanner\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/EscalatedMessageBanner-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserLink-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserRank\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserRank-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTime\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTime-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageSubject\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageSubject-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBody\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBody-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageCustomFields\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageCustomFields-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageReplyButton\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageReplyButton-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/nodes/NodeView/NodeViewCard\"]})":[{"__ref":"CachedAsset:text:en_US-components/nodes/NodeView/NodeViewCard-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageView/MessageViewInline\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/Pager/PagerLoadMore\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/Pager/PagerLoadMore-1734449632000"}],"message({\"id\":\"message:786437\"})":{"__ref":"ForumTopicMessage:message:786437"},"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/ranks/UserRankLabel\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/AcceptedSolutionButton\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/AcceptedSolutionButton-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/ThreadedReplyList\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/ThreadedReplyList-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeAvatar-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeDescription\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeDescription-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/nodes/NodeTopicsCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/nodes/NodeTopicsCount-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/nodes/NodeLatestActivityTime\"]})":[{"__ref":"CachedAsset:text:en_US-components/nodes/NodeLatestActivityTime-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"components/nodes/NodeFollowersCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/nodes/NodeFollowersCount-1734449632000"}],"cachedText({\"lastModified\":\"1734449632000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeIcon\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1734449632000"}],"message({\"id\":\"message:786727\"})":{"__ref":"ForumReplyMessage:message:786727"},"message({\"id\":\"message:786731\"})":{"__ref":"ForumReplyMessage:message:786731"},"message({\"id\":\"message:787220\"})":{"__ref":"ForumReplyMessage:message:787220"}},"CachedAsset:pages-1735987859489":{"__typename":"CachedAsset","id":"pages-1735987859489","value":[{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"BlogViewAllPostsPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId/all-posts/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"CasePortalPage","type":"CASE_PORTAL","urlPath":"/caseportal","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"CreateGroupHubPage","type":"GROUP_HUB","urlPath":"/groups/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"CaseViewPage","type":"CASE_DETAILS","urlPath":"/case/:caseId/:caseNumber","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"InboxPage","type":"COMMUNITY","urlPath":"/inbox","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"HelpFAQPage","type":"COMMUNITY","urlPath":"/help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"IdeaMessagePage","type":"IDEA_POST","urlPath":"/idea/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"IdeaViewAllIdeasPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/all-ideas/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"LoginPage","type":"USER","urlPath":"/signin","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"BlogPostPage","type":"BLOG","urlPath":"/category/:categoryId/blogs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ThemeEditorPage","type":"COMMUNITY","urlPath":"/designer/themes","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"TkbViewAllArticlesPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId/all-articles/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"OccasionEditPage","type":"EVENT","urlPath":"/event/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"OAuthAuthorizationAllowPage","type":"USER","urlPath":"/auth/authorize/allow","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"PageEditorPage","type":"COMMUNITY","urlPath":"/designer/pages","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"PostPage","type":"COMMUNITY","urlPath":"/category/:categoryId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ForumBoardPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"TkbBoardPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"EventPostPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"UserBadgesPage","type":"COMMUNITY","urlPath":"/users/:login/:userId/badges","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"GroupHubMembershipAction","type":"GROUP_HUB","urlPath":"/membership/join/:nodeId/:membershipType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"IdeaReplyPage","type":"IDEA_REPLY","urlPath":"/idea/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"UserSettingsPage","type":"USER","urlPath":"/mysettings/:userSettingsTab","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"GroupHubsPage","type":"GROUP_HUB","urlPath":"/groups","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ForumPostPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"OccasionRsvpActionPage","type":"OCCASION","urlPath":"/event/:boardId/:messageSubject/:messageId/rsvp/:responseType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"VerifyUserEmailPage","type":"USER","urlPath":"/verifyemail/:userId/:verifyEmailToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"AllOccasionsPage","type":"OCCASION","urlPath":"/category/:categoryId/events/:boardId/all-events/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"EventBoardPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"TkbReplyPage","type":"TKB_REPLY","urlPath":"/kb/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"IdeaBoardPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"CommunityGuideLinesPage","type":"COMMUNITY","urlPath":"/communityguidelines","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"CaseCreatePage","type":"SALESFORCE_CASE_CREATION","urlPath":"/caseportal/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"TkbEditPage","type":"TKB","urlPath":"/kb/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ForgotPasswordPage","type":"USER","urlPath":"/forgotpassword","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"IdeaEditPage","type":"IDEA","urlPath":"/idea/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"TagPage","type":"COMMUNITY","urlPath":"/tag/:tagName","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"BlogBoardPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"OccasionMessagePage","type":"OCCASION_TOPIC","urlPath":"/event/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ManageContentPage","type":"COMMUNITY","urlPath":"/managecontent","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ClosedMembershipNodeNonMembersPage","type":"GROUP_HUB","urlPath":"/closedgroup/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"CommunityPage","type":"COMMUNITY","urlPath":"/","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ForumMessagePage","type":"FORUM_TOPIC","urlPath":"/discussions/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"IdeaPostPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"BlogMessagePage","type":"BLOG_ARTICLE","urlPath":"/blog/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"RegistrationPage","type":"USER","urlPath":"/register","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"EditGroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ForumEditPage","type":"FORUM","urlPath":"/discussions/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ResetPasswordPage","type":"USER","urlPath":"/resetpassword/:userId/:resetPasswordToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"TkbMessagePage","type":"TKB_ARTICLE","urlPath":"/kb/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"BlogEditPage","type":"BLOG","urlPath":"/blog/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ManageUsersPage","type":"USER","urlPath":"/users/manage/:tab?/:manageUsersTab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ForumReplyPage","type":"FORUM_REPLY","urlPath":"/discussions/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"PrivacyPolicyPage","type":"COMMUNITY","urlPath":"/privacypolicy","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"NotificationPage","type":"COMMUNITY","urlPath":"/notifications","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"UserPage","type":"USER","urlPath":"/users/:login/:userId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"OccasionReplyPage","type":"OCCASION_REPLY","urlPath":"/event/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ManageMembersPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/manage/:tab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"SearchResultsPage","type":"COMMUNITY","urlPath":"/search","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"BlogReplyPage","type":"BLOG_REPLY","urlPath":"/blog/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"GroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"TermsOfServicePage","type":"COMMUNITY","urlPath":"/termsofservice","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"CategoryPage","type":"CATEGORY","urlPath":"/category/:categoryId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"ForumViewAllTopicsPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/all-topics/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"TkbPostPage","type":"TKB","urlPath":"/category/:categoryId/kbs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1735987859489,"localOverride":null,"page":{"id":"GroupHubPostPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"}],"localOverride":false},"CachedAsset:text:en_US-components/context/AppContext/AppContextProvider-0":{"__typename":"CachedAsset","id":"text:en_US-components/context/AppContext/AppContextProvider-0","value":{"noCommunity":"Cannot find community","noUser":"Cannot find current user","noNode":"Cannot find node with id {nodeId}","noMessage":"Cannot find message with id {messageId}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-0":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-0","value":{"title":"Loading..."},"localOverride":false},"User:user:-1":{"__typename":"User","id":"user:-1","uid":-1,"login":"anonymous","email":"","avatar":null,"rank":null,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":"ANONYMOUS","registrationTime":null,"confirmEmailStatus":false,"registrationAccessLevel":"VIEW","ssoRegistrationFields":[]},"ssoId":null,"profileSettings":{"__typename":"ProfileSettings","dateDisplayStyle":{"__typename":"InheritableStringSettingWithPossibleValues","key":"layout.friendly_dates_enabled","value":"true","localValue":"true","possibleValues":["true","false"]},"dateDisplayFormat":{"__typename":"InheritableStringSetting","key":"layout.format_pattern_date","value":"MM-dd-yyyy","localValue":"MM-dd-yyyy"},"language":{"__typename":"InheritableStringSettingWithPossibleValues","key":"profile.language","value":"en-US","localValue":"en","possibleValues":["en-US"]}},"deleted":false},"Theme:customTheme1":{"__typename":"Theme","id":"customTheme1"},"AssociatedImage:{\"url\":\"https://www.dropboxforum.com/t5/s/mxpez29397/images/bi00My1JMExKVXk\"}":{"__typename":"AssociatedImage","url":"https://www.dropboxforum.com/t5/s/mxpez29397/images/bi00My1JMExKVXk","mimeType":"image/svg+xml"},"Category:category:101000041":{"__typename":"Category","id":"category:101000041","entityType":"CATEGORY","displayId":"101000041","nodeType":"category","depth":3,"title":"Developer & API","shortTitle":"Developers & API","parent":{"__ref":"Category:category:101007"},"categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:top":{"__typename":"Category","id":"category:top","displayId":"top","nodeType":"category","depth":0,"title":"Top","entityType":"CATEGORY","shortTitle":"Top"},"Category:category:English":{"__typename":"Category","id":"category:English","displayId":"English","nodeType":"category","depth":1,"parent":{"__ref":"Category:category:top"},"title":"Community","entityType":"CATEGORY","shortTitle":"en","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:101007":{"__typename":"Category","id":"category:101007","displayId":"101007","nodeType":"category","depth":2,"parent":{"__ref":"Category:category:English"},"title":"Discover","entityType":"CATEGORY","shortTitle":"Discover","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:101000014":{"__typename":"Forum","id":"board:101000014","entityType":"FORUM","displayId":"101000014","nodeType":"board","depth":4,"conversationStyle":"FORUM","title":"Dropbox API Support & Feedback","description":"Find help with the Dropbox API from other developers.","avatar":{"__ref":"AssociatedImage:{\"url\":\"https://www.dropboxforum.com/t5/s/mxpez29397/images/bi00My1JMExKVXk\"}"},"profileSettings":{"__typename":"ProfileSettings","language":null},"parent":{"__ref":"Category:category:101000041"},"ancestors":{"__typename":"CoreNodeConnection","edges":[{"__typename":"CoreNodeEdge","node":{"__ref":"Community:community:mxpez29397"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:English"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:101007"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:101000041"}}]},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"boardPolicies":{"__typename":"BoardPolicies","canPublishArticleOnCreate":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","args":[]}}},"shortTitle":"Dropbox API Support & Feedback","repliesProperties":{"__typename":"RepliesProperties","sortOrder":"PUBLISH_TIME","repliesFormat":"threaded"},"topicsCount":5924,"messageActivity":{"__typename":"MessageActivity","corePropertyChangeTime":"2025-01-14T00:37:42.862-08:00"},"subscriptionsCount":335,"eventPath":"category:101000041/category:101007/category:English/community:mxpez29397board:101000014/","tagProperties":{"__typename":"TagNodeProperties","tagsEnabled":{"__typename":"PolicyResult","failureReason":null}},"requireTags":false,"tagType":"FREEFORM_AND_PRESET"},"Rank:rank:46":{"__typename":"Rank","id":"rank:46","position":29,"name":"Explorer | Level 3","color":"333333","icon":null,"rankStyle":"TEXT"},"User:user:1530029":{"__typename":"User","id":"user:1530029","uid":1530029,"login":"jimbobbles","deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/m_assets/avatars/default/avatar-8.svg"},"rank":{"__ref":"Rank:rank:46"},"email":"","messagesCount":9,"biography":null,"topicsCount":4,"kudosReceivedCount":0,"kudosGivenCount":0,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2022-03-28T02:18:34.627-07:00","confirmEmailStatus":null,"registrationAccessLevel":null,"ssoRegistrationFields":[]},"followersCount":null,"solutionsCount":0,"ssoId":null,"entityType":"USER","eventPath":"community:mxpez29397/user:1530029"},"ForumTopicMessage:message:786437":{"__typename":"ForumTopicMessage","uid":786437,"subject":"Android batch upload example?","id":"message:786437","revisionNum":1,"repliesCount":6,"author":{"__ref":"User:user:1530029"},"depth":0,"hasGivenKudo":false,"board":{"__ref":"Forum:board:101000014"},"conversation":{"__ref":"Conversation:conversation:786437"},"readOnly":false,"editFrozen":false,"moderationData":{"__ref":"ModerationData:moderation_data:786437"},"body@stripHtml({\"truncateLength\":200})":" I'm looking for a full example of batch upload (using simple uploads, not chunked) using Android. I have found bits and pieces of info scattered around: SDK docs for uploadSeesionStartBatch, but...","body@stringLength":"2310","rawBody":"
I'm looking for a full example of batch upload (using simple uploads, not chunked) using Android. I have found bits and pieces of info scattered around:
I'm just looking for an example which shows how all the pieces fit together (sessions, cursors, starting, appending, finishing etc) because I'm really struggling to figure it all out. Does one exist?
I'm looking for a full example of batch upload (using simple uploads, not chunked) using Android. I have found bits and pieces of info scattered around:
I'm just looking for an example which shows how all the pieces fit together (sessions, cursors, starting, appending, finishing etc) because I'm really struggling to figure it all out. Does one exist?
jimbobbles Here's the current link to the example of using upload sessions in the Java SDK, to replace the broken link you found: https://github.com/dropbox/dropbox-sdk-java/blob/main/examples/examples/src/main/java/com/dropbox/core/examples/upload_file/UploadFileExample.java#L57 This example shows how to use an upload session to upload one large file (and it also earlier in the code shows how to use non-upload session functionality to upload one small file). It doesn't show any of the batch functionality, but it can be useful as an introduction to the concepts of upload sessions, cursors, etc. If you want to add the batch functionality, you could use that as a starting point. Note though that there is no \"uploadBatch\" method; the batch functionality only exists for upload sessions. You can use upload sessions to upload small files too though; that will still require multiple calls (to start, append, and finish). It's not possible to upload multiple different files in just one call though.
Here's the current link to the example of using upload sessions in the Java SDK, to replace the broken link you found: https://github.com/dropbox/dropbox-sdk-java/blob/main/examples/examples/src/main/java/com/dropbox/core/examples/upload_file/UploadFileExample.java#L57 This example shows how to use an upload session to upload one large file (and it also earlier in the code shows how to use non-upload session functionality to upload one small file). It doesn't show any of the batch functionality, but it can be useful as an introduction to the concepts of upload sessions, cursors, etc. If you want to add the batch functionality, you could use that as a starting point. Note though that there is no \"uploadBatch\" method; the batch functionality only exists for upload sessions. You can use upload sessions to upload small files too though; that will still require multiple calls (to start, append, and finish). It's not possible to upload multiple different files in just one call though.
","kudosSumWeight":0,"repliesCount":3,"postTime":"2024-08-01T12:51:04.972-07:00","images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"attachments":{"__typename":"AttachmentConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[]},"timeToRead":1,"currentRevision":{"__ref":"Revision:revision:786534_2"},"latestVersion":null,"metrics":{"__typename":"MessageMetrics","views":586},"visibilityScope":"PUBLIC","isEscalated":null,"placeholder":false,"originalMessageForPlaceholder":null,"messagePolicies":{"__typename":"MessagePolicies","canModerateSpamMessage":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","key":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","args":[]}}},"customFields":[],"replies":{"__typename":"MessageConnection","edges":[{"__typename":"MessageEdge","cursor":"MjQuMTF8Mi4xfGl8MTB8NTI6MXxpbnQsNzg2NzI3LDc4NjcyNw","node":{"__ref":"ForumReplyMessage:message:786727"}}],"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"CachedAsset:theme:customTheme1-1735987859097":{"__typename":"CachedAsset","id":"theme:customTheme1-1735987859097","value":{"id":"customTheme1","animation":{"fast":"150ms","normal":"250ms","slow":"500ms","slowest":"750ms","function":"cubic-bezier(0.07, 0.91, 0.51, 1)","__typename":"AnimationThemeSettings"},"avatar":{"borderRadius":"50%","collections":["custom"],"__typename":"AvatarThemeSettings"},"basics":{"browserIcon":{"imageAssetName":"DBX_Logo_512-1733312516365.png","imageLastModified":"1733312518563","__typename":"ThemeAsset"},"customerLogo":{"imageAssetName":"DBLogoLong-1701789450005.png","imageLastModified":"1701789453105","__typename":"ThemeAsset"},"maximumWidthOfPageContent":"1200px","oneColumnNarrowWidth":"800px","gridGutterWidthMd":"30px","gridGutterWidthXs":"10px","pageWidthStyle":"WIDTH_OF_BROWSER","__typename":"BasicsThemeSettings"},"buttons":{"borderRadiusSm":"0","borderRadius":"0","borderRadiusLg":"0","paddingY":"5px","paddingYLg":"7px","paddingYHero":"var(--lia-bs-btn-padding-y-lg)","paddingX":"12px","paddingXLg":"16px","paddingXHero":"60px","fontStyle":"NORMAL","fontWeight":"400","textTransform":"NONE","disabledOpacity":0.5,"primaryTextColor":"var(--lia-bs-white)","primaryTextHoverColor":"var(--lia-bs-white)","primaryTextActiveColor":"var(--lia-bs-white)","primaryBgColor":"var(--lia-bs-primary)","primaryBgHoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.85))","primaryBgActiveColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.7))","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","primaryBorderActive":"1px solid transparent","primaryBorderFocus":"1px solid var(--lia-bs-white)","primaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","secondaryTextColor":"var(--lia-bs-gray-900)","secondaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","secondaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","secondaryBgColor":"var(--lia-bs-gray-300)","secondaryBgHoverColor":"hsl(var(--lia-bs-gray-300-h), var(--lia-bs-gray-300-s), calc(var(--lia-bs-gray-300-l) * 0.96))","secondaryBgActiveColor":"hsl(var(--lia-bs-gray-300-h), var(--lia-bs-gray-300-s), calc(var(--lia-bs-gray-300-l) * 0.92))","secondaryBorder":"1px solid transparent","secondaryBorderHover":"1px solid transparent","secondaryBorderActive":"1px solid transparent","secondaryBorderFocus":"1px solid transparent","secondaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","tertiaryTextColor":"var(--lia-bs-gray-900)","tertiaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","tertiaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","tertiaryBgColor":"transparent","tertiaryBgHoverColor":"transparent","tertiaryBgActiveColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.04)","tertiaryBorder":"1px solid transparent","tertiaryBorderHover":"1px solid hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","tertiaryBorderActive":"1px solid transparent","tertiaryBorderFocus":"1px solid transparent","tertiaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","destructiveTextColor":"var(--lia-bs-gray-700)","destructiveTextHoverColor":"hsl(var(--lia-bs-gray-700-h), var(--lia-bs-gray-700-s), calc(var(--lia-bs-gray-700-l) * 0.95))","destructiveTextActiveColor":"hsl(var(--lia-bs-gray-700-h), var(--lia-bs-gray-700-s), calc(var(--lia-bs-gray-700-l) * 0.9))","destructiveBgColor":"var(--lia-bs-gray-200)","destructiveBgHoverColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96))","destructiveBgActiveColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92))","destructiveBorder":"1px solid transparent","destructiveBorderHover":"1px solid transparent","destructiveBorderActive":"1px solid transparent","destructiveBorderFocus":"1px solid transparent","destructiveBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","__typename":"ButtonsThemeSettings"},"border":{"color":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","mainContent":"NONE","sideContent":"NONE","radiusSm":"0","radius":"0","radiusLg":"0","radius50":"100vw","__typename":"BorderThemeSettings"},"boxShadow":{"xs":"0 0 0 1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.08), 0 3px 0 -1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.16)","sm":"0 2px 4px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.12)","md":"0 5px 15px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","lg":"0 10px 30px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","__typename":"BoxShadowThemeSettings"},"cards":{"bgColor":"var(--lia-panel-bg-color)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":"var(--lia-box-shadow-xs)","__typename":"CardsThemeSettings"},"chip":{"maxWidth":"300px","height":"30px","__typename":"ChipThemeSettings"},"coreTypes":{"defaultMessageLinkColor":"var(--lia-bs-link-color)","defaultMessageLinkDecoration":"none","defaultMessageLinkFontStyle":"NORMAL","defaultMessageLinkFontWeight":"400","defaultMessageFontStyle":"NORMAL","defaultMessageFontWeight":"400","forumColor":"#3DD3EE","forumFontFamily":"var(--lia-bs-font-family-base)","forumFontWeight":"var(--lia-default-message-font-weight)","forumLineHeight":"var(--lia-bs-line-height-base)","forumFontStyle":"var(--lia-default-message-font-style)","forumMessageLinkColor":"var(--lia-default-message-link-color)","forumMessageLinkDecoration":"var(--lia-default-message-link-decoration)","forumMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","forumMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","forumSolvedColor":"#B4DF1C","blogColor":"#FAD24B","blogFontFamily":"var(--lia-bs-font-family-base)","blogFontWeight":"var(--lia-default-message-font-weight)","blogLineHeight":"1.75","blogFontStyle":"var(--lia-default-message-font-style)","blogMessageLinkColor":"var(--lia-default-message-link-color)","blogMessageLinkDecoration":"var(--lia-default-message-link-decoration)","blogMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","blogMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","tkbColor":"#B4C8E1","tkbFontFamily":"var(--lia-bs-font-family-base)","tkbFontWeight":"var(--lia-default-message-font-weight)","tkbLineHeight":"1.75","tkbFontStyle":"var(--lia-default-message-font-style)","tkbMessageLinkColor":"var(--lia-default-message-link-color)","tkbMessageLinkDecoration":"var(--lia-default-message-link-decoration)","tkbMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","tkbMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaColor":"#4099E2","qandaFontFamily":"var(--lia-bs-font-family-base)","qandaFontWeight":"var(--lia-default-message-font-weight)","qandaLineHeight":"var(--lia-bs-line-height-base)","qandaFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkColor":"var(--lia-default-message-link-color)","qandaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","qandaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaSolvedColor":"#3FA023","ideaColor":"#F9A34B","ideaFontFamily":"var(--lia-bs-font-family-base)","ideaFontWeight":"var(--lia-default-message-font-weight)","ideaLineHeight":"var(--lia-bs-line-height-base)","ideaFontStyle":"var(--lia-default-message-font-style)","ideaMessageLinkColor":"var(--lia-default-message-link-color)","ideaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","ideaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","ideaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","contestColor":"#FCC845","contestFontFamily":"var(--lia-bs-font-family-base)","contestFontWeight":"var(--lia-default-message-font-weight)","contestLineHeight":"var(--lia-bs-line-height-base)","contestFontStyle":"var(--lia-default-message-link-font-style)","contestMessageLinkColor":"var(--lia-default-message-link-color)","contestMessageLinkDecoration":"var(--lia-default-message-link-decoration)","contestMessageLinkFontStyle":"ITALIC","contestMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","occasionColor":"#D13A1F","occasionFontFamily":"var(--lia-bs-font-family-base)","occasionFontWeight":"var(--lia-default-message-font-weight)","occasionLineHeight":"var(--lia-bs-line-height-base)","occasionFontStyle":"var(--lia-default-message-font-style)","occasionMessageLinkColor":"var(--lia-default-message-link-color)","occasionMessageLinkDecoration":"var(--lia-default-message-link-decoration)","occasionMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","occasionMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","grouphubColor":"#C8AFF0","categoryColor":"#949494","communityColor":"#FFFFFF","productColor":"#949494","__typename":"CoreTypesThemeSettings"},"colors":{"black":"#000000","white":"#FFFFFF","gray100":"#F7F7F7","gray200":"#F7F7F7","gray300":"#E8E8E8","gray400":"#D9D9D9","gray500":"#CCCCCC","gray600":"#949494","gray700":"#707070","gray800":"#545454","gray900":"#333333","dark":"#545454","light":"#F7F7F7","primary":"#0061FE","secondary":"#333333","bodyText":"#1A1918","bodyBg":"#F7F5F2","info":"#3080FF","success":"#0F503C","warning":"#845909","danger":"#FA551E","alertSystem":"#FF6600","textMuted":"#707070","highlight":"#FFFCAD","outline":"var(--lia-bs-primary)","custom":["#C8AFF0","#B4DC19","#F9A34B","#FFAFA5","#3DD3EE","#B4C8E1","#FAD24B","#FA551E"],"__typename":"ColorsThemeSettings"},"divider":{"size":"3px","marginLeft":"4px","marginRight":"4px","borderRadius":"50%","bgColor":"var(--lia-bs-gray-600)","bgColorActive":"var(--lia-bs-gray-600)","__typename":"DividerThemeSettings"},"dropdown":{"fontSize":"var(--lia-bs-font-size-sm)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius-sm)","dividerBg":"var(--lia-bs-gray-300)","itemPaddingY":"5px","itemPaddingX":"20px","headerColor":"var(--lia-bs-gray-700)","__typename":"DropdownThemeSettings"},"email":{"link":{"color":"#0069D4","hoverColor":"#0061c2","decoration":"none","hoverDecoration":"underline","__typename":"EmailLinkSettings"},"border":{"color":"#e4e4e4","__typename":"EmailBorderSettings"},"buttons":{"borderRadiusLg":"5px","paddingXLg":"16px","paddingYLg":"7px","fontWeight":"700","primaryTextColor":"#ffffff","primaryTextHoverColor":"#ffffff","primaryBgColor":"#0069D4","primaryBgHoverColor":"#005cb8","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","__typename":"EmailButtonsSettings"},"panel":{"borderRadius":"5px","borderColor":"#e4e4e4","__typename":"EmailPanelSettings"},"__typename":"EmailThemeSettings"},"emoji":{"skinToneDefault":"#ffcd43","skinToneLight":"#fae3c5","skinToneMediumLight":"#e2cfa5","skinToneMedium":"#daa478","skinToneMediumDark":"#a78058","skinToneDark":"#5e4d43","__typename":"EmojiThemeSettings"},"heading":{"color":"var(--lia-bs-body-color)","fontFamily":"SharpGroteskDB Bold","fontStyle":"NORMAL","fontWeight":"700","h1FontSize":"28px","h2FontSize":"22px","h3FontSize":"18px","h4FontSize":"16px","h5FontSize":"16px","h6FontSize":"16px","lineHeight":"1.3","subHeaderFontSize":"11px","subHeaderFontWeight":"500","h1LetterSpacing":"normal","h2LetterSpacing":"normal","h3LetterSpacing":"normal","h4LetterSpacing":"normal","h5LetterSpacing":"normal","h6LetterSpacing":"normal","subHeaderLetterSpacing":"2px","h1FontWeight":null,"h2FontWeight":null,"h3FontWeight":null,"h4FontWeight":null,"h5FontWeight":null,"h6FontWeight":null,"__typename":"HeadingThemeSettings"},"icons":{"size10":"10px","size12":"12px","size14":"14px","size16":"16px","size20":"20px","size24":"24px","size30":"30px","size40":"40px","size50":"50px","size60":"60px","size80":"80px","size120":"120px","size160":"160px","__typename":"IconsThemeSettings"},"imagePreview":{"bgColor":"var(--lia-bs-gray-900)","titleColor":"var(--lia-bs-white)","controlColor":"var(--lia-bs-white)","controlBgColor":"var(--lia-bs-gray-800)","__typename":"ImagePreviewThemeSettings"},"input":{"borderColor":"var(--lia-bs-gray-600)","disabledColor":"var(--lia-bs-gray-600)","focusBorderColor":"var(--lia-bs-primary)","labelMarginBottom":"10px","btnFontSize":"var(--lia-bs-font-size-sm)","focusBoxShadow":"0 0 0 3px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","checkLabelMarginBottom":"2px","checkboxBorderRadius":"0","borderRadiusSm":"0","borderRadius":"0","borderRadiusLg":"0","formTextMarginTop":"4px","textAreaBorderRadius":"0","activeFillColor":"var(--lia-bs-primary)","__typename":"InputThemeSettings"},"loading":{"dotDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.2)","dotLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.5)","barDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.06)","barLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.4)","__typename":"LoadingThemeSettings"},"link":{"color":"var(--lia-bs-primary)","hoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) - 10%))","decoration":"none","hoverDecoration":"underline","__typename":"LinkThemeSettings"},"listGroup":{"itemPaddingY":"15px","itemPaddingX":"15px","borderColor":"var(--lia-bs-gray-300)","__typename":"ListGroupThemeSettings"},"modal":{"contentTextColor":"var(--lia-bs-body-color)","contentBg":"var(--lia-bs-white)","backgroundBg":"var(--lia-bs-black)","smSize":"440px","mdSize":"760px","lgSize":"1080px","backdropOpacity":0.3,"contentBoxShadowXs":"var(--lia-bs-box-shadow-sm)","contentBoxShadow":"var(--lia-bs-box-shadow)","headerFontWeight":"700","__typename":"ModalThemeSettings"},"navbar":{"position":"FIXED","background":{"attachment":null,"clip":null,"color":"var(--lia-bs-white)","imageAssetName":null,"imageLastModified":"0","origin":null,"position":"CENTER_CENTER","repeat":"NO_REPEAT","size":"COVER","__typename":"BackgroundProps"},"backgroundOpacity":0.8,"paddingTop":"15px","paddingBottom":"15px","borderBottom":"1px solid var(--lia-bs-border-color)","boxShadow":"var(--lia-bs-box-shadow-sm)","brandMarginRight":"30px","brandMarginRightSm":"10px","brandLogoHeight":"30px","linkGap":"10px","linkJustifyContent":"flex-start","linkPaddingY":"5px","linkPaddingX":"10px","linkDropdownPaddingY":"9px","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkColor":"var(--lia-bs-body-color)","linkHoverColor":"var(--lia-bs-primary)","linkFontSize":"var(--lia-bs-font-size-sm)","linkFontStyle":"NORMAL","linkFontWeight":"400","linkTextTransform":"NONE","linkLetterSpacing":"normal","linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkBgColor":"transparent","linkBgHoverColor":"transparent","linkBorder":"none","linkBorderHover":"none","linkBoxShadow":"none","linkBoxShadowHover":"none","linkTextBorderBottom":"none","linkTextBorderBottomHover":"none","dropdownPaddingTop":"10px","dropdownPaddingBottom":"15px","dropdownPaddingX":"10px","dropdownMenuOffset":"2px","dropdownDividerMarginTop":"10px","dropdownDividerMarginBottom":"10px","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","controllerIconColor":"var(--lia-bs-body-color)","controllerIconHoverColor":"var(--lia-bs-body-color)","controllerTextColor":"var(--lia-nav-controller-icon-color)","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","controllerHighlightColor":"hsla(30, 100%, 50%)","controllerHighlightTextColor":"var(--lia-yiq-light)","controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerColor":"var(--lia-nav-controller-icon-color)","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","hamburgerBgColor":"transparent","hamburgerBgHoverColor":"transparent","hamburgerBorder":"none","hamburgerBorderHover":"none","collapseMenuMarginLeft":"20px","collapseMenuDividerBg":"var(--lia-nav-link-color)","collapseMenuDividerOpacity":0.16,"__typename":"NavbarThemeSettings"},"pager":{"textColor":"var(--lia-bs-link-color)","textFontWeight":"var(--lia-font-weight-md)","textFontSize":"var(--lia-bs-font-size-sm)","__typename":"PagerThemeSettings"},"panel":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-bs-border-radius)","borderColor":"var(--lia-bs-border-color)","boxShadow":"none","__typename":"PanelThemeSettings"},"popover":{"arrowHeight":"8px","arrowWidth":"16px","maxWidth":"300px","minWidth":"100px","headerBg":"var(--lia-bs-white)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius)","boxShadow":"0 0.5rem 1rem hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.15)","__typename":"PopoverThemeSettings"},"prism":{"color":"#000000","bgColor":"#f5f2f0","fontFamily":"var(--font-family-monospace)","fontSize":"var(--lia-bs-font-size-base)","fontWeightBold":"var(--lia-bs-font-weight-bold)","fontStyleItalic":"italic","tabSize":2,"highlightColor":"#b3d4fc","commentColor":"#62707e","punctuationColor":"#6f6f6f","namespaceOpacity":"0.7","propColor":"#990055","selectorColor":"#517a00","operatorColor":"#906736","operatorBgColor":"hsla(0, 0%, 100%, 0.5)","keywordColor":"#0076a9","functionColor":"#d3284b","variableColor":"#c14700","__typename":"PrismThemeSettings"},"rte":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":" var(--lia-panel-box-shadow)","customColor1":"#bfedd2","customColor2":"#fbeeb8","customColor3":"#f8cac6","customColor4":"#eccafa","customColor5":"#c2e0f4","customColor6":"#2dc26b","customColor7":"#f1c40f","customColor8":"#e03e2d","customColor9":"#b96ad9","customColor10":"#3598db","customColor11":"#169179","customColor12":"#e67e23","customColor13":"#ba372a","customColor14":"#843fa1","customColor15":"#236fa1","customColor16":"#ecf0f1","customColor17":"#ced4d9","customColor18":"#95a5a6","customColor19":"#7e8c8d","customColor20":"#34495e","customColor21":"#000000","customColor22":"#ffffff","defaultMessageHeaderMarginTop":"40px","defaultMessageHeaderMarginBottom":"20px","defaultMessageItemMarginTop":"0","defaultMessageItemMarginBottom":"30px","diffAddedColor":"hsla(170, 53%, 51%, 0.4)","diffChangedColor":"hsla(43, 97%, 63%, 0.4)","diffNoneColor":"hsla(0, 0%, 80%, 0.4)","diffRemovedColor":"hsla(9, 74%, 47%, 0.4)","specialMessageHeaderMarginTop":"40px","specialMessageHeaderMarginBottom":"20px","specialMessageItemMarginTop":"0","specialMessageItemMarginBottom":"30px","__typename":"RteThemeSettings"},"tags":{"bgColor":"var(--lia-bs-gray-200)","bgHoverColor":"var(--lia-bs-gray-400)","borderRadius":"var(--lia-bs-border-radius-sm)","color":"var(--lia-bs-body-color)","hoverColor":"var(--lia-bs-body-color)","fontWeight":"var(--lia-font-weight-md)","fontSize":"var(--lia-font-size-xxs)","textTransform":"UPPERCASE","letterSpacing":"0.5px","__typename":"TagsThemeSettings"},"toasts":{"borderRadius":"var(--lia-bs-border-radius)","paddingX":"12px","__typename":"ToastsThemeSettings"},"typography":{"fontFamilyBase":"Atlas Grotesk Regular","fontStyleBase":"NORMAL","fontWeightBase":"400","fontWeightLight":"300","fontWeightNormal":"400","fontWeightMd":"500","fontWeightBold":"700","letterSpacingSm":"normal","letterSpacingXs":"normal","lineHeightBase":"1.5","fontSizeBase":"16px","fontSizeXxs":"11px","fontSizeXs":"12px","fontSizeSm":"14px","fontSizeLg":"20px","fontSizeXl":"24px","smallFontSize":"14px","customFonts":[{"source":"SERVER","name":"DB Sharp Grotesk Variable","styles":[{"style":"NORMAL","weight":"500","__typename":"FontStyleData"}],"assetNames":["DBSharpGroteskVariable-normal-500.ttf"],"__typename":"CustomFont"},{"source":"SERVER","name":"SharpGroteskDB Bold","styles":[{"style":"NORMAL","weight":"700","__typename":"FontStyleData"},{"style":"NORMAL","weight":"400","__typename":"FontStyleData"}],"assetNames":["SharpGroteskDBBold-normal-700.woff2","SharpGroteskDBBold-normal-400.woff2"],"__typename":"CustomFont"},{"source":"SERVER","name":"Atlas Grotesk Regular","styles":[{"style":"NORMAL","weight":"400","__typename":"FontStyleData"},{"style":"NORMAL","weight":"700","__typename":"FontStyleData"},{"style":"ITALIC","weight":"400","__typename":"FontStyleData"},{"style":"ITALIC","weight":"700","__typename":"FontStyleData"}],"assetNames":["AtlasGroteskRegular-normal-400.woff2","AtlasGroteskRegular-normal-700.woff2","AtlasGroteskRegular-italic-400.woff2","AtlasGroteskRegular-italic-700.woff2"],"__typename":"CustomFont"}],"__typename":"TypographyThemeSettings"},"unstyledListItem":{"marginBottomSm":"5px","marginBottomMd":"10px","marginBottomLg":"15px","marginBottomXl":"20px","marginBottomXxl":"25px","__typename":"UnstyledListItemThemeSettings"},"yiq":{"light":"#ffffff","dark":"#000000","__typename":"YiqThemeSettings"},"colorLightness":{"primaryDark":0.36,"primaryLight":0.74,"primaryLighter":0.89,"primaryLightest":0.95,"infoDark":0.39,"infoLight":0.72,"infoLighter":0.85,"infoLightest":0.93,"successDark":0.24,"successLight":0.62,"successLighter":0.8,"successLightest":0.91,"warningDark":0.39,"warningLight":0.68,"warningLighter":0.84,"warningLightest":0.93,"dangerDark":0.41,"dangerLight":0.72,"dangerLighter":0.89,"dangerLightest":0.95,"__typename":"ColorLightnessThemeSettings"},"localOverride":false,"__typename":"Theme"},"localOverride":false},"CachedAsset:text:en_US-components/common/EmailVerification-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/common/EmailVerification-1734449632000","value":{"email.verification.title":"Email Verification Required","email.verification.message.update.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. To change your email, visit My Settings.","email.verification.message.resend.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. Resend email."},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-1734449632000","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:quilt:dropbox.prod:pages/forums/ForumMessagePage:board:101000014-1736786749741":{"__typename":"CachedAsset","id":"quilt:dropbox.prod:pages/forums/ForumMessagePage:board:101000014-1736786749741","value":{"id":"ForumMessagePage_bVInxJ","container":{"id":"Common","headerProps":{"backgroundImageProps":null,"backgroundColor":null,"addComponents":null,"removeComponents":["community.widget.bannerWidget"],"componentOrder":null,"__typename":"QuiltContainerSectionProps"},"headerComponentProps":{"community.widget.breadcrumbWidget":{"disableLastCrumbForDesktop":false}},"footerProps":null,"footerComponentProps":null,"items":[{"id":"YLUzfi","layout":"MAIN_SIDE","bgColor":"transparent","showTitle":false,"showDescription":false,"textPosition":"CENTER","textColor":"var(--lia-bs-body-color)","sectionEditLevel":null,"bgImage":null,"disableSpacing":null,"edgeToEdgeDisplay":null,"fullHeight":null,"showBorder":null,"__typename":"MainSideQuiltSection","columnMap":{"main":[{"id":"messages.widget.topicWithThreadedReplyListWidget","className":"lia-topic-with-replies","props":{"editLevel":"CONFIGURE"},"__typename":"QuiltComponent"}],"side":[{"id":"nodes.widget.nodeActionButtonWidget","className":null,"props":{"buttonAlignment":"left","instanceId":null,"buttonStyle":"sm","actionButtonTitle":"Start a new discussion","lazyLoad":false,"buttonWidth":"full_width"},"__typename":"QuiltComponent"},{"id":"nodes.widget.nodeInformationWidget","className":null,"props":{"useWidgetTitle":true,"viewVariant":{"type":"card","props":{"useNodePostCount":true,"useNodeFollowersCount":true,"useNodeDescription":true,"useNodeTopicsCount":false,"useNodeAction":false,"useNodeMembersCount":false,"useNodeMembershipType":false,"useNodeTitle":false,"useNodeMembersCountText":true,"useNodeMembership":false,"useNodeCreationDate":false,"textAlignment":"center","useWidgetTitle":true,"useNodeOwners":false,"useNodeAvatar":true,"useNodeLatestActivityTime":true,"useClickableCard":false}},"alignment":"center","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.Need_more_support","className":null,"props":{"widgetVisibility":"signedInOrAnonymous","useTitle":false,"useBackground":true,"title":"Need more support","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"messages.widget.relatedContentWidget","className":null,"props":{"hideIfEmpty":true,"enablePagination":false,"useTitle":true,"listVariant":{"type":"unstyled","props":{"listItemSpacing":"xxl"}},"pageSize":5,"style":"compact","pagerVariant":{"type":"none"},"viewVariant":{"type":"inline","props":{"useRepliesCount":false,"useMedia":false,"useAuthorRank":false,"useNode":false,"boardIconSize":"24","useAuthorLoginLink":true,"useNodeLink":true,"usePreviewMedia":true,"timeStampType":"postTime","useTextBody":true,"useSolvedBadge":false,"subjectAs":"h6","renderPostTimeBeforeAuthor":true,"useAvatar":false,"useVideoPreview":false,"portraitClampBodyLines":3,"useCompactSpacing":true,"useTimeToRead":false,"useSpoilerFreeBody":true,"useKudosCount":false,"useViewCount":false,"useBody":false,"useTags":false,"clampSubjectLines":1,"useBoardIcon":true,"useMessageTimeLink":true,"useAuthorLogin":true}},"lazyLoad":false,"panelType":"standard"},"__typename":"QuiltComponent"},{"id":"messages.widget.messageListForNodeByRecentActivityWidget","className":null,"props":{"hideIfEmpty":true,"listVariant":{"type":"unstyled","props":{"listItemSpacing":"xxl"}},"useTitle":true,"addTags":false,"showTabs":false,"pageSize":5,"pagerVariant":{"type":"loadMore"},"style":"compact","viewVariant":{"type":"inline","props":{"useRepliesCount":false,"useMedia":false,"useAuthorRank":false,"useNode":false,"boardIconSize":"24","truncateBodyLength":-1,"useNodeLink":true,"usePreviewMedia":false,"timeStampType":"conversation.lastPostingActivityTime","avatarSize":"40","useTextBody":true,"useSolvedBadge":true,"subjectAs":"h6","renderPostTimeBeforeAuthor":true,"useAvatar":true,"useTimeToRead":false,"useSpoilerFreeBody":true,"useKudosCount":false,"useViewCount":false,"useBody":false,"useTags":false,"clampSubjectLines":1,"useBoardIcon":false,"useMessageTimeLink":true,"clampBodyLines":3,"useAuthorLogin":true,"useUnreadCount":false,"useNodeHoverCard":true,"useSearchSnippet":false}},"panelType":"standard","sorts":{"conversationLastPostingActivityTime":{"direction":"DESC"}},"lazyLoad":false},"__typename":"QuiltComponent"}],"__typename":"MainSideSectionColumns"}}],"__typename":"QuiltContainer"},"__typename":"Quilt","localOverride":false},"localOverride":false},"CachedAsset:text:en_US-pages/forums/ForumMessagePage-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-pages/forums/ForumMessagePage-1734449632000","value":{"title":"{contextMessageSubject} | {communityTitle}","errorMissing":"This message cannot be found","name":"Forum Message Page","section.message-list.title":"Forum Discussion","archivedMessageTitle":"This Content Has Been Archived","section.YLUzfi.title":"Forum Discussion","section.section-1709130958266.description":"","section.section-1709130958266.title":"","section.section-1720630512544.title":"","section.YLUzfi.description":"","section.jPblZp.description":"","section.message-list.description":"","section.section-1720630512544.description":"","section.jPblZp.title":""},"localOverride":false},"CachedAsset:quiltWrapper:dropbox.prod:Common:1735987784086":{"__typename":"CachedAsset","id":"quiltWrapper:dropbox.prod:Common:1735987784086","value":{"id":"Common","header":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"var(--lia-bs-white)","items":[{"id":"community.widget.navbarWidget","props":{"showUserName":false,"showRegisterLink":true,"useIconLanguagePicker":true,"useLabelLanguagePicker":true,"style":{"boxShadow":"var(--lia-bs-box-shadow-sm)","linkFontWeight":"400","controllerHighlightColor":"#FA551E","dropdownDividerMarginBottom":"10px","hamburgerBorderHover":"none","linkFontSize":"14px","linkBoxShadowHover":"none","backgroundOpacity":1,"controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerBgColor":"transparent","linkTextBorderBottom":"none","hamburgerColor":"var(--lia-nav-controller-icon-color)","brandLogoHeight":"30px","linkLetterSpacing":"normal","linkBgHoverColor":"transparent","collapseMenuDividerOpacity":0.16,"paddingBottom":"15px","dropdownPaddingBottom":"15px","dropdownMenuOffset":"2px","hamburgerBgHoverColor":"transparent","borderBottom":"1px solid var(--lia-bs-border-color)","hamburgerBorder":"none","dropdownPaddingX":"10px","brandMarginRightSm":"10px","linkBoxShadow":"none","linkJustifyContent":"flex-start","linkColor":"var(--lia-bs-body-color)","collapseMenuDividerBg":"var(--lia-nav-link-color)","dropdownPaddingTop":"10px","controllerHighlightTextColor":"var(--lia-yiq-dark)","controllerTextColor":"var(--lia-nav-controller-icon-color)","background":{"imageAssetName":"","color":"var(--lia-bs-white)","size":"COVER","repeat":"NO_REPEAT","position":"CENTER_CENTER","imageLastModified":""},"linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkHoverColor":"var(--lia-bs-primary)","position":"FIXED","linkBorder":"none","linkTextBorderBottomHover":"0","brandMarginRight":"30px","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","linkBorderHover":"none","collapseMenuMarginLeft":"20px","linkFontStyle":"NORMAL","linkPaddingX":"10px","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","paddingTop":"15px","linkPaddingY":"5px","linkTextTransform":"NONE","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkBgColor":"transparent","linkDropdownPaddingY":"9px","controllerIconColor":"var(--lia-bs-body-color)","dropdownDividerMarginTop":"10px","linkGap":"10px","controllerIconHoverColor":"var(--lia-bs-body-color)"},"links":{"sideLinks":[{"children":[],"linkType":"INTERNAL","id":"migrated-link-10","params":{"categoryId":"101004000"},"routeName":"CategoryPage"},{"children":[],"linkType":"EXTERNAL","id":"migrated-link-12","url":"https://www.dropbox.com/help","target":"BLANK"},{"children":[],"linkType":"EXTERNAL","id":"external","url":"https://learn.dropbox.com/","target":"BLANK"},{"children":[],"linkType":"EXTERNAL","id":"migrated-link-13","url":"http://www.dropbox.com/support","target":"BLANK"},{"children":[],"linkType":"EXTERNAL","id":"migrated-link-11","url":"http://www.dropbox.com","target":"BLANK"}],"mainLinks":[{"children":[{"linkType":"INTERNAL","id":"101001016","params":{"boardId":"101001016","categoryId":"101001000"},"routeName":"ForumBoardPage"},{"linkType":"INTERNAL","id":"101001014","params":{"boardId":"101001014","categoryId":"101001000"},"routeName":"ForumBoardPage"},{"linkType":"INTERNAL","id":"101001013","params":{"boardId":"101001013","categoryId":"101001000"},"routeName":"ForumBoardPage"},{"linkType":"INTERNAL","id":"101001017","params":{"boardId":"101001017","categoryId":"101001000"},"routeName":"ForumBoardPage"},{"linkType":"INTERNAL","id":"101001018","params":{"boardId":"101001018","categoryId":"101001000"},"routeName":"ForumBoardPage"},{"linkType":"INTERNAL","id":"101001020","params":{"boardId":"101001020","categoryId":"101001000"},"routeName":"ForumBoardPage"},{"linkType":"INTERNAL","id":"101001019","params":{"boardId":"101001019","categoryId":"101001000"},"routeName":"ForumBoardPage"},{"linkType":"INTERNAL","id":"101001015","params":{"boardId":"101001015","categoryId":"101001000"},"routeName":"ForumBoardPage"},{"linkType":"INTERNAL","id":"101001012","params":{"boardId":"101001012","categoryId":"101001000"},"routeName":"ForumBoardPage"}],"linkType":"INTERNAL","id":"101001000","params":{"categoryId":"101001000"},"routeName":"CategoryPage"},{"children":[{"linkType":"INTERNAL","id":"101007-c1","params":{"boardId":"101007C1","categoryId":"101007"},"routeName":"ForumBoardPage"},{"linkType":"INTERNAL","id":"101000041","params":{"categoryId":"101000041"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"101003016","params":{"boardId":"101003016","categoryId":"101007"},"routeName":"ForumBoardPage"}],"linkType":"INTERNAL","id":"101007","params":{"categoryId":"101007"},"routeName":"CategoryPage"},{"children":[{"linkType":"INTERNAL","id":"dropbox-dash-link","params":{"groupHubId":"Dropbox-Dash"},"routeName":"GroupHubPage"},{"linkType":"INTERNAL","id":"1010-link","params":{"groupHubId":"1010"},"routeName":"GroupHubPage"},{"linkType":"INTERNAL","id":"music-link","params":{"groupHubId":"Music"},"routeName":"GroupHubPage"},{"linkType":"INTERNAL","id":"photography-link","params":{"groupHubId":"Photography"},"routeName":"GroupHubPage"},{"linkType":"INTERNAL","id":"dropboxfor-mac-o-s12","params":{"groupHubId":"DropboxforMacOS12"},"routeName":"GroupHubPage"},{"linkType":"INTERNAL","id":"1009-link","params":{"groupHubId":"1009"},"routeName":"GroupHubPage"},{"linkType":"INTERNAL","id":"1012-link","params":{"groupHubId":"1012"},"routeName":"GroupHubPage"},{"linkType":"INTERNAL","id":"1007-link","params":{"groupHubId":"1007"},"routeName":"GroupHubPage"},{"linkType":"INTERNAL","id":"super-user-link","params":{"groupHubId":"super-user"},"routeName":"GroupHubPage"}],"linkType":"INTERNAL","id":"101010","params":{"categoryId":"101010"},"routeName":"CategoryPage"},{"children":[],"linkType":"INTERNAL","id":"101002013","params":{"boardId":"101002013","categoryId":"English"},"routeName":"IdeaBoardPage"},{"children":[{"linkType":"INTERNAL","id":"english","params":{"categoryId":"English"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"french","params":{"categoryId":"French"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"german","params":{"categoryId":"German"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"spanish","params":{"categoryId":"Spanish"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"portuguese","params":{"categoryId":"Portuguese"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"japanese","params":{"categoryId":"Japanese"},"routeName":"CategoryPage"}],"linkType":"INTERNAL","id":"mxpez29397","params":{},"routeName":"CommunityPage"}]},"className":"QuiltComponent_lia-component-edit-mode__0nCcm","showSearchIcon":true,"languagePickerStyle":"iconAndLabel"},"__typename":"QuiltComponent"},{"id":"community.widget.breadcrumbWidget","props":{"backgroundColor":"var(--lia-bs-white)","linkHighlightColor":"#0061FE","visualEffects":{"showBottomBorder":true},"backgroundOpacity":100,"linkTextColor":"var(--lia-bs-gray-700)"},"__typename":"QuiltComponent"},{"id":"custom.widget.Announcement_bar","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":true,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"community.widget.bannerWidget","props":{"backgroundColor":"var(--lia-bs-white)","visualEffects":{"showBottomBorder":true},"backgroundImageProps":{"backgroundSize":"COVER","backgroundPosition":"CENTER_CENTER","backgroundRepeat":"NO_REPEAT"},"fontColor":"var(--lia-bs-body-color)"},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"footer":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"var(--lia-bs-white)","items":[{"id":"custom.widget.Footer_Community_Home","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":false,"useBackground":true,"title":"Footer","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.Custom_Scripts","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.Qualtrics","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"__typename":"QuiltWrapper","localOverride":false},"localOverride":false},"CachedAsset:text:en_US-components/common/ActionFeedback-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/common/ActionFeedback-1734449632000","value":{"joinedGroupHub.title":"Welcome","joinedGroupHub.message":"You are now a member of this group and are subscribed to updates.","groupHubInviteNotFound.title":"Invitation Not Found","groupHubInviteNotFound.message":"Sorry, we could not find your invitation to the group. The owner may have canceled the invite.","groupHubNotFound.title":"Group Not Found","groupHubNotFound.message":"The grouphub you tried to join does not exist. It may have been deleted.","existingGroupHubMember.title":"Already Joined","existingGroupHubMember.message":"You are already a member of this group.","accountLocked.title":"Account Locked","accountLocked.message":"Your account has been locked due to multiple failed attempts. Try again in {lockoutTime} minutes.","editedGroupHub.title":"Changes Saved","editedGroupHub.message":"Your group has been updated.","leftGroupHub.title":"Goodbye","leftGroupHub.message":"You are no longer a member of this group and will not receive future updates.","deletedGroupHub.title":"Deleted","deletedGroupHub.message":"The group has been deleted.","groupHubCreated.title":"Group Created","groupHubCreated.message":"{groupHubName} is ready to use","accountClosed.title":"Account Closed","accountClosed.message":"The account has been closed and you will now be redirected to the homepage","resetTokenExpired.title":"Reset Password Link has Expired","resetTokenExpired.message":"Try resetting your password again","invalidUrl.title":"Invalid URL","invalidUrl.message":"The URL you're using is not recognized. Verify your URL and try again.","accountClosedForUser.title":"Account Closed","accountClosedForUser.message":"{userName}'s account is closed","inviteTokenInvalid.title":"Invitation Invalid","inviteTokenInvalid.message":"Your invitation to the community has been canceled or expired.","inviteTokenError.title":"Invitation Verification Failed","inviteTokenError.message":"The url you are utilizing is not recognized. Verify your URL and try again","pageNotFound.title":"Access Denied","pageNotFound.message":"You do not have access to this area of the community or it doesn't exist","eventAttending.title":"Responded as Attending","eventAttending.message":"You'll be notified when there's new activity and reminded as the event approaches","eventInterested.title":"Responded as Interested","eventInterested.message":"You'll be notified when there's new activity and reminded as the event approaches","eventNotFound.title":"Event Not Found","eventNotFound.message":"The event you tried to respond to does not exist.","redirectToRelatedPage.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.message":"The content you are trying to access is archived","redirectToRelatedPage.message":"The content you are trying to access is archived","relatedUrl.archivalLink.flyoutMessage":"The content you are trying to access is archived View Archived Content"},"localOverride":false},"CachedAsset:component:custom.widget.Announcement_bar-en-1735987885257":{"__typename":"CachedAsset","id":"component:custom.widget.Announcement_bar-en-1735987885257","value":{"component":{"id":"custom.widget.Announcement_bar","template":{"id":"Announcement_bar","markupLanguage":"HTML","style":null,"texts":null,"defaults":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Announcement_bar","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"TEXTHTML","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Need_more_support-en-1735987885257":{"__typename":"CachedAsset","id":"component:custom.widget.Need_more_support-en-1735987885257","value":{"component":{"id":"custom.widget.Need_more_support","template":{"id":"Need_more_support","markupLanguage":"HTML","style":null,"texts":null,"defaults":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Need_more_support","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"TEXTHTML","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Footer_Community_Home-en-1735987885257":{"__typename":"CachedAsset","id":"component:custom.widget.Footer_Community_Home-en-1735987885257","value":{"component":{"id":"custom.widget.Footer_Community_Home","template":{"id":"Footer_Community_Home","markupLanguage":"HTML","style":null,"texts":null,"defaults":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Footer_Community_Home","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"TEXTHTML","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Custom_Scripts-en-1735987885257":{"__typename":"CachedAsset","id":"component:custom.widget.Custom_Scripts-en-1735987885257","value":{"component":{"id":"custom.widget.Custom_Scripts","template":{"id":"Custom_Scripts","markupLanguage":"HANDLEBARS","style":null,"texts":null,"defaults":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Custom_Scripts","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:component:custom.widget.Qualtrics-en-1735987885257":{"__typename":"CachedAsset","id":"component:custom.widget.Qualtrics-en-1735987885257","value":{"component":{"id":"custom.widget.Qualtrics","template":{"id":"Qualtrics","markupLanguage":"HANDLEBARS","style":null,"texts":null,"defaults":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"Qualtrics widget","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Qualtrics","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"Qualtrics widget","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":null,"form":null},"localOverride":false},"CachedAsset:text:en_US-components/community/Breadcrumb-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/community/Breadcrumb-1734449632000","value":{"navLabel":"Breadcrumbs","dropdown":"Additional parent page navigation"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBanner-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBanner-1734449632000","value":{"messageMarkedAsSpam":"This post has been marked as spam","messageMarkedAsSpam@board:TKB":"This article has been marked as spam","messageMarkedAsSpam@board:BLOG":"This post has been marked as spam","messageMarkedAsSpam@board:FORUM":"This discussion has been marked as spam","messageMarkedAsSpam@board:OCCASION":"This event has been marked as spam","messageMarkedAsSpam@board:IDEA":"This idea has been marked as spam","manageSpam":"Manage Spam","messageMarkedAsAbuse":"This post has been marked as abuse","messageMarkedAsAbuse@board:TKB":"This article has been marked as abuse","messageMarkedAsAbuse@board:BLOG":"This post has been marked as abuse","messageMarkedAsAbuse@board:FORUM":"This discussion has been marked as abuse","messageMarkedAsAbuse@board:OCCASION":"This event has been marked as abuse","messageMarkedAsAbuse@board:IDEA":"This idea has been marked as abuse","preModCommentAuthorText":"This comment will be published as soon as it is approved","preModCommentModeratorText":"This comment is awaiting moderation","messageMarkedAsOther":"This post has been rejected due to other reasons","messageMarkedAsOther@board:TKB":"This article has been rejected due to other reasons","messageMarkedAsOther@board:BLOG":"This post has been rejected due to other reasons","messageMarkedAsOther@board:FORUM":"This discussion has been rejected due to other reasons","messageMarkedAsOther@board:OCCASION":"This event has been rejected due to other reasons","messageMarkedAsOther@board:IDEA":"This idea has been rejected due to other reasons","messageArchived":"This post was archived on {date}","relatedUrl":"View Related Content","relatedContentText":"Showing related content","archivedContentLink":"View Archived Content"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeActionButtonWidget-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeActionButtonWidget-1734449632000","value":{"defaultActionButtonTitle":"Start a Conversation","actionButton.grouphub.startDiscussion":"Start a Discussion","actionButton.title@board:FORUM":"Start a Discussion","actionButton.title@board:BLOG":"Create a Blog Post","actionButton.title@board:TKB":"Create an Article","actionButton.title@board:OCCASION":"Create an Event","actionButton.title@board:IDEA":"Suggest an Idea","joinGroupHub":"Join Group","join.successHeader":"Welcome","join.successMessage":"You are now a member of this group and are subscribed to updates.","errorMessage":"An unidentified problem occurred during the action you took. Please try again later.","errorHeader":"Error - Action Failed"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeInformationWidget-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeInformationWidget-1734449632000","value":{"WidgetTitle":"About {title}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/RelatedContentWidget-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/RelatedContentWidget-1734449632000","value":{"title":"Related Content","emptyDescription":"No content to show"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1734449632000","value":{"title@userScope:other":"Recent Content","title@userScope:self":"Contributions","title@board:FORUM@userScope:other":"Recent Discussions","title@board:BLOG@userScope:other":"Recent Blogs","emptyDescription":"No content to show","MessageListForNodeByRecentActivityWidgetEditor.nodeScope.label":"Scope","title@instance:1718368859225":"Latest Ideas","title@instance:1722595940498":"Recent Content","title@instance:1722595986884":"Recent Content","title@instance:GhAQBO":"Recent Content","title@instance:bjQalH":"Recent Content","title@instance:1728316868378":"Posts & Replies"},"localOverride":false},"Conversation:conversation:817812":{"__typename":"Conversation","id":"conversation:817812","topic":{"__typename":"ForumTopicMessage","uid":817812},"lastPostingActivityTime":"2025-01-14T00:37:42.862-08:00","solved":false},"ForumTopicMessage:message:817812":{"__typename":"ForumTopicMessage","subject":"Can I Download a File from Dropbox API Without Full Path?","conversation":{"__ref":"Conversation:conversation:817812"},"id":"message:817812","revisionNum":1,"uid":817812,"depth":0,"board":{"__ref":"Forum:board:101000014"},"author":{"__typename":"User","uid":1898120,"login":"Jessejackson","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/m_assets/avatars/default/avatar-10.svg"}},"metrics":{"__typename":"MessageMetrics","views":3},"postTime":"2025-01-14T00:37:42.862-08:00","lastPublishTime":"2025-01-14T00:37:42.862-08:00","readOnly":false},"Conversation:conversation:817703":{"__typename":"Conversation","id":"conversation:817703","topic":{"__typename":"ForumTopicMessage","uid":817703},"lastPostingActivityTime":"2025-01-14T00:06:21.467-08:00","solved":false},"ForumTopicMessage:message:817703":{"__typename":"ForumTopicMessage","subject":"Dropbox OAuth2 Issue: Scope Parameter Handling","conversation":{"__ref":"Conversation:conversation:817703"},"id":"message:817703","revisionNum":1,"uid":817703,"depth":0,"board":{"__ref":"Forum:board:101000014"},"author":{"__typename":"User","uid":1898023,"login":"Vivek_Yadav","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/m_assets/avatars/default/avatar-12.svg"}},"metrics":{"__typename":"MessageMetrics","views":34},"postTime":"2025-01-13T11:35:11.008-08:00","lastPublishTime":"2025-01-13T11:35:11.008-08:00","readOnly":false},"Conversation:conversation:817639":{"__typename":"Conversation","id":"conversation:817639","topic":{"__typename":"ForumTopicMessage","uid":817639},"lastPostingActivityTime":"2025-01-13T10:41:47.000-08:00","solved":false},"ForumTopicMessage:message:817639":{"__typename":"ForumTopicMessage","subject":"Does Dropbox remove trailing slash at the end of an url?","conversation":{"__ref":"Conversation:conversation:817639"},"id":"message:817639","revisionNum":2,"uid":817639,"depth":0,"board":{"__ref":"Forum:board:101000014"},"author":{"__typename":"User","uid":1897970,"login":"Willo901","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/m_assets/avatars/default/avatar-8.svg"}},"metrics":{"__typename":"MessageMetrics","views":35},"postTime":"2025-01-13T06:11:48.014-08:00","lastPublishTime":"2025-01-13T06:28:27.819-08:00","readOnly":false},"Conversation:conversation:817344":{"__typename":"Conversation","id":"conversation:817344","topic":{"__typename":"ForumTopicMessage","uid":817344},"lastPostingActivityTime":"2025-01-10T13:59:20.975-08:00","solved":false},"ForumTopicMessage:message:817344":{"__typename":"ForumTopicMessage","subject":"DropboxAPI uploading small files","conversation":{"__ref":"Conversation:conversation:817344"},"id":"message:817344","revisionNum":2,"uid":817344,"depth":0,"board":{"__ref":"Forum:board:101000014"},"author":{"__typename":"User","uid":1897549,"login":"Alloshka","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/m_assets/avatars/default/avatar-12.svg"}},"metrics":{"__typename":"MessageMetrics","views":61},"postTime":"2025-01-10T04:35:29.141-08:00","lastPublishTime":"2025-01-10T05:15:23.709-08:00","readOnly":false},"Conversation:conversation:814314":{"__typename":"Conversation","id":"conversation:814314","topic":{"__typename":"ForumTopicMessage","uid":814314},"lastPostingActivityTime":"2025-01-10T08:06:10.181-08:00","solved":false},"ForumTopicMessage:message:814314":{"__typename":"ForumTopicMessage","subject":"Randomness issue coming from dropbox - Facing issue in Image Upload","conversation":{"__ref":"Conversation:conversation:814314"},"id":"message:814314","revisionNum":1,"uid":814314,"depth":0,"board":{"__ref":"Forum:board:101000014"},"author":{"__typename":"User","uid":1895071,"login":"Himanshu_gofynd","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/m_assets/avatars/default/avatar-4.svg"}},"metrics":{"__typename":"MessageMetrics","views":125},"postTime":"2024-12-22T23:07:42.388-08:00","lastPublishTime":"2024-12-22T23:07:42.388-08:00","readOnly":false},"Category:category:101001000":{"__typename":"Category","id":"category:101001000","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"entityType":"CATEGORY","displayId":"101001000","nodeType":"category","depth":2,"title":"Help","shortTitle":"Help"},"Idea:board:101002013":{"__typename":"Idea","id":"board:101002013","boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"ideaPolicies":{"__typename":"IdeaPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:101004000":{"__typename":"Category","id":"category:101004000","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:101003016":{"__typename":"Forum","id":"board:101003016","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:French":{"__typename":"Category","id":"category:French","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:German":{"__typename":"Category","id":"category:German","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Spanish":{"__typename":"Category","id":"category:Spanish","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Portuguese":{"__typename":"Category","id":"category:Portuguese","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Japanese":{"__typename":"Category","id":"category:Japanese","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:101007C1":{"__typename":"Forum","id":"board:101007C1","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"entityType":"FORUM","displayId":"101007C1","nodeType":"board","depth":3,"conversationStyle":"FORUM","title":"Dropbox tips & tricks","shortTitle":"Dropbox tips & tricks","parent":{"__ref":"Category:category:101007"},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"avatar":{"__ref":"AssociatedImage:{\"url\":\"https://www.dropboxforum.com/t5/s/mxpez29397/images/bi0yMjEtZWNtRTB1\"}"},"description":"Learn how to get the most out of Dropbox with other users like you.","eventPath":"category:101007/category:English/community:mxpez29397board:101007C1/"},"Forum:board:101001012":{"__typename":"Forum","id":"board:101001012","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:101001013":{"__typename":"Forum","id":"board:101001013","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:101001014":{"__typename":"Forum","id":"board:101001014","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"entityType":"FORUM","displayId":"101001014","nodeType":"board","depth":3,"conversationStyle":"FORUM","title":"Create, upload, and share","shortTitle":"Create, upload, and share","parent":{"__ref":"Category:category:101001000"},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"avatar":null,"description":"Find help to solve issues with creating, uploading, and sharing files and folders in Dropbox. Get support and advice from the Dropbox Community.","eventPath":"category:101001000/category:English/community:mxpez29397board:101001014/"},"Forum:board:101001015":{"__typename":"Forum","id":"board:101001015","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:101001016":{"__typename":"Forum","id":"board:101001016","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:101001017":{"__typename":"Forum","id":"board:101001017","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:101001018":{"__typename":"Forum","id":"board:101001018","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:101001019":{"__typename":"Forum","id":"board:101001019","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Forum:board:101001020":{"__typename":"Forum","id":"board:101001020","forumPolicies":{"__typename":"ForumPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"GroupHub:grouphub:Dropbox-Dash":{"__typename":"GroupHub","id":"grouphub:Dropbox-Dash","grouphubPolicies":{"__typename":"GroupHubPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"GroupHub:grouphub:Photography":{"__typename":"GroupHub","id":"grouphub:Photography","grouphubPolicies":{"__typename":"GroupHubPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"GroupHub:grouphub:Music":{"__typename":"GroupHub","id":"grouphub:Music","grouphubPolicies":{"__typename":"GroupHubPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:101010":{"__typename":"Category","id":"category:101010","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"GroupHub:grouphub:1007":{"__typename":"GroupHub","id":"grouphub:1007","grouphubPolicies":{"__typename":"GroupHubPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"GroupHub:grouphub:1010":{"__typename":"GroupHub","id":"grouphub:1010","grouphubPolicies":{"__typename":"GroupHubPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"GroupHub:grouphub:1009":{"__typename":"GroupHub","id":"grouphub:1009","grouphubPolicies":{"__typename":"GroupHubPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"GroupHub:grouphub:1012":{"__typename":"GroupHub","id":"grouphub:1012","grouphubPolicies":{"__typename":"GroupHubPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Rank:rank:44":{"__typename":"Rank","id":"rank:44","position":27,"name":"Helpful | Level 5","color":"333333","icon":null,"rankStyle":"TEXT"},"User:user:9176":{"__typename":"User","id":"user:9176","uid":9176,"login":"James S.5","biography":null,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2016-05-20T23:18:00.000-07:00","confirmEmailStatus":null,"registrationAccessLevel":null,"ssoRegistrationFields":[]},"deleted":false,"email":"","avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/m_assets/avatars/default/avatar-1.svg"},"rank":{"__ref":"Rank:rank:44"},"messagesCount":9,"kudosGivenCount":1,"kudosReceivedCount":23,"kudosWeight":1,"ssoId":null,"followersCount":null,"solutionsCount":2,"entityType":"USER","eventPath":"community:mxpez29397/user:9176"},"AssociatedImage:{\"url\":\"https://www.dropboxforum.com/t5/s/mxpez29397/images/bi0yMjEtZWNtRTB1\"}":{"__typename":"AssociatedImage","url":"https://www.dropboxforum.com/t5/s/mxpez29397/images/bi0yMjEtZWNtRTB1","mimeType":"image/svg+xml"},"ForumTopicMessage:message:721848":{"__typename":"ForumTopicMessage","uid":721848,"subject":"Android 14: Camera Uploads needs access to storage","id":"message:721848","revisionNum":4,"repliesCount":16,"author":{"__ref":"User:user:9176"},"depth":0,"hasGivenKudo":false,"board":{"__ref":"Forum:board:101007C1"},"conversation":{"__ref":"Conversation:conversation:721848"},"moderationData":{"__ref":"ModerationData:moderation_data:721848"},"postTime":"2023-10-16T12:44:59.914-07:00","lastPublishTime":"2023-10-16T13:22:39.287-07:00","readOnly":false,"metrics":{"__typename":"MessageMetrics","views":10796},"placeholder":false,"originalMessageForPlaceholder":null,"isEscalated":null,"entityType":"FORUM_TOPIC","eventPath":"category:101007/category:English/community:mxpez29397board:101007C1/message:721848"},"Conversation:conversation:721848":{"__typename":"Conversation","id":"conversation:721848","solved":true,"topic":{"__ref":"ForumTopicMessage:message:721848"},"lastPostingActivityTime":"2024-03-11T15:52:29.857-07:00","lastPostTime":"2024-03-11T15:52:29.857-07:00"},"ModerationData:moderation_data:721848":{"__typename":"ModerationData","id":"moderation_data:721848","status":"UNMODERATED","rejectReason":null},"RelatedContentMessage:RelatedContentMessage:721848":{"__typename":"RelatedContentMessage","id":"RelatedContentMessage:721848","relatedMessage":{"__ref":"ForumTopicMessage:message:721848"}},"Rank:rank:43":{"__typename":"Rank","id":"rank:43","position":26,"name":"Helpful | Level 6","color":"333333","icon":null,"rankStyle":"TEXT"},"User:user:541980":{"__typename":"User","id":"user:541980","uid":541980,"login":"MarioEM","biography":null,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2017-11-13T00:38:07.821-08:00","confirmEmailStatus":null,"registrationAccessLevel":null,"ssoRegistrationFields":[]},"deleted":false,"email":"","avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/m_assets/avatars/default/avatar-9.svg"},"rank":{"__ref":"Rank:rank:43"},"messagesCount":7,"kudosGivenCount":1,"kudosReceivedCount":0,"kudosWeight":1,"ssoId":null,"followersCount":null,"solutionsCount":1,"entityType":"USER","eventPath":"community:mxpez29397/user:541980"},"ForumTopicMessage:message:252329":{"__typename":"ForumTopicMessage","uid":252329,"subject":"simple Android example for APIv2 required","id":"message:252329","revisionNum":2,"repliesCount":5,"author":{"__ref":"User:user:541980"},"depth":0,"hasGivenKudo":false,"board":{"__ref":"Forum:board:101000014"},"conversation":{"__ref":"Conversation:conversation:252329"},"moderationData":{"__ref":"ModerationData:moderation_data:252329"},"postTime":"2017-11-13T01:02:52.862-08:00","lastPublishTime":"2019-05-29T02:17:24.099-07:00","readOnly":false,"metrics":{"__typename":"MessageMetrics","views":8490},"placeholder":false,"originalMessageForPlaceholder":null,"isEscalated":null,"entityType":"FORUM_TOPIC","eventPath":"category:101000041/category:101007/category:English/community:mxpez29397board:101000014/message:252329"},"Conversation:conversation:252329":{"__typename":"Conversation","id":"conversation:252329","solved":true,"topic":{"__ref":"ForumTopicMessage:message:252329"},"lastPostingActivityTime":"2019-05-29T02:17:24.099-07:00","lastPostTime":"2017-11-15T07:41:26.963-08:00"},"ModerationData:moderation_data:252329":{"__typename":"ModerationData","id":"moderation_data:252329","status":"APPROVED","rejectReason":null},"RelatedContentMessage:RelatedContentMessage:252329":{"__typename":"RelatedContentMessage","id":"RelatedContentMessage:252329","relatedMessage":{"__ref":"ForumTopicMessage:message:252329"}},"Rank:rank:47":{"__typename":"Rank","id":"rank:47","position":30,"name":"New member | Level 2","color":"333333","icon":null,"rankStyle":"TEXT"},"User:user:1402922":{"__typename":"User","id":"user:1402922","uid":1402922,"login":"strugglingstudent","biography":null,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2021-01-23T07:34:21.318-08:00","confirmEmailStatus":null,"registrationAccessLevel":null,"ssoRegistrationFields":[]},"deleted":false,"email":"","avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/m_assets/avatars/default/avatar-2.svg"},"rank":{"__ref":"Rank:rank:47"},"messagesCount":4,"kudosGivenCount":2,"kudosReceivedCount":0,"kudosWeight":1,"ssoId":null,"followersCount":null,"solutionsCount":0,"entityType":"USER","eventPath":"community:mxpez29397/user:1402922"},"AssociatedImage:{\"url\":\"https://www.dropboxforum.com/t5/s/mxpez29397/images/bi0xNDMtUnVwd2g3\"}":{"__typename":"AssociatedImage","url":"https://www.dropboxforum.com/t5/s/mxpez29397/images/bi0xNDMtUnVwd2g3","mimeType":"image/svg+xml"},"Forum:board:101000042":{"__typename":"Forum","id":"board:101000042","entityType":"FORUM","displayId":"101000042","nodeType":"board","depth":4,"conversationStyle":"FORUM","title":"Discuss Dropbox Developer & API","shortTitle":"Discuss Dropbox Developer & API","parent":{"__ref":"Category:category:101000041"},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"avatar":{"__ref":"AssociatedImage:{\"url\":\"https://www.dropboxforum.com/t5/s/mxpez29397/images/bi0xNDMtUnVwd2g3\"}"},"description":"Make connections with other developers","eventPath":"category:101000041/category:101007/category:English/community:mxpez29397board:101000042/"},"ForumTopicMessage:message:489776":{"__typename":"ForumTopicMessage","uid":489776,"subject":"Invalid_access_token with the android example app","id":"message:489776","revisionNum":2,"repliesCount":5,"author":{"__ref":"User:user:1402922"},"depth":0,"hasGivenKudo":false,"board":{"__ref":"Forum:board:101000042"},"conversation":{"__ref":"Conversation:conversation:489776"},"moderationData":{"__ref":"ModerationData:moderation_data:489776"},"postTime":"2021-01-23T07:45:51.943-08:00","lastPublishTime":"2021-01-26T06:14:07.583-08:00","readOnly":false,"metrics":{"__typename":"MessageMetrics","views":2519},"placeholder":false,"originalMessageForPlaceholder":null,"isEscalated":null,"entityType":"FORUM_TOPIC","eventPath":"category:101000041/category:101007/category:English/community:mxpez29397board:101000042/message:489776"},"Conversation:conversation:489776":{"__typename":"Conversation","id":"conversation:489776","solved":true,"topic":{"__ref":"ForumTopicMessage:message:489776"},"lastPostingActivityTime":"2021-01-26T06:14:07.583-08:00","lastPostTime":"2021-01-23T11:27:06.846-08:00"},"ModerationData:moderation_data:489776":{"__typename":"ModerationData","id":"moderation_data:489776","status":"APPROVED","rejectReason":null},"RelatedContentMessage:RelatedContentMessage:489776":{"__typename":"RelatedContentMessage","id":"RelatedContentMessage:489776","relatedMessage":{"__ref":"ForumTopicMessage:message:489776"}},"User:user:1589235":{"__typename":"User","id":"user:1589235","uid":1589235,"login":"davidbsp","biography":null,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2022-11-06T17:11:24.375-08:00","confirmEmailStatus":null,"registrationAccessLevel":null,"ssoRegistrationFields":[]},"deleted":false,"email":"","avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/m_assets/avatars/default/avatar-2.svg"},"rank":{"__ref":"Rank:rank:44"},"messagesCount":3,"kudosGivenCount":2,"kudosReceivedCount":1,"kudosWeight":1,"ssoId":null,"followersCount":null,"solutionsCount":1,"entityType":"USER","eventPath":"community:mxpez29397/user:1589235"},"ForumTopicMessage:message:726492":{"__typename":"ForumTopicMessage","uid":726492,"subject":"Scanned Document as PDF just does not upload on Android App (Samsung smartphone)","id":"message:726492","revisionNum":3,"repliesCount":8,"author":{"__ref":"User:user:1589235"},"depth":0,"hasGivenKudo":false,"board":{"__ref":"Forum:board:101001014"},"conversation":{"__ref":"Conversation:conversation:726492"},"moderationData":{"__ref":"ModerationData:moderation_data:726492"},"postTime":"2023-11-02T10:04:13.983-07:00","lastPublishTime":"2023-11-02T10:51:14.430-07:00","readOnly":false,"metrics":{"__typename":"MessageMetrics","views":13263},"placeholder":false,"originalMessageForPlaceholder":null,"isEscalated":null,"entityType":"FORUM_TOPIC","eventPath":"category:101001000/category:English/community:mxpez29397board:101001014/message:726492"},"Conversation:conversation:726492":{"__typename":"Conversation","id":"conversation:726492","solved":true,"topic":{"__ref":"ForumTopicMessage:message:726492"},"lastPostingActivityTime":"2023-11-03T05:31:17.952-07:00","lastPostTime":"2023-11-03T05:31:17.952-07:00"},"ModerationData:moderation_data:726492":{"__typename":"ModerationData","id":"moderation_data:726492","status":"UNMODERATED","rejectReason":null},"RelatedContentMessage:RelatedContentMessage:726492":{"__typename":"RelatedContentMessage","id":"RelatedContentMessage:726492","relatedMessage":{"__ref":"ForumTopicMessage:message:726492"}},"Rank:rank:45":{"__typename":"Rank","id":"rank:45","position":28,"name":"Explorer | Level 4","color":"333333","icon":null,"rankStyle":"TEXT"},"User:user:1770682":{"__typename":"User","id":"user:1770682","uid":1770682,"login":"Ghost Mjrm","biography":null,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2023-11-23T04:38:14.172-08:00","confirmEmailStatus":null,"registrationAccessLevel":null,"ssoRegistrationFields":[]},"deleted":false,"email":"","avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/m_assets/avatars/default/avatar-8.svg"},"rank":{"__ref":"Rank:rank:45"},"messagesCount":35,"kudosGivenCount":2,"kudosReceivedCount":1,"kudosWeight":1,"ssoId":null,"followersCount":null,"solutionsCount":0,"entityType":"USER","eventPath":"community:mxpez29397/user:1770682"},"ForumTopicMessage:message:732039":{"__typename":"ForumTopicMessage","uid":732039,"subject":"my android app not uploading photo directly to Dropbox app folder using API","id":"message:732039","revisionNum":1,"repliesCount":16,"author":{"__ref":"User:user:1770682"},"depth":0,"hasGivenKudo":false,"board":{"__ref":"Forum:board:101000014"},"conversation":{"__ref":"Conversation:conversation:732039"},"moderationData":{"__ref":"ModerationData:moderation_data:732039"},"postTime":"2023-11-23T04:55:07.743-08:00","lastPublishTime":"2023-11-23T04:55:07.743-08:00","readOnly":false,"metrics":{"__typename":"MessageMetrics","views":11413},"placeholder":false,"originalMessageForPlaceholder":null,"isEscalated":null,"entityType":"FORUM_TOPIC","eventPath":"category:101000041/category:101007/category:English/community:mxpez29397board:101000014/message:732039"},"Conversation:conversation:732039":{"__typename":"Conversation","id":"conversation:732039","solved":true,"topic":{"__ref":"ForumTopicMessage:message:732039"},"lastPostingActivityTime":"2023-11-28T02:13:12.525-08:00","lastPostTime":"2023-11-28T02:13:12.525-08:00"},"ModerationData:moderation_data:732039":{"__typename":"ModerationData","id":"moderation_data:732039","status":"APPROVED","rejectReason":null},"RelatedContentMessage:RelatedContentMessage:732039":{"__typename":"RelatedContentMessage","id":"RelatedContentMessage:732039","relatedMessage":{"__ref":"ForumTopicMessage:message:732039"}},"CachedAsset:text:en_US-components/community/Navbar-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/community/Navbar-1734449632000","value":{"1007":"Business Team Members","101007":"Discover","101010":"Groups","101000041":"Developer & API","101001000":"Help","101001012":"View, download, and export","101001013":"Delete, edit, and organize","101001014":"Create, upload, and share","101001015":"Storage Space","101001016":"Apps and Installations","101001017":"Integrations","101001018":"Plans and Subscriptions","101001019":"Settings and Preferences","101001020":"Security and Permissions","101002013":"Ideas","101003016":"Desktop client builds","102001000":"Poser une question","community":"Community Home","inbox":"Inbox","manageContent":"Manage Content","tos":"Terms of Service","forgotPassword":"Forgot Password","themeEditor":"Theme Editor","edit":"Edit Navigation Bar","skipContent":"Skip to content","migrated-link-9":"日本語","external-1":"Languages","german":"Deutsch","102009-g1":"Nouvel utilisateur","migrated-link-7":"Español","migrated-link-8":"Português","1007-link":"Business Team Members","migrated-link-1":"Discover","migrated-link-2":"Ideas","migrated-link-0":"Help","migrated-link-5":"Français","migrated-link-6":"Deutsch","dropbox-ai":"Dropbox AI","migrated-link-3":"Groups","migrated-link-4":"🌎","photographers":"Photographers","group-hub-test":"Group Hub Test","1010-link":"Dropbox for Beginners","japanese":"日本語","english":"English","multiple-sections-group":"Multiple Sections Group","french":"Français","music-link":"Musicians","plans-and-subscriptions":"Plans and Subscriptions","tips-and-tricks":"Tips & Tricks","dropbox-dash-link":"Dropbox Dash","dropboxfor-mac-o-s12-link":"Dropbox for macOS","delete-edit-organize":"Delete, edit, and organize","mxpez29397":"Languages","secret-hidden-group":"Secret Hidden Group","external":"↗ Learn","view-download-and-export":"View, download, and export","integrations":"Integrations","security-and-permissions-1":"Settings and Preferences","1012-link":"Dropbox/Microsoft Co-Authoring Beta","musicians":"Musicians","security-and-permissions":"Security and Permissions","do-more-with-dropbox":"Do more with Dropbox","1009-link":"Dropbox Replay","create-upload-share":"Create, upload, and share","migrated-link-12":"↗ Help Center","developer-and-api":"Developer & API","migrated-link-13":"↗ Contact Support","closed-group-test":"Closed Group Test","closed-gourp":"Closed Group","dropbox-dash-beta":"Dropbox Dash Beta","portuguese":"Português","storage-space":"Storage Space","spanish":"Español","test-open-group":"Open Group","apps-and-installations":"Apps and Installations","migrated-link-10":"About the Community","test-group":"Test Group","dropboxfor-mac-o-s12":"Dropbox for MacOS","migrated-link-11":"↗ Dropbox","intl":"Languages","desktop-client-builds":"Desktop client builds","dropbox-for-macos":"Dropbox for macOS","photography-link":"Photographers","super-user-link":"Super User","101007-c1":"Tips & tricks"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarHamburgerDropdown-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarHamburgerDropdown-1734449632000","value":{"hamburgerLabel":"Side Menu"},"localOverride":false},"CachedAsset:text:en_US-components/community/BrandLogo-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/community/BrandLogo-1734449632000","value":{"logoAlt":"Khoros","themeLogoAlt":"Brand Logo"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarTextLinks-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarTextLinks-1734449632000","value":{"more":"More"},"localOverride":false},"CachedAsset:text:en_US-components/search/SpotlightSearchIcon-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/search/SpotlightSearchIcon-1734449632000","value":{"search":"Search"},"localOverride":false},"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/authentication/AuthenticationLink-1734449632000","value":{"title.login":"Log in","title.registration":"Sign up","title.forgotPassword":"Forgot Password","title.multiAuthLogin":"Log in"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeLink-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLink-1734449632000","value":{"place":"Place {name}"},"localOverride":false},"CachedAsset:text:en_US-components/customComponent/CustomComponent-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/customComponent/CustomComponent-1734449632000","value":{"errorMessage":"Error rendering component id: {customComponentId}","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewStandard-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewStandard-1734449632000","value":{"anonymous":"Anonymous","author":"{messageAuthorLogin}","authorBy":"{messageAuthorLogin}","board":"{messageBoardTitle}","replyToUser":" to {parentAuthor}","showMoreReplies":"Show More","replyText":"Reply","repliesText":"Replies","markedAsSolved":"Marked as Solved","movedMessagePlaceholder.BLOG":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.TKB":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.FORUM":"{count, plural, =0 {This reply has been} other {These replies have been} }","movedMessagePlaceholder.IDEA":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.OCCASION":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholderUrlText":"moved.","messageStatus":"Status: ","statusChanged":"Status changed: {previousStatus} to {currentStatus}","statusAdded":"Status added: {status}","statusRemoved":"Status removed: {status}","labelExpand":"expand replies","labelCollapse":"collapse replies","unhelpfulReason.reason1":"Content is outdated","unhelpfulReason.reason2":"Article is missing information","unhelpfulReason.reason3":"Content is for a different Product","unhelpfulReason.reason4":"Doesn't match what I was searching for"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageDeepLink-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageDeepLink-1734449632000","value":{"viewFullDiscussion@board:FORUM":"View Full Discussion ({repliesCount} Replies)","viewFullDiscussion@board:BLOG":"View Full Discussion ({repliesCount} Comments)","viewFullDiscussion@board:TKB":"View Full Discussion ({repliesCount} Comments)","viewFullDiscussion@board:IDEA":"View Full Discussion ({repliesCount} Comments)","viewFullDiscussion@board:OCCASION":"View Full Discussion ({repliesCount} Comments)","showParents@board:FORUM":"Show Parent Replies","showParents@board:BLOG":"Show Parent Comments","showParents@board:TKB":"Show Parent Comments","showParents@board:IDEA":"Show Parent Comments","showParents@board:OCCASION":"Show Parent Comments"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyCallToAction-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyCallToAction-1734449632000","value":{"leaveReply":"Leave a reply...","leaveReply@board:BLOG@message:root":"Leave a comment...","leaveReply@board:TKB@message:root":"Leave a comment...","leaveReply@board:IDEA@message:root":"Leave a comment...","leaveReply@board:OCCASION@message:root":"Leave a comment...","repliesTurnedOff.FORUM":"Replies are turned off for this topic","repliesTurnedOff.BLOG":"Comments are turned off for this topic","repliesTurnedOff.TKB":"Comments are turned off for this topic","repliesTurnedOff.IDEA":"Comments are turned off for this topic","repliesTurnedOff.OCCASION":"Comments are turned off for this topic","infoText":"Stop poking me!"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/QueryHandler-1734449632000","value":{"title":"Query Handler"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarDropdownToggle-1734449632000","value":{"ariaLabelClosed":"Press the down arrow to open the menu"},"localOverride":false},"CachedAsset:text:en_US-components/messages/EscalatedMessageBanner-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/EscalatedMessageBanner-1734449632000","value":{"escalationMessage":"Escalated to Salesforce by {username} on {date}","viewDetails":"View Details","modalTitle":"Case Details","escalatedBy":"Escalated by: ","escalatedOn":"Escalated on: ","caseNumber":"Case Number: ","status":"Status: ","lastUpdateDate":"Last Update: ","automaticEscalation":"automatic escalation","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1734449632000","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserRank-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserRank-1734449632000","value":{"rankName":"{rankName}","userRank":"Author rank {rankName}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageTime-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTime-1734449632000","value":{"postTime":"Published: {time}","lastPublishTime":"Last Update: {time}","conversation.lastPostingActivityTime":"Last posting activity time: {time}","conversation.lastPostTime":"Last post time: {time}","moderationData.rejectTime":"Rejected time: {time}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1734449632000","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBody-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1734449632000","value":{"showMessageBody":"Show More","mentionsErrorTitle":"{mentionsType, select, board {Board} user {User} message {Message} other {}} No Longer Available","mentionsErrorMessage":"The {mentionsType} you are trying to view has been removed from the community.","videoProcessing":"Video is being processed. Please try again in a few minutes.","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageCustomFields-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageCustomFields-1734449632000","value":{"CustomField.default.label":"Value of {name}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyButton-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyButton-1734449632000","value":{"repliesCount":"{count}","title":"Reply","title@board:BLOG@message:root":"Comment","title@board:TKB@message:root":"Comment","title@board:IDEA@message:root":"Comment","title@board:OCCASION@message:root":"Comment"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeView/NodeViewCard-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeView/NodeViewCard-1734449632000","value":{"title":"{nodeTitle} ","creationDate":"Created: {creationDate}","ownedBy":"Owned by: {owners}{text}","showOwnerListText":", and {ownersCount} more","unreadCount":"{count} unread","nodeViewDrawerBtn":"Node view drawer for {place}","drawerActionTooltip":"Show category children"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewInline-1734449632000","value":{"bylineAuthor":"{bylineAuthor}","bylineBoard":"{bylineBoard}","anonymous":"Anonymous","place":"Place {bylineBoard}","gotoParent":"Go to parent {name}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Pager/PagerLoadMore-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Pager/PagerLoadMore-1734449632000","value":{"loadMore":"Show More"},"localOverride":false},"AssociatedImage:{\"url\":\"https://www.dropboxforum.com/t5/s/mxpez29397/images/cmstMjYtZVNRZzFo\"}":{"__typename":"AssociatedImage","url":"https://www.dropboxforum.com/t5/s/mxpez29397/images/cmstMjYtZVNRZzFo","height":17,"width":20,"mimeType":"image/png"},"Rank:rank:26":{"__typename":"Rank","id":"rank:26","position":5,"name":"Dropbox Staff","color":"0061FE","icon":{"__ref":"AssociatedImage:{\"url\":\"https://www.dropboxforum.com/t5/s/mxpez29397/images/cmstMjYtZVNRZzFo\"}"},"rankStyle":"TEXT"},"User:user:10":{"__typename":"User","id":"user:10","uid":10,"login":"Greg-DB","deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/images/dS0xMC01NjQ2aTEzQjZFMUNBREJENDE1Q0Y"},"rank":{"__ref":"Rank:rank:26"},"email":"","messagesCount":12620,"biography":null,"topicsCount":16,"kudosReceivedCount":2524,"kudosGivenCount":1,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2014-12-03T16:28:00.000-08:00","confirmEmailStatus":null},"followersCount":null,"solutionsCount":1781},"ModerationData:moderation_data:786534":{"__typename":"ModerationData","id":"moderation_data:786534","status":"APPROVED","rejectReason":null,"isReportedAbuse":false,"rejectUser":null,"rejectTime":null,"rejectActorType":null},"Revision:revision:786534_2":{"__typename":"Revision","id":"revision:786534_2","lastEditTime":"2024-08-01T12:51:23.323-07:00"},"QueryVariables:ReplyList:message:786534:2":{"__typename":"QueryVariables","id":"ReplyList:message:786534:2","value":{"id":"message:786534","first":10,"sorts":{"postTime":{"direction":"ASC"}},"repliesFirst":3,"repliesFirstDepthThree":1,"repliesSorts":{"postTime":{"direction":"ASC"}},"useAvatar":true,"useAuthorLogin":true,"useAuthorRank":true,"useBody":true,"useKudosCount":true,"useTimeToRead":false,"useMedia":false,"useReadOnlyIcon":false,"useRepliesCount":true,"useSearchSnippet":false,"useAcceptedSolutionButton":true,"useSolvedBadge":false,"useAttachments":false,"attachmentsFirst":5,"useTags":false,"useNodeAncestors":false,"useUserHoverCard":true,"useNodeHoverCard":false,"useModerationStatus":true,"usePreviewSubjectModal":false,"useMessageStatus":true}},"ROOT_MUTATION":{"__typename":"Mutation"},"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1734449632000","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/ranks/UserRankLabel-1734449632000","value":{"altTitle":"Icon for {rankName} rank"},"localOverride":false},"CachedAsset:text:en_US-components/messages/AcceptedSolutionButton-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/AcceptedSolutionButton-1734449632000","value":{"accept":"Mark as Solution","accepted":"Marked as Solution","errorHeader":"Error!","errorAdd":"There was an error marking as solution.","errorRemove":"There was an error unmarking as solution.","solved":"Solved"},"localOverride":false},"CachedAsset:text:en_US-components/messages/ThreadedReplyList-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/ThreadedReplyList-1734449632000","value":{"title":"{count, plural, one{# Reply} other{# Replies}}","title@board:BLOG":"{count, plural, one{# Comment} other{# Comments}}","title@board:TKB":"{count, plural, one{# Comment} other{# Comments}}","title@board:IDEA":"{count, plural, one{# Comment} other{# Comments}}","title@board:OCCASION":"{count, plural, one{# Comment} other{# Comments}}","noRepliesTitle":"No Replies","noRepliesTitle@board:BLOG":"No Comments","noRepliesTitle@board:TKB":"No Comments","noRepliesTitle@board:IDEA":"No Comments","noRepliesTitle@board:OCCASION":"No Comments","noRepliesDescription":"Be the first to reply","noRepliesDescription@board:BLOG":"Be the first to comment","noRepliesDescription@board:TKB":"Be the first to comment","noRepliesDescription@board:IDEA":"Be the first to comment","noRepliesDescription@board:OCCASION":"Be the first to comment","messageReadOnlyAlert:BLOG":"Comments have been turned off for this post","messageReadOnlyAlert:TKB":"Comments have been turned off for this article","messageReadOnlyAlert:IDEA":"Comments have been turned off for this idea","messageReadOnlyAlert:FORUM":"Replies have been turned off for this discussion","messageReadOnlyAlert:OCCASION":"Comments have been turned off for this event"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeAvatar-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeAvatar-1734449632000","value":{"altTitle":"Node avatar for {nodeTitle}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeDescription-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeDescription-1734449632000","value":{"description":"{description}"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeTopicsCount-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeTopicsCount-1734449632000","value":{"topicCount":"{count}","topicCountWithNeutralLabel@board:OCCASION":"{count, plural, one{# Event} other{# Events}}","topicCountWithNeutralLabel":"{count, plural, one{# Post} other{# Posts}}","topicCount@board:FORUM":"{count, plural, one{# Post} other{# Posts}}","topicCount@board:BLOG":"{count, plural, one{# Post} other{# Posts}}","topicCount@board:CONTEST":"{count, plural, one{# Entry} other{# Entries}}","topicCount@board:GROUP":"{count, plural, one{# Topic} other{# Topics}}","topicCount@board:IDEA":"{count, plural, one{# Idea} other{# Ideas}}","topicCount@board:QANDA":"{count, plural, one{# Question} other{# Questions}}","topicCount@board:TKB":"{count, plural, one{# Article} other{# Articles}}","topicCount@board:OCCASION":"{count, plural, one{# Event} other{# Events}}","title":"{count, plural,one {Post} other{Posts}}"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeLatestActivityTime-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLatestActivityTime-1734449632000","value":{"title":"Latest Activity: {latestActivityTime}","updatedAt":"Updated {latestActivityTime}","noActivity":"No activity yet"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeFollowersCount-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeFollowersCount-1734449632000","value":{"followersCount":"{count} Following"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1734449632000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeIcon-1734449632000","value":{"contentType":"Content Type {style, select, FORUM {Forum} BLOG {Blog} TKB {Knowledge Base} IDEA {Ideas} OCCASION {Events} other {}} icon"},"localOverride":false},"ModerationData:moderation_data:786727":{"__typename":"ModerationData","id":"moderation_data:786727","status":"APPROVED","rejectReason":null,"isReportedAbuse":false,"rejectUser":null,"rejectTime":null,"rejectActorType":null},"Rank:rank:29":{"__typename":"Rank","id":"rank:29","position":12,"name":"Legendary | Level 20","color":"F9A34B","icon":null,"rankStyle":"TEXT"},"User:user:422790":{"__typename":"User","id":"user:422790","uid":422790,"login":"Здравко","biography":null,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2017-06-22T04:51:57.857-07:00","confirmEmailStatus":null,"registrationAccessLevel":null,"ssoRegistrationFields":[]},"deleted":false,"email":"","avatar":{"__typename":"UserAvatar","url":"https://www.dropboxforum.com/t5/s/mxpez29397/images/dS00MjI3OTAtNjIzaTA5MTYzODM3NDQ3OTg4ODY"},"rank":{"__ref":"Rank:rank:29"},"messagesCount":4522,"kudosGivenCount":157,"kudosReceivedCount":1021,"kudosWeight":1,"ssoId":null,"followersCount":null,"solutionsCount":470,"entityType":"USER","eventPath":"community:mxpez29397/user:422790"},"ForumReplyMessage:message:786727":{"__typename":"ForumReplyMessage","uid":786727,"id":"message:786727","revisionNum":1,"author":{"__ref":"User:user:1530029"},"readOnly":false,"repliesCount":2,"depth":2,"hasGivenKudo":false,"subscribed":false,"board":{"__ref":"Forum:board:101000014"},"parent":{"__ref":"ForumReplyMessage:message:786534"},"conversation":{"__ref":"Conversation:conversation:786437"},"subject":"Re: Android batch upload example?","moderationData":{"__ref":"ModerationData:moderation_data:786727"},"body":"Thank you very much for the pointers. I think I've nearly pieced everything together, just not sure how to finish the batch:
I'm not sure what Im supposed to do with this. Do I somehow need to use this result in combination with uploadSessionFinishBatchCheck to check whether the result is complete, or do I need to keep polling the result entries until they complete, or do I just check the result entries immediately (i.e. is uploadSessionFinishBatchV2 a sync method which only returns once the batch finishing is complete ?) It's a little unclear.
Once I get this working I will post my code for others to use as an example for android.","body@stripHtml({\"removeProcessingText\":false,\"removeSpoilerMarkup\":false,\"removeTocMarkup\":false,\"truncateLength\":200})@stringLength":"203","kudosSumWeight":0,"postTime":"2024-08-02T10:12:03.974-07:00","lastPublishTime":"2024-08-02T10:12:03.974-07:00","metrics":{"__typename":"MessageMetrics","views":530},"visibilityScope":"PUBLIC","placeholder":false,"originalMessageForPlaceholder":null,"isEscalated":null,"solution":false,"entityType":"FORUM_REPLY","eventPath":"category:101000041/category:101007/category:English/community:mxpez29397board:101000014/message:786437/message:786727","replies":{"__typename":"MessageConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[{"__typename":"MessageEdge","cursor":"MjQuMTF8Mi4xfGl8M3w1MjoxfGludCw3ODY3MzEsNzg2NzMx","node":{"__ref":"ForumReplyMessage:message:786731"}}]},"customFields":[],"attachments":{"__typename":"AttachmentConnection","edges":[],"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}}},"ModerationData:moderation_data:786731":{"__typename":"ModerationData","id":"moderation_data:786731","status":"APPROVED","rejectReason":null,"isReportedAbuse":false,"rejectUser":null,"rejectTime":null,"rejectActorType":null},"ForumReplyMessage:message:786731":{"__typename":"ForumReplyMessage","uid":786731,"id":"message:786731","revisionNum":1,"author":{"__ref":"User:user:422790"},"readOnly":false,"repliesCount":1,"depth":3,"hasGivenKudo":false,"subscribed":false,"board":{"__ref":"Forum:board:101000014"},"parent":{"__ref":"ForumReplyMessage:message:786727"},"conversation":{"__ref":"Conversation:conversation:786437"},"subject":"Re: Android batch upload example?","moderationData":{"__ref":"ModerationData:moderation_data:786731"},"body":"
jimbobbles wrote: ... (i.e. is uploadSessionFinishBatchV2 a sync method which only returns once the batch finishing is complete ?) ...
jimbobbles, You're correct - version 2 of that method (and API call accordingly) is sync method. The deprecated version 1 can be sync or async - somethin that need to be checked and traced using the check accordingly (something you don't need to consider).
You need to check the success of all returned entries though. You can take a look here or here.
Thank youЗдравко and Greg-DB I think I have this working now, thanks for the pointers. Here's my code, in case this is useful for anyone else attempting to do this. I'm using Flutter so the code is littered with my own error handling classes which I can serialize and pass back to dart, but it should be a decent starting template for others. It's not fully tested, and also I'm new to Kotlin coroutines so I'm not sure I'm using coroutines / async etc. correctly!
import com.dropbox.core.InvalidAccessTokenException\nimport com.dropbox.core.NetworkIOException\nimport com.dropbox.core.RetryException\nimport com.dropbox.core.v2.DbxClientV2\nimport com.dropbox.core.v2.files.CommitInfo\nimport com.dropbox.core.v2.files.UploadSessionCursor\nimport com.dropbox.core.v2.files.UploadSessionFinishArg\nimport com.dropbox.core.v2.files.UploadSessionFinishErrorException\nimport com.dropbox.core.v2.files.UploadSessionType\nimport com.dropbox.core.v2.files.WriteError\nimport com.dropbox.core.v2.files.WriteMode\nimport kotlinx.coroutines.Deferred\nimport timber.log.Timber\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.withContext\nimport java.io.File\nimport java.io.InputStream\n\n\nclass DropboxWriter {\n\n companion object {\n private const val BYTES_IN_MEGABYTE = 1048576\n // Must be multiple of 4MB\n // Larger chunk sizes will upload large files faster and usually with fewer network requests\n // but if a chunk upload fails the whole chunk must be re-uploaded\n private const val CHUNKED_UPLOAD_CHUNK_SIZE: Long = 4L * BYTES_IN_MEGABYTE\n // How many times to retry upload (with exponential time backoff) before returning with failure\n private const val MAX_RETRY_ATTEMPTS: Int = 5\n }\n\n suspend fun writeFilesToDropbox(\n credentialJsonString: String,\n filePaths: List<String>,\n remoteFolderPath: String\n MethodChannelResult<Unit?> = withContext(Dispatchers.IO) {\n assert(filePaths.size <= 1000) { \"Max batch size is 1000\" }\n Timber.i(\"Starting batch of ${filePaths.size} upload sessions\")\n\n try {\n val client = DropboxClientFactory.getAuthenticatedClient(credentialJsonString)\n\n // Tell Dropbox a batch will be uploaded with the given number of files\n val uploadSessionStartBatchResult = client.files().uploadSessionStartBatch(\n filePaths.size.toLong(), UploadSessionType.CONCURRENT)\n\n // Upload each file in the batch\n val uploadResults: List<MethodChannelResult<UploadSessionFinishArg>> = filePaths.mapIndexed { index, filePath ->\n async {\n uploadSessionAppend(client, uploadSessionStartBatchResult.sessionIds[index], filePath, remoteFolderPath)\n }\n }.map {it.await()}\n\n // If there were any failures in uploading\n val failureOrNull = uploadResults.firstOrNull { result -> result is MethodChannelResult.Failure }\n\n if(failureOrNull != null) {\n // Return the first failure\n return@withContext MethodChannelResult.Failure<Unit?>((failureOrNull as MethodChannelResult.Failure).error)\n }\n else {\n // Else we can now commit the batch using the UploadSessionFinishArgs\n val finishBatchResult = client.files().uploadSessionFinishBatchV2(\n uploadResults.map{ result -> (result as MethodChannelResult.Success).value }\n )\n\n // If there were any failures in committing the batch\n val firstCommitFailureOrNull = finishBatchResult.entries.firstOrNull { entry -> entry.isFailure }\n\n if(firstCommitFailureOrNull != null) {\n if(firstCommitFailureOrNull.failureValue.isPath\n && firstCommitFailureOrNull.failureValue.pathValue is WriteError) {\n\n // Catch some common errors and return handled error codes\n if((firstCommitFailureOrNull.failureValue.pathValue as WriteError) == WriteError.INSUFFICIENT_SPACE) {\n return@withContext MethodChannelResult.Failure(\n MethodChannelError(BackupErrorCode.INSUFFICIENT_SPACE,\"Insufficient space\")\n )\n }\n else if((firstCommitFailureOrNull.failureValue.pathValue as WriteError) == WriteError.NO_WRITE_PERMISSION) {\n return@withContext MethodChannelResult.Failure(\n MethodChannelError(BackupErrorCode.PERMISSIONS,\"No write permission\")\n )\n }\n }\n // Else return the first failure\n return@withContext MethodChannelResult.Failure<Unit?>(\n MethodChannelError(\n BackupErrorCode.UNKNOWN,\n firstCommitFailureOrNull.failureValue.toString())\n )\n }\n else {\n // Upload has succeeded\n return@withContext MethodChannelResult.Success(null)\n }\n }\n }\n catch (e: Throwable) {\n return@withContext when (e) {\n is NetworkIOException -> {\n MethodChannelResult.Failure(\n MethodChannelError(BackupErrorCode.OFFLINE,\"Can't reach Dropbox\")\n )\n }\n is InvalidAccessTokenException -> {\n // Gets thrown when the access token you're using to make API calls is invalid.\n // A more typical situation is that your access token was valid, but the user has since\n // \"unlinked\" your application via the Dropbox website (http://www.dropbox.com/account#applications ).\n // When a user unlinks your application, your access tokens for that user become invalid.\n // You can re-run the authorization process to obtain a new access token.\n MethodChannelResult.Failure(\n MethodChannelError(\n BackupErrorCode.AUTHENTICATION_FAILED,\n e.message ?: \"Access token was invalid\",\n e.stackTraceToString())\n )\n }\n else -> {\n MethodChannelResult.Failure(\n MethodChannelError(\n BackupErrorCode.UNKNOWN,\n e.message ?: \"Unknown error writing to dropbox\",\n e.stackTraceToString())\n )\n }\n }\n }\n }\n\n private suspend fun uploadSessionAppend(client: DbxClientV2, sessionId: String,\n filePath: String, remoteFolderPath: String): MethodChannelResult<UploadSessionFinishArg> = withContext(Dispatchers.IO) {\n\n Timber.i(\"Using upload session with ID '${sessionId}' for file '${filePath}'\")\n val file = File(filePath)\n if(file.exists()) {\n\n val remotePath = \"/$remoteFolderPath/${file.name}\"\n\n file.inputStream().buffered().use { bufferedInputStream ->\n\n val appendTasks: ArrayList<Deferred<Unit>> = arrayListOf()\n val sizeOfFileInBytes = file.length()\n var cursor: UploadSessionCursor? = null\n\n if(sizeOfFileInBytes > 0L) {\n var totalNumberOfBytesRead = 0L\n\n while(totalNumberOfBytesRead < sizeOfFileInBytes) {\n cursor = UploadSessionCursor(sessionId, totalNumberOfBytesRead)\n totalNumberOfBytesRead += CHUNKED_UPLOAD_CHUNK_SIZE\n val close = totalNumberOfBytesRead >= sizeOfFileInBytes\n\n appendTasks.add(\n async {createAppendChunkTask(\n client, bufferedInputStream, cursor!!, CHUNKED_UPLOAD_CHUNK_SIZE, sizeOfFileInBytes, close)\n }\n )\n }\n\n }\n else {\n // For empty files, just call append once to close the upload session.\n cursor = UploadSessionCursor(sessionId, 0L)\n appendTasks.add(\n async {\n createAppendChunkTask(\n client,\n bufferedInputStream,\n cursor,\n chunkSize = 0,\n sizeOfFileInBytes,\n close = true\n )\n })\n }\n\n try {\n awaitAll(*appendTasks.toTypedArray())\n\n return@withContext MethodChannelResult.Success(\n UploadSessionFinishArg(cursor!!, CommitInfo(\n remotePath,\n WriteMode.OVERWRITE,\n false, // autorename\n null, // clientModified date\n // Normally, users are made aware of any file modifications in their\n // Dropbox account via notifications in the client software. If true,\n // this tells the clients that this modification shouldn't result in a user notification.\n false, // mute\n // List of custom properties to add to file\n null, // propertyGroups\n // Be more strict about how each WriteMode detects conflict. For example, always return a conflict error when getMode() = WriteMode.getUpdateValue() and the given \"rev\" doesn't match the existing file's \"rev\", even if the existing file has been deleted. This also forces a conflict even when the target path refers to a file with identical contents\n false // strictConflict\n ))\n )\n }\n catch (e: FailedAfterMaxRetryAttemptsException) {\n return@withContext MethodChannelResult.Failure(\n MethodChannelError(\n BackupErrorCode.OFFLINE,\n e.message!!\n )\n )\n }\n catch (e: NetworkIOException) {\n return@withContext MethodChannelResult.Failure(\n MethodChannelError(BackupErrorCode.OFFLINE,\"Can't reach Dropbox\")\n )\n }\n catch (e: Exception) {\n return@withContext MethodChannelResult.Failure(\n MethodChannelError(\n BackupErrorCode.UNKNOWN,\n e.message ?: \"Unknown error writing to dropbox\",\n e.stackTraceToString())\n )\n }\n }\n }\n else {\n return@withContext MethodChannelResult.Failure(\n MethodChannelError(\n BackupErrorCode.UNKNOWN,\n \"Error writing to dropbox: file $filePath does not exist\"))\n }\n }\n\n\n private suspend fun createAppendChunkTask(\n client: DbxClientV2,\n inputStream: InputStream,\n cursor: UploadSessionCursor,\n chunkSize: Long,\n sizeOfFileInBytes: Long,\n close: Boolean\n ) {\n var mutableCursor = cursor\n var mutableClose = close\n\n for(i in 0..MAX_RETRY_ATTEMPTS) {\n // Try to upload the chunk\n val result = appendChunkTask(client, inputStream, mutableCursor, chunkSize, mutableClose)\n when(result.type) {\n AppendResult.ResultType.Success -> {\n return\n }\n\n // If it fails with a result type of Retry, retry after waiting\n AppendResult.ResultType.Retry -> {\n // Wait for the specified amount of time\n delay(result.backoffMillis!!)\n // and try again next time around the loop\n }\n\n // If it fails with a result type of RetryWithCorrectedOffset\n AppendResult.ResultType.RetryWithCorrectedOffset -> {\n // Correct the cursor position\n mutableCursor = UploadSessionCursor(cursor.sessionId, result.correctedOffset!!)\n mutableClose = result.correctedOffset + CHUNKED_UPLOAD_CHUNK_SIZE >= sizeOfFileInBytes\n Timber.w(\"Append failed because the provided offset ${cursor.offset} \" +\n \"should have been ${mutableCursor.offset}, retrying with corrected offset\")\n // and try again next time around the loop\n }\n }\n }\n // If we reach here, uploading the chunk failed after reaching the max\n // number of upload attempts\n throw FailedAfterMaxRetryAttemptsException()\n }\n\n private fun appendChunkTask(\n client: DbxClientV2,\n inputStream: InputStream,\n cursor: UploadSessionCursor,\n chunkSize: Long,\n close: Boolean\n AppendResult {\n try {\n Timber.d(\"Appending to upload session with ID '${cursor.sessionId}' \" +\n \"at offset: ${cursor.offset}\")\n client.files()\n .uploadSessionAppendV2Builder(cursor)\n .withClose(close)\n .uploadAndFinish(inputStream, chunkSize)\n return AppendResult(AppendResult.ResultType.Success)\n }\n catch(e: RetryException) {\n return AppendResult(AppendResult.ResultType.Retry, backoffMillis = e.backoffMillis)\n }\n catch(e: NetworkIOException) {\n return AppendResult(AppendResult.ResultType.Retry)\n }\n catch (e: UploadSessionFinishErrorException) {\n if (e.errorValue.isLookupFailed && e.errorValue.lookupFailedValue.isIncorrectOffset) {\n // server offset into the stream doesn't match our offset (uploaded). Seek to\n // the expected offset according to the server and try again.\n return AppendResult(\n AppendResult.ResultType.RetryWithCorrectedOffset,\n correctedOffset = e.errorValue\n .lookupFailedValue\n .incorrectOffsetValue\n .correctOffset)\n } else {\n // some other error occurred\n throw e\n }\n }\n }\n}\n\nclass FailedAfterMaxRetryAttemptsException() : Exception(\"Upload failed after reaching maximum number of retries\")\n\nclass AppendResult(val type: ResultType, val correctedOffset: Long? = null, val backoffMillis: Long? = null) {\n enum class ResultType {\n Success,\n Retry,\n RetryWithCorrectedOffset;\n }\n}\n\nenum class BackupErrorCode(val code: Int) {\n UNKNOWN(0),\n OFFLINE(1),\n INSUFFICIENT_SPACE(2),\n PERMISSIONS(3),\n AUTHENTICATION_FAILED(4),\n}\n\nsealed class MethodChannelResult<out S> {\n data class Success<out S>(val value: S) : MethodChannelResult<S>()\n data class Failure<out S>(val error: MethodChannelError) : MethodChannelResult<S>()\n}\n\ndata class MethodChannelError(val code: BackupErrorCode, val message: String, val stackTraceAsString: String? = null)