トゥート検索から 「別アカウントでプロフを開く」でMisskeyアカウントを選択した時の挙動を改善

This commit is contained in:
tateisu 2018-08-27 15:12:58 +09:00
parent 7f3ba1749c
commit 418259ded9
3 changed files with 81 additions and 27 deletions

View File

@ -235,24 +235,52 @@ object Action_User {
var who_local : TootAccount? = null
override fun background(client : TootApiClient) : TootApiResult? {
val path = String.format(
Locale.JAPAN,
Column.PATH_SEARCH,
who_url.encodePercent()
) + "&resolve=1"
val result = client.request(path)
val jsonObject = result?.jsonObject
if(jsonObject != null) {
val tmp = TootParser(activity, access_info).results(jsonObject)
if(tmp != null && tmp.accounts.isNotEmpty()) {
who_local = tmp.accounts[0].get()
} else {
return TootApiResult(activity.getString(R.string.user_id_conversion_failed))
if( access_info.isMisskey){
val acct = TootAccount.getAcctFromUrl(who_url)
?: return TootApiResult("can't find acct from $who_url")
val delm = acct.indexOf('@')
val params = access_info.putMisskeyApiToken(JSONObject())
if(delm!=-1){
params.put("username",acct.substring(0,delm))
params.put("host",acct.substring(delm+1))
}else{
params.put("username",acct)
}
val result = client.request("/api/users/show",params.toPostRequestBuilder())
val jsonObject = result?.jsonObject
if(jsonObject != null) {
val tmp = TootParser(activity, access_info).account(jsonObject)
if(tmp != null){
who_local = tmp
} else {
return TootApiResult(activity.getString(R.string.user_id_conversion_failed))
}
}
return result
}else{
val path = String.format(
Locale.JAPAN,
Column.PATH_SEARCH,
who_url.encodePercent()
) + "&resolve=1"
val result = client.request(path)
val jsonObject = result?.jsonObject
if(jsonObject != null) {
val tmp = TootParser(activity, access_info).results(jsonObject)
if(tmp != null && tmp.accounts.isNotEmpty()) {
who_local = tmp.accounts[0].get()
} else {
return TootApiResult(activity.getString(R.string.user_id_conversion_failed))
}
}
return result
}
return result
}
override fun handleResult(result : TootApiResult?) {

View File

@ -310,6 +310,7 @@ open class TootAccount(parser : TootParser, src : JSONObject) {
@Suppress("HasPlatformType")
val reAccountUrl =
Pattern.compile("\\Ahttps://([A-Za-z0-9.-]+)/@([A-Za-z0-9_]+(?:@[A-Za-z0-9][A-Za-z0-9.-]+?[A-Za-z0-9])?)(?:\\z|[?#])")
fun getAcctFromUrl(url:String):String?{
val m = TootAccount.reAccountUrl.matcher(url)
if(m.find()){

View File

@ -36,8 +36,10 @@ import jp.juggler.subwaytooter.table.SavedAccount
import jp.juggler.subwaytooter.util.NetworkEmojiInvalidator
import jp.juggler.subwaytooter.util.encodePercent
import jp.juggler.subwaytooter.util.showToast
import jp.juggler.subwaytooter.util.toPostRequestBuilder
import jp.juggler.subwaytooter.view.MyListView
import jp.juggler.subwaytooter.view.MyNetworkImageView
import org.json.JSONObject
@SuppressLint("InflateParams")
class DlgListMember(
@ -187,17 +189,40 @@ class DlgListMember(
override fun background(client : TootApiClient) : TootApiResult? {
// リストに追加したいアカウントの自タンスでのアカウントIDを取得する
local_who = null
var result = client.request("/api/v1/search?resolve=true&q=" + target_user_full_acct.encodePercent())
val jsonObject = result?.jsonObject ?: return result
val search_result = TootParser(activity, list_owner ).results(jsonObject)
if(search_result != null) {
for(aRef in search_result.accounts) {
val a = aRef.get()
if(target_user_full_acct.equals(list_owner .getFullAcct(a), ignoreCase = true)) {
local_who = a
break
if( list_owner.isMisskey){
val acct = target_user_full_acct
val delm = acct.indexOf('@')
val params = list_owner.putMisskeyApiToken(JSONObject())
if(delm!=-1){
params.put("username",acct.substring(0,delm))
params.put("host",acct.substring(delm+1))
}else{
params.put("username",acct)
}
val result = client.request("/api/users/show",params.toPostRequestBuilder())
val jsonObject = result?.jsonObject
if(jsonObject != null) {
val tmp = TootParser(activity, list_owner).account(jsonObject)
if(tmp != null){
local_who = tmp
}
}
}else{
val result = client.request("/api/v1/search?resolve=true&q=" + target_user_full_acct.encodePercent())
val jsonObject = result?.jsonObject ?: return result
val search_result = TootParser(activity, list_owner ).results(jsonObject)
if(search_result != null) {
for(aRef in search_result.accounts) {
val a = aRef.get()
if(target_user_full_acct.equals(list_owner .getFullAcct(a), ignoreCase = true)) {
local_who = a
break
}
}
}
}
@ -206,7 +231,7 @@ class DlgListMember(
?: return TootApiResult(activity.getString(R.string.account_sync_failed))
// リスト登録状況を取得
result = client.request("/api/v1/accounts/" + local_who .id + "/lists")
var result = client.request("/api/v1/accounts/" + local_who .id + "/lists")
var jsonArray = result?.jsonArray ?:return result
// 結果を解釈する