(Misskey)ミュート設定/解除操作と「ミュートしたユーザ」カラムの表示

This commit is contained in:
tateisu 2018-08-25 01:56:04 +09:00
parent 8a32a54041
commit 41eb1af706
3 changed files with 141 additions and 42 deletions

View File

@ -312,22 +312,43 @@ class Column(
})
}
private val misskeyArrayFinderUsers = { it:JSONObject -> it.optJSONArray("users") }
private val misskeyCustomParserFollowRequest =
{ parser : TootParser, jsonArray : JSONArray ->
val dst = ArrayList<TootAccountRef>()
for(i in 0 until jsonArray.length()) {
val src = jsonArray.optJSONObject(i) ?: continue
val followerRef = TootAccountRef.mayNull(
val accountRef = TootAccountRef.mayNull(
parser,
parser.account(src.optJSONObject("follower"))
) ?: continue
val requestId = EntityId.mayNull(src.parseString("id")) ?: continue
followerRef.get()._orderId = requestId
accountRef.get()._orderId = requestId
dst.add(followerRef)
dst.add(accountRef)
}
dst
}
val misskeyCustomParserMutes =
{ parser : TootParser, jsonArray : JSONArray ->
val dst = ArrayList<TootAccountRef>()
for(i in 0 until jsonArray.length()) {
val src = jsonArray.optJSONObject(i) ?: continue
val accountRef = TootAccountRef.mayNull(
parser,
parser.account(src.optJSONObject("follower"))
) ?: continue
val requestId = EntityId.mayNull(src.parseString("id")) ?: continue
accountRef.get()._orderId = requestId
dst.add(accountRef)
}
dst
}
@ -1970,7 +1991,7 @@ class Column(
PATH_MISSKEY_PROFILE_FOLLOWING,
emptyMessage = context.getString(R.string.none_or_hidden_following),
misskeyParams = makeMisskeyParamsUserId(parser),
misskeyArrayFinder = { it.optJSONArray("users") }
misskeyArrayFinder = misskeyArrayFinderUsers
)
} else {
parseAccountList(
@ -1990,7 +2011,7 @@ class Column(
PATH_MISSKEY_PROFILE_FOLLOWERS,
emptyMessage = context.getString(R.string.none_or_hidden_followers),
misskeyParams = makeMisskeyParamsUserId(parser),
misskeyArrayFinder = { it.optJSONArray("users") }
misskeyArrayFinder = misskeyArrayFinderUsers
)
} else {
parseAccountList(
@ -2058,7 +2079,18 @@ class Column(
}
}
TYPE_MUTES -> return parseAccountList(client, PATH_MUTES)
TYPE_MUTES -> return if(isMisskey){
parseAccountList(
client
, "/api/mute/list"
, misskeyParams = access_info.putMisskeyApiToken(JSONObject())
,misskeyArrayFinder = misskeyArrayFinderUsers
)
}else{
parseAccountList(client, PATH_MUTES)
}
TYPE_KEYWORD_FILTER -> return parseFilterList(client, PATH_FILTERS)
TYPE_BLOCKS -> return parseAccountList(client, PATH_BLOCKS)
@ -3460,7 +3492,7 @@ class Column(
client,
PATH_MISSKEY_PROFILE_FOLLOWING,
misskeyParams = makeMisskeyParamsUserId(parser),
misskeyArrayFinder = { it.optJSONArray("users") }
misskeyArrayFinder = misskeyArrayFinderUsers
)
} else {
getAccountList(
@ -3478,7 +3510,7 @@ class Column(
client,
PATH_MISSKEY_PROFILE_FOLLOWERS,
misskeyParams = makeMisskeyParamsUserId(parser),
misskeyArrayFinder = { it.optJSONArray("users") }
misskeyArrayFinder = misskeyArrayFinderUsers
)
} else {
getAccountList(
@ -3527,7 +3559,17 @@ class Column(
)
}
TYPE_MUTES -> getAccountList(client, PATH_MUTES)
TYPE_MUTES -> if(isMisskey){
getAccountList(
client
, "/api/mute/list"
, misskeyParams = access_info.putMisskeyApiToken(JSONObject())
,misskeyArrayFinder = misskeyArrayFinderUsers
)
}else{
getAccountList(client, PATH_MUTES)
}
TYPE_BLOCKS -> getAccountList(client, PATH_BLOCKS)
@ -3796,13 +3838,11 @@ class Column(
fun getAccountList(
client : TootApiClient
,
path_base : String
,
misskeyParams : JSONObject? = null
,
misskeyCustomParser : (parser : TootParser, jsonArray : JSONArray) -> ArrayList<TootAccountRef> =
,path_base : String
,misskeyParams : JSONObject? = null
,misskeyCustomParser : (parser : TootParser, jsonArray : JSONArray) -> ArrayList<TootAccountRef> =
{ parser, jsonArray -> parser.accountList(jsonArray) }
,misskeyArrayFinder :(jsonObject:JSONObject)->JSONArray? = {null}
) : TootApiResult? {
@ -3834,6 +3874,11 @@ class Column(
since_id?.putMisskeySince(params)
val r2 = client.request(path_base, params.toPostRequestBuilder())
val jsonObject = r2?.jsonObject
if( jsonObject != null ){
r2.data = misskeyArrayFinder(jsonObject)
}
val jsonArray = r2?.jsonArray
if(jsonArray == null) {
log.d("gap-account: error. make gap.")
@ -4292,7 +4337,17 @@ class Column(
String.format(Locale.JAPAN, PATH_FAVOURITED_BY, status_id)
)
TYPE_MUTES -> getAccountList(client, PATH_MUTES)
TYPE_MUTES -> if(isMisskey){
getAccountList(
client
, "/api/mute/list"
, misskeyParams = access_info.putMisskeyApiToken(JSONObject())
,misskeyArrayFinder = misskeyArrayFinderUsers
)
}else{
getAccountList(client, PATH_MUTES)
}
TYPE_BLOCKS -> getAccountList(client, PATH_BLOCKS)

View File

@ -3,6 +3,7 @@ package jp.juggler.subwaytooter
import android.annotation.SuppressLint
import android.app.Dialog
import android.graphics.PorterDuff
import android.opengl.Visibility
import android.support.v4.app.ShareCompat
import android.support.v7.app.AlertDialog
import android.view.View
@ -414,7 +415,30 @@ internal class DlgContextMenu(
who,
bMute = false
)
} else {
} else if(access_info.isMisskey) {
// Misskey には「このユーザからの通知もミュート」オプションはない
@SuppressLint("InflateParams")
val view =
activity.layoutInflater.inflate(R.layout.dlg_confirm, null, false)
val tvMessage = view.findViewById<TextView>(R.id.tvMessage)
tvMessage.text =
activity.getString(R.string.confirm_mute_user, who.username)
val cbMuteNotification = view.findViewById<CheckBox>(R.id.cbSkipNext)
cbMuteNotification.visibility = View.GONE
AlertDialog.Builder(activity)
.setView(view)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.ok) { _, _ ->
Action_User.mute(
activity,
access_info,
who
)
}
.show()
}else{
@SuppressLint("InflateParams")
val view =
activity.layoutInflater.inflate(R.layout.dlg_confirm, null, false)

View File

@ -48,32 +48,52 @@ object Action_User {
var relation : UserRelation? = null
override fun background(client : TootApiClient) : TootApiResult? {
val request_builder = Request.Builder().post(
if(! bMute)
RequestBody.create(TootApiClient.MEDIA_TYPE_FORM_URL_ENCODED, "")
else if(bMuteNotification)
RequestBody.create(
TootApiClient.MEDIA_TYPE_JSON,
"{\"notifications\": true}"
)
else
RequestBody.create(
TootApiClient.MEDIA_TYPE_JSON,
"{\"notifications\": false}"
)
)
val result = client.request(
"/api/v1/accounts/" + who.id + if(bMute) "/mute" else "/unmute",
request_builder
)
val jsonObject = result?.jsonObject
if(jsonObject != null) {
relation =
saveUserRelation(access_info, parseItem(::TootRelationShip, jsonObject))
if(access_info.isMisskey){
val params = access_info.putMisskeyApiToken(JSONObject())
.put("userId",who.id.toString())
val result = client.request(when(bMute){
true-> "/api/mute/create"
else->"/api/mute/delete"
},params.toPostRequestBuilder())
if( result?.jsonObject != null ){
// 204 no content
// update user relation
val ur = UserRelation.load(access_info.db_id,who.id)
ur.muting = bMute
saveUserRelationMisskey(access_info,who.id,TootParser(activity,access_info))
this.relation = ur
}
return result
}else{
val request_builder = Request.Builder().post(
if(! bMute)
RequestBody.create(TootApiClient.MEDIA_TYPE_FORM_URL_ENCODED, "")
else if(bMuteNotification)
RequestBody.create(
TootApiClient.MEDIA_TYPE_JSON,
"{\"notifications\": true}"
)
else
RequestBody.create(
TootApiClient.MEDIA_TYPE_JSON,
"{\"notifications\": false}"
)
)
val result = client.request(
"/api/v1/accounts/" + who.id + if(bMute) "/mute" else "/unmute",
request_builder
)
val jsonObject = result?.jsonObject
if(jsonObject != null) {
relation =
saveUserRelation(access_info, parseItem(::TootRelationShip, jsonObject))
}
return result
}
return result
}
override fun handleResult(result : TootApiResult?) {