Twidere-App-Android-Twitter.../twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/AccountDetailsExtensions.kt

128 lines
4.5 KiB
Kotlin
Raw Normal View History

2016-12-04 04:58:03 +01:00
package org.mariotaku.twidere.extension.model
import android.content.Context
2017-06-06 03:14:14 +02:00
import org.mariotaku.microblog.library.twitter.annotation.MediaCategory
2016-12-08 16:45:07 +01:00
import org.mariotaku.twidere.annotation.AccountType
2016-12-04 04:58:03 +01:00
import org.mariotaku.twidere.model.AccountDetails
2016-12-15 06:11:32 +01:00
import org.mariotaku.twidere.model.account.AccountExtras
import org.mariotaku.twidere.model.account.MastodonAccountExtras
2017-02-28 08:34:00 +01:00
import org.mariotaku.twidere.model.account.StatusNetAccountExtras
2016-12-04 04:58:03 +01:00
import org.mariotaku.twidere.model.account.TwitterAccountExtras
2016-12-05 03:10:21 +01:00
import org.mariotaku.twidere.model.account.cred.Credentials
2016-12-04 04:58:03 +01:00
import org.mariotaku.twidere.model.account.cred.OAuthCredentials
2017-01-24 12:10:24 +01:00
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
2017-05-25 04:33:19 +02:00
import org.mariotaku.twidere.util.InternalTwitterContentUtils
2017-11-13 05:53:40 +01:00
import org.mariotaku.twidere.util.text.FanfouValidator
import org.mariotaku.twidere.util.text.MastodonValidator
import org.mariotaku.twidere.util.text.TwitterValidator
2020-06-09 00:50:51 +02:00
import kotlin.math.min
2016-12-04 04:58:03 +01:00
2020-04-03 11:49:35 +02:00
fun AccountDetails.isOfficial(context: Context?): Boolean {
if (context == null) {
return false
}
val extra = this.extras
if (extra is TwitterAccountExtras) {
return extra.isOfficialCredentials
}
val credentials = this.credentials
if (credentials is OAuthCredentials) {
return InternalTwitterContentUtils.isOfficialKey(context,
credentials.consumer_key, credentials.consumer_secret)
}
return false
}
val AccountExtras.official: Boolean
get() {
if (this is TwitterAccountExtras) {
return isOfficialCredentials
}
return false
}
val AccountDetails.hasDm: Boolean
get() = type in arrayOf(AccountType.FANFOU, AccountType.TWITTER)
fun <T> AccountDetails.newMicroBlogInstance(context: Context, cls: Class<T>): T {
return credentials.newMicroBlogInstance(context, type, cls)
2016-12-08 16:45:07 +01:00
}
2017-02-28 08:34:00 +01:00
val AccountDetails.isOAuth: Boolean
2017-01-24 12:10:24 +01:00
get() = credentials_type == Credentials.Type.OAUTH || credentials_type == Credentials.Type.XAUTH
2017-06-06 03:14:14 +02:00
fun AccountDetails.getMediaSizeLimit(@MediaCategory mediaCategory: String? = null): UpdateStatusTask.SizeLimit? {
when (type) {
AccountType.TWITTER -> {
val imageLimit = AccountExtras.ImageLimit.twitterDefault(mediaCategory)
val videoLimit = AccountExtras.VideoLimit.twitterDefault()
return UpdateStatusTask.SizeLimit(imageLimit, videoLimit)
}
AccountType.FANFOU -> {
val imageLimit = AccountExtras.ImageLimit.ofSize(5 * 1024 * 1024)
2017-06-06 03:14:14 +02:00
val videoLimit = AccountExtras.VideoLimit.unsupported()
return UpdateStatusTask.SizeLimit(imageLimit, videoLimit)
}
AccountType.STATUSNET -> {
val extras = extras as? StatusNetAccountExtras ?: return null
val imageLimit = AccountExtras.ImageLimit().apply {
maxSizeSync = extras.uploadLimit
maxSizeAsync = extras.uploadLimit
2017-05-24 07:34:33 +02:00
}
2017-06-06 03:14:14 +02:00
val videoLimit = AccountExtras.VideoLimit().apply {
maxSizeSync = extras.uploadLimit
maxSizeAsync = extras.uploadLimit
2017-05-24 07:34:33 +02:00
}
2017-06-06 03:14:14 +02:00
return UpdateStatusTask.SizeLimit(imageLimit, videoLimit)
}
AccountType.MASTODON -> {
val imageLimit = AccountExtras.ImageLimit().apply {
maxSizeSync = 8 * 1024 * 1024
maxSizeAsync = 8 * 1024 * 1024
maxHeight = 1280
maxWidth = 1280
}
val videoLimit = AccountExtras.VideoLimit.twitterDefault()
return UpdateStatusTask.SizeLimit(imageLimit, videoLimit)
}
2017-06-06 03:14:14 +02:00
else -> return null
2017-01-24 12:10:24 +01:00
}
2017-06-06 03:14:14 +02:00
}
2017-05-24 07:34:33 +02:00
2017-02-28 08:34:00 +01:00
/**
* Text limit when composing a status, 0 for no limit
*/
2017-11-13 05:53:40 +01:00
val AccountDetails.textLimit: Int
get() = when (type) {
2017-02-28 08:34:00 +01:00
AccountType.STATUSNET -> {
2017-11-13 05:53:40 +01:00
(this.extras as? StatusNetAccountExtras)?.textLimit ?: 140
2017-02-28 08:34:00 +01:00
}
AccountType.MASTODON -> {
2017-11-13 05:53:40 +01:00
(this.extras as? MastodonAccountExtras)?.statusTextLimit ?: MastodonValidator.textLimit
}
AccountType.FANFOU -> {
FanfouValidator.textLimit
}
AccountType.TWITTER -> {
TwitterValidator.maxWeightedTweetLength
}
2017-11-13 05:53:40 +01:00
else -> 140
2017-02-28 08:34:00 +01:00
}
2017-11-13 05:53:40 +01:00
2017-02-28 08:34:00 +01:00
val Array<AccountDetails>.textLimit: Int
get() {
var limit = -1
forEach { details ->
val currentLimit = details.textLimit
if (currentLimit != 0) {
2020-06-08 23:19:10 +02:00
limit = if (limit <= 0) {
currentLimit
2017-02-28 08:34:00 +01:00
} else {
2020-06-09 00:50:51 +02:00
min(limit, currentLimit)
2017-02-28 08:34:00 +01:00
}
}
}
return limit
2017-03-12 14:27:55 +01:00
}