From 418259ded9b9f7c0bb27130d4023710d3c39fe63 Mon Sep 17 00:00:00 2001 From: tateisu Date: Mon, 27 Aug 2018 15:12:58 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=88=E3=82=A5=E3=83=BC=E3=83=88=E6=A4=9C?= =?UTF-8?q?=E7=B4=A2=E3=81=8B=E3=82=89=20=E3=80=8C=E5=88=A5=E3=82=A2?= =?UTF-8?q?=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=81=A7=E3=83=97=E3=83=AD?= =?UTF-8?q?=E3=83=95=E3=82=92=E9=96=8B=E3=81=8F=E3=80=8D=E3=81=A7Misskey?= =?UTF-8?q?=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=82=92=E9=81=B8?= =?UTF-8?q?=E6=8A=9E=E3=81=97=E3=81=9F=E6=99=82=E3=81=AE=E6=8C=99=E5=8B=95?= =?UTF-8?q?=E3=82=92=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subwaytooter/action/Action_User.kt | 60 ++++++++++++++----- .../subwaytooter/api/entity/TootAccount.kt | 1 + .../subwaytooter/dialog/DlgListMember.kt | 47 +++++++++++---- 3 files changed, 81 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/jp/juggler/subwaytooter/action/Action_User.kt b/app/src/main/java/jp/juggler/subwaytooter/action/Action_User.kt index 511ee066..a107e503 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/action/Action_User.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/action/Action_User.kt @@ -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?) { diff --git a/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootAccount.kt b/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootAccount.kt index 85a4fadb..77be5c90 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootAccount.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootAccount.kt @@ -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()){ diff --git a/app/src/main/java/jp/juggler/subwaytooter/dialog/DlgListMember.kt b/app/src/main/java/jp/juggler/subwaytooter/dialog/DlgListMember.kt index 47f1ea37..f15bf365 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/dialog/DlgListMember.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/dialog/DlgListMember.kt @@ -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 // 結果を解釈する