2018-01-04 19:52:25 +01:00
|
|
|
package jp.juggler.subwaytooter.action
|
|
|
|
|
|
|
|
import android.support.v7.app.AlertDialog
|
|
|
|
|
|
|
|
import jp.juggler.subwaytooter.ActMain
|
|
|
|
import jp.juggler.subwaytooter.App1
|
|
|
|
import jp.juggler.subwaytooter.R
|
2018-01-21 17:47:13 +01:00
|
|
|
import jp.juggler.subwaytooter.api.*
|
2018-01-04 19:52:25 +01:00
|
|
|
import jp.juggler.subwaytooter.api.entity.TootAccount
|
2018-05-08 10:25:02 +02:00
|
|
|
import jp.juggler.subwaytooter.api.entity.TootAccountRef
|
2018-01-04 19:52:25 +01:00
|
|
|
import jp.juggler.subwaytooter.api.entity.TootRelationShip
|
2018-01-10 16:47:35 +01:00
|
|
|
import jp.juggler.subwaytooter.api.entity.parseItem
|
2018-01-04 19:52:25 +01:00
|
|
|
import jp.juggler.subwaytooter.dialog.AccountPicker
|
|
|
|
import jp.juggler.subwaytooter.dialog.DlgConfirm
|
|
|
|
import jp.juggler.subwaytooter.table.AcctColor
|
|
|
|
import jp.juggler.subwaytooter.table.SavedAccount
|
|
|
|
import jp.juggler.subwaytooter.table.UserRelation
|
2018-01-10 16:47:35 +01:00
|
|
|
import jp.juggler.subwaytooter.util.EmptyCallback
|
2018-01-21 13:46:36 +01:00
|
|
|
import jp.juggler.subwaytooter.util.encodePercent
|
|
|
|
import jp.juggler.subwaytooter.util.showToast
|
2018-01-04 19:52:25 +01:00
|
|
|
import okhttp3.Request
|
|
|
|
import okhttp3.RequestBody
|
|
|
|
|
|
|
|
object Action_Follow {
|
|
|
|
|
|
|
|
fun follow(
|
|
|
|
activity : ActMain,
|
|
|
|
pos : Int,
|
|
|
|
access_info : SavedAccount,
|
2018-05-08 10:25:02 +02:00
|
|
|
whoRef : TootAccountRef,
|
|
|
|
bFollow : Boolean = true,
|
|
|
|
bConfirmMoved : Boolean = false,
|
|
|
|
bConfirmed : Boolean = false,
|
2018-01-10 16:47:35 +01:00
|
|
|
callback : EmptyCallback? = null
|
2018-01-04 19:52:25 +01:00
|
|
|
) {
|
2018-05-18 19:08:46 +02:00
|
|
|
val who = whoRef.get()
|
2018-05-08 10:25:02 +02:00
|
|
|
|
2018-01-04 19:52:25 +01:00
|
|
|
if(access_info.isMe(who)) {
|
2018-01-21 13:46:36 +01:00
|
|
|
showToast(activity, false, R.string.it_is_you)
|
2018-01-04 19:52:25 +01:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if(! bConfirmMoved && bFollow && who.moved != null) {
|
|
|
|
AlertDialog.Builder(activity)
|
2018-05-08 10:25:02 +02:00
|
|
|
.setMessage(
|
|
|
|
activity.getString(
|
|
|
|
R.string.jump_moved_user,
|
|
|
|
access_info.getFullAcct(who),
|
|
|
|
access_info.getFullAcct(who.moved)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.setPositiveButton(R.string.ok) { _, _ ->
|
|
|
|
Action_User.profileFromAnotherAccount(
|
|
|
|
activity,
|
|
|
|
pos,
|
|
|
|
access_info,
|
|
|
|
who.moved
|
|
|
|
)
|
|
|
|
}
|
2018-01-10 16:47:35 +01:00
|
|
|
.setNeutralButton(R.string.ignore_suggestion) { _, _ ->
|
|
|
|
follow(
|
|
|
|
activity,
|
|
|
|
pos,
|
|
|
|
access_info,
|
2018-05-08 10:25:02 +02:00
|
|
|
whoRef,
|
2018-01-10 16:47:35 +01:00
|
|
|
bFollow = bFollow,
|
|
|
|
bConfirmMoved = true, // CHANGED
|
|
|
|
bConfirmed = bConfirmed,
|
|
|
|
callback = callback
|
|
|
|
)
|
|
|
|
}
|
2018-01-04 19:52:25 +01:00
|
|
|
.setNegativeButton(android.R.string.cancel, null)
|
|
|
|
.show()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if(! bConfirmed) {
|
|
|
|
if(bFollow && who.locked) {
|
|
|
|
DlgConfirm.open(
|
|
|
|
activity,
|
2018-05-08 10:25:02 +02:00
|
|
|
activity.getString(
|
|
|
|
R.string.confirm_follow_request_who_from,
|
|
|
|
whoRef.decoded_display_name,
|
|
|
|
AcctColor.getNickname(access_info.acct)
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
, object : DlgConfirm.Callback {
|
2018-05-08 10:25:02 +02:00
|
|
|
|
|
|
|
override fun onOK() {
|
|
|
|
follow(
|
|
|
|
activity,
|
|
|
|
pos,
|
|
|
|
access_info,
|
|
|
|
whoRef,
|
|
|
|
bFollow = bFollow,
|
|
|
|
bConfirmMoved = bConfirmMoved,
|
|
|
|
bConfirmed = true, // CHANGED
|
|
|
|
callback = callback
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
2018-05-08 10:25:02 +02:00
|
|
|
|
|
|
|
override var isConfirmEnabled : Boolean
|
|
|
|
get() = access_info.confirm_follow_locked
|
|
|
|
set(value) {
|
|
|
|
access_info.confirm_follow_locked = value
|
|
|
|
access_info.saveSetting()
|
|
|
|
activity.reloadAccountSetting(access_info)
|
|
|
|
}
|
|
|
|
})
|
2018-01-04 19:52:25 +01:00
|
|
|
return
|
|
|
|
} else if(bFollow) {
|
2018-05-08 10:25:02 +02:00
|
|
|
val msg = activity.getString(
|
|
|
|
R.string.confirm_follow_who_from,
|
|
|
|
whoRef.decoded_display_name,
|
|
|
|
AcctColor.getNickname(access_info.acct)
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
|
|
|
|
DlgConfirm.open(
|
|
|
|
activity,
|
|
|
|
msg,
|
|
|
|
object : DlgConfirm.Callback {
|
|
|
|
|
|
|
|
override fun onOK() {
|
2018-01-10 16:47:35 +01:00
|
|
|
follow(
|
|
|
|
activity,
|
|
|
|
pos,
|
|
|
|
access_info,
|
2018-05-08 10:25:02 +02:00
|
|
|
whoRef,
|
|
|
|
bFollow = bFollow,
|
|
|
|
bConfirmMoved = bConfirmMoved,
|
|
|
|
bConfirmed = true, //CHANGED
|
|
|
|
callback = callback
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
override var isConfirmEnabled : Boolean
|
|
|
|
get() = access_info.confirm_follow
|
|
|
|
set(value) {
|
|
|
|
access_info.confirm_follow = value
|
|
|
|
access_info.saveSetting()
|
|
|
|
activity.reloadAccountSetting(access_info)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
return
|
|
|
|
} else {
|
|
|
|
DlgConfirm.open(
|
|
|
|
activity,
|
2018-05-08 10:25:02 +02:00
|
|
|
activity.getString(
|
|
|
|
R.string.confirm_unfollow_who_from,
|
|
|
|
whoRef.decoded_display_name,
|
|
|
|
AcctColor.getNickname(access_info.acct)
|
|
|
|
),
|
2018-01-04 19:52:25 +01:00
|
|
|
object : DlgConfirm.Callback {
|
|
|
|
|
|
|
|
override fun onOK() {
|
2018-01-10 16:47:35 +01:00
|
|
|
follow(
|
|
|
|
activity,
|
|
|
|
pos,
|
|
|
|
access_info,
|
2018-05-08 10:25:02 +02:00
|
|
|
whoRef,
|
|
|
|
bFollow = bFollow,
|
|
|
|
bConfirmMoved = bConfirmMoved,
|
|
|
|
bConfirmed = true, // CHANGED
|
|
|
|
callback = callback
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
override var isConfirmEnabled : Boolean
|
|
|
|
get() = access_info.confirm_unfollow
|
|
|
|
set(value) {
|
|
|
|
access_info.confirm_unfollow = value
|
|
|
|
access_info.saveSetting()
|
|
|
|
activity.reloadAccountSetting(access_info)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-10 16:47:35 +01:00
|
|
|
TootTaskRunner(activity, TootTaskRunner.PROGRESS_NONE).run(access_info, object : TootTask {
|
2018-01-04 19:52:25 +01:00
|
|
|
|
|
|
|
internal var relation : UserRelation? = null
|
|
|
|
override fun background(client : TootApiClient) : TootApiResult? {
|
|
|
|
var result : TootApiResult?
|
|
|
|
|
|
|
|
if(bFollow and who.acct.contains("@")) {
|
|
|
|
|
|
|
|
// リモートフォローする
|
|
|
|
val request_builder = Request.Builder().post(
|
|
|
|
RequestBody.create(
|
2018-05-08 10:25:02 +02:00
|
|
|
TootApiClient.MEDIA_TYPE_FORM_URL_ENCODED,
|
|
|
|
"uri=" + who.acct.encodePercent()
|
|
|
|
)
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
|
|
|
|
result = client.request("/api/v1/follows", request_builder)
|
2018-05-08 10:25:02 +02:00
|
|
|
val remote_who = TootParser(activity, access_info).account(result?.jsonObject)
|
2018-01-21 17:47:13 +01:00
|
|
|
if(remote_who != null) {
|
|
|
|
val rr = loadRelation1(client, access_info, remote_who.id)
|
|
|
|
result = rr.result
|
|
|
|
relation = rr.relation
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// ローカルでフォロー/アンフォローする
|
|
|
|
|
|
|
|
val request_builder = Request.Builder().post(
|
|
|
|
RequestBody.create(
|
|
|
|
TootApiClient.MEDIA_TYPE_FORM_URL_ENCODED, "" // 空データ
|
2018-05-08 10:25:02 +02:00
|
|
|
)
|
|
|
|
)
|
|
|
|
result = client.request(
|
|
|
|
"/api/v1/accounts/" + who.id
|
|
|
|
+ if(bFollow) "/follow" else "/unfollow", request_builder
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
val jsonObject = result?.jsonObject
|
|
|
|
if(jsonObject != null) {
|
2018-05-08 10:25:02 +02:00
|
|
|
relation =
|
|
|
|
saveUserRelation(access_info, parseItem(::TootRelationShip, jsonObject))
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun handleResult(result : TootApiResult?) {
|
|
|
|
|
|
|
|
if(result == null) return // cancelled.
|
|
|
|
|
2018-01-10 16:47:35 +01:00
|
|
|
val relation = this.relation
|
2018-01-04 19:52:25 +01:00
|
|
|
if(relation != null) {
|
|
|
|
|
|
|
|
activity.showColumnMatchAccount(access_info)
|
|
|
|
|
2018-05-08 10:25:02 +02:00
|
|
|
if(bFollow && relation.getRequested(who)) {
|
2018-01-04 19:52:25 +01:00
|
|
|
// 鍵付きアカウントにフォローリクエストを申請した状態
|
2018-01-21 13:46:36 +01:00
|
|
|
showToast(activity, false, R.string.follow_requested)
|
2018-05-08 10:25:02 +02:00
|
|
|
} else if(! bFollow && relation.getRequested(who)) {
|
2018-01-21 13:46:36 +01:00
|
|
|
showToast(activity, false, R.string.follow_request_cant_remove_by_sender)
|
2018-01-04 19:52:25 +01:00
|
|
|
} else {
|
|
|
|
// ローカル操作成功、もしくはリモートフォロー成功
|
|
|
|
if(callback != null) callback()
|
|
|
|
}
|
|
|
|
|
2018-05-08 10:25:02 +02:00
|
|
|
} else if(bFollow && who.locked && (result.response?.code() ?: - 1) == 422) {
|
2018-01-21 13:46:36 +01:00
|
|
|
showToast(activity, false, R.string.cant_follow_locked_user)
|
2018-01-04 19:52:25 +01:00
|
|
|
} else {
|
2018-01-21 13:46:36 +01:00
|
|
|
showToast(activity, false, result.error)
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
// acct で指定したユーザをリモートフォローする
|
2018-01-10 16:47:35 +01:00
|
|
|
fun followRemote(
|
|
|
|
activity : ActMain,
|
|
|
|
access_info : SavedAccount,
|
|
|
|
acct : String,
|
|
|
|
locked : Boolean,
|
2018-05-08 10:25:02 +02:00
|
|
|
bConfirmed : Boolean = false,
|
|
|
|
callback : EmptyCallback? = null
|
2018-01-04 19:52:25 +01:00
|
|
|
) {
|
|
|
|
if(access_info.isMe(acct)) {
|
2018-01-21 13:46:36 +01:00
|
|
|
showToast(activity, false, R.string.it_is_you)
|
2018-01-04 19:52:25 +01:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if(! bConfirmed) {
|
|
|
|
if(locked) {
|
2018-05-08 10:25:02 +02:00
|
|
|
DlgConfirm.open(
|
|
|
|
activity,
|
|
|
|
activity.getString(
|
|
|
|
R.string.confirm_follow_request_who_from,
|
|
|
|
AcctColor.getNickname(acct),
|
|
|
|
AcctColor.getNickname(access_info.acct)
|
|
|
|
),
|
|
|
|
object : DlgConfirm.Callback {
|
|
|
|
override fun onOK() {
|
|
|
|
followRemote(
|
|
|
|
activity,
|
|
|
|
access_info,
|
|
|
|
acct,
|
|
|
|
locked,
|
|
|
|
bConfirmed = true, //CHANGE
|
|
|
|
callback = callback
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
2018-05-08 10:25:02 +02:00
|
|
|
|
|
|
|
override var isConfirmEnabled : Boolean
|
|
|
|
get() = access_info.confirm_follow_locked
|
|
|
|
set(value) {
|
|
|
|
access_info.confirm_follow_locked = value
|
|
|
|
access_info.saveSetting()
|
|
|
|
activity.reloadAccountSetting(access_info)
|
|
|
|
}
|
|
|
|
})
|
2018-01-04 19:52:25 +01:00
|
|
|
return
|
|
|
|
} else {
|
2018-05-08 10:25:02 +02:00
|
|
|
DlgConfirm.open(
|
|
|
|
activity,
|
|
|
|
activity.getString(
|
|
|
|
R.string.confirm_follow_who_from,
|
|
|
|
AcctColor.getNickname(acct),
|
|
|
|
AcctColor.getNickname(access_info.acct)
|
|
|
|
),
|
|
|
|
object : DlgConfirm.Callback {
|
|
|
|
|
|
|
|
override fun onOK() {
|
|
|
|
followRemote(
|
|
|
|
activity,
|
|
|
|
access_info,
|
|
|
|
acct,
|
|
|
|
locked,
|
|
|
|
bConfirmed = true, //CHANGE
|
|
|
|
callback = callback
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
2018-05-08 10:25:02 +02:00
|
|
|
|
|
|
|
override var isConfirmEnabled : Boolean
|
|
|
|
get() = access_info.confirm_follow
|
|
|
|
set(value) {
|
|
|
|
access_info.confirm_follow = value
|
|
|
|
access_info.saveSetting()
|
|
|
|
activity.reloadAccountSetting(access_info)
|
|
|
|
}
|
|
|
|
})
|
2018-01-04 19:52:25 +01:00
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-10 16:47:35 +01:00
|
|
|
TootTaskRunner(activity, TootTaskRunner.PROGRESS_NONE).run(access_info, object : TootTask {
|
2018-01-04 19:52:25 +01:00
|
|
|
|
|
|
|
internal var remote_who : TootAccount? = null
|
|
|
|
internal var relation : UserRelation? = null
|
|
|
|
override fun background(client : TootApiClient) : TootApiResult? {
|
|
|
|
|
|
|
|
val request_builder = Request.Builder().post(
|
|
|
|
RequestBody.create(
|
2018-01-21 13:46:36 +01:00
|
|
|
TootApiClient.MEDIA_TYPE_FORM_URL_ENCODED, "uri=" + acct.encodePercent()
|
2018-05-08 10:25:02 +02:00
|
|
|
)
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
|
|
|
|
var result = client.request("/api/v1/follows", request_builder)
|
2018-01-21 17:47:13 +01:00
|
|
|
val remote_who = TootParser(activity, access_info).account(result?.jsonObject)
|
|
|
|
if(remote_who != null) {
|
|
|
|
this.remote_who = remote_who
|
2018-05-08 10:25:02 +02:00
|
|
|
val rr = loadRelation1(client, access_info, remote_who.id)
|
2018-01-21 17:47:13 +01:00
|
|
|
result = rr.result
|
|
|
|
relation = rr.relation
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return result
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun handleResult(result : TootApiResult?) {
|
|
|
|
|
|
|
|
if(result == null) return // cancelled.
|
|
|
|
|
|
|
|
if(relation != null) {
|
|
|
|
|
|
|
|
activity.showColumnMatchAccount(access_info)
|
|
|
|
|
|
|
|
if(callback != null) callback()
|
|
|
|
|
2018-05-08 10:25:02 +02:00
|
|
|
} else if(locked && (result.response?.code() ?: - 1) == 422) {
|
2018-01-21 13:46:36 +01:00
|
|
|
showToast(activity, false, R.string.cant_follow_locked_user)
|
2018-01-04 19:52:25 +01:00
|
|
|
} else {
|
2018-01-21 13:46:36 +01:00
|
|
|
showToast(activity, false, result.error)
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
fun followFromAnotherAccount(
|
2018-01-10 16:47:35 +01:00
|
|
|
activity : ActMain,
|
|
|
|
pos : Int,
|
|
|
|
access_info : SavedAccount,
|
|
|
|
account : TootAccount?,
|
2018-05-08 10:25:02 +02:00
|
|
|
bConfirmMoved : Boolean = false
|
2018-01-04 19:52:25 +01:00
|
|
|
) {
|
|
|
|
if(account == null) return
|
|
|
|
|
|
|
|
if(! bConfirmMoved && account.moved != null) {
|
|
|
|
AlertDialog.Builder(activity)
|
2018-05-08 10:25:02 +02:00
|
|
|
.setMessage(
|
|
|
|
activity.getString(
|
|
|
|
R.string.jump_moved_user,
|
|
|
|
access_info.getFullAcct(account),
|
|
|
|
access_info.getFullAcct(account.moved)
|
|
|
|
)
|
|
|
|
)
|
2018-01-10 16:47:35 +01:00
|
|
|
.setPositiveButton(R.string.ok) { _, _ ->
|
|
|
|
Action_User.profileFromAnotherAccount(activity, pos, access_info, account.moved)
|
|
|
|
}
|
|
|
|
.setNeutralButton(R.string.ignore_suggestion) { _, _ ->
|
|
|
|
followFromAnotherAccount(
|
|
|
|
activity,
|
|
|
|
pos,
|
|
|
|
access_info,
|
|
|
|
account,
|
|
|
|
bConfirmMoved = true //CHANGED
|
|
|
|
)
|
|
|
|
}
|
2018-01-04 19:52:25 +01:00
|
|
|
.setNegativeButton(android.R.string.cancel, null)
|
|
|
|
.show()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
val who_acct = access_info.getFullAcct(account)
|
2018-01-10 16:47:35 +01:00
|
|
|
AccountPicker.pick(
|
|
|
|
activity,
|
2018-01-13 07:15:52 +01:00
|
|
|
bAuto = false,
|
|
|
|
message = activity.getString(R.string.account_picker_follow),
|
|
|
|
accountListArg = makeAccountListNonPseudo(activity, account.host)
|
2018-01-10 16:47:35 +01:00
|
|
|
) { ai ->
|
|
|
|
followRemote(
|
|
|
|
activity,
|
|
|
|
ai,
|
|
|
|
who_acct,
|
|
|
|
account.locked,
|
|
|
|
callback = activity.follow_complete_callback
|
|
|
|
)
|
|
|
|
}
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
fun authorizeFollowRequest(
|
2018-05-08 10:25:02 +02:00
|
|
|
activity : ActMain,
|
|
|
|
access_info : SavedAccount,
|
|
|
|
whoRef : TootAccountRef,
|
|
|
|
bAllow : Boolean
|
2018-01-04 19:52:25 +01:00
|
|
|
) {
|
2018-05-18 19:08:46 +02:00
|
|
|
val who = whoRef.get()
|
2018-01-04 19:52:25 +01:00
|
|
|
if(access_info.isMe(who)) {
|
2018-01-21 13:46:36 +01:00
|
|
|
showToast(activity, false, R.string.it_is_you)
|
2018-01-04 19:52:25 +01:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2018-01-10 16:47:35 +01:00
|
|
|
TootTaskRunner(activity).run(access_info, object : TootTask {
|
2018-01-04 19:52:25 +01:00
|
|
|
override fun background(client : TootApiClient) : TootApiResult? {
|
|
|
|
val request_builder = Request.Builder().post(
|
|
|
|
RequestBody.create(
|
|
|
|
TootApiClient.MEDIA_TYPE_FORM_URL_ENCODED, "" // 空データ
|
2018-05-08 10:25:02 +02:00
|
|
|
)
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
|
|
|
|
return client.request(
|
2018-05-08 10:25:02 +02:00
|
|
|
"/api/v1/follow_requests/" + who.id + if(bAllow) "/authorize" else "/reject",
|
|
|
|
request_builder
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun handleResult(result : TootApiResult?) {
|
|
|
|
if(result == null) return // cancelled.
|
|
|
|
|
|
|
|
val jsonObject = result.jsonObject
|
|
|
|
if(jsonObject != null) {
|
|
|
|
for(column in App1.getAppState(activity).column_list) {
|
|
|
|
column.removeFollowRequest(access_info, who.id)
|
|
|
|
}
|
|
|
|
|
2018-05-08 10:25:02 +02:00
|
|
|
showToast(
|
|
|
|
activity,
|
|
|
|
false,
|
|
|
|
if(bAllow) R.string.follow_request_authorized else R.string.follow_request_rejected,
|
|
|
|
whoRef.decoded_display_name
|
|
|
|
)
|
2018-01-04 19:52:25 +01:00
|
|
|
} else {
|
2018-01-21 13:46:36 +01:00
|
|
|
showToast(activity, false, result.error)
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|