疑似アカウントを作る時にMisskeyタンスかどうかチェック漏れをなくした
This commit is contained in:
parent
0275edfdbc
commit
4405028a1d
|
@ -62,16 +62,36 @@ internal fun findAccountByName(
|
|||
internal fun addPseudoAccount(
|
||||
context : Context,
|
||||
host : String,
|
||||
isMisskey : Boolean = false
|
||||
) : SavedAccount? {
|
||||
|
||||
isMisskey : Boolean? = null,
|
||||
callback : (SavedAccount) -> Unit
|
||||
) {
|
||||
try {
|
||||
val username = "?"
|
||||
val full_acct = "$username@$host"
|
||||
|
||||
var account = SavedAccount.loadAccountByAcct(context, full_acct)
|
||||
if(account != null) {
|
||||
return account
|
||||
callback(account)
|
||||
return
|
||||
}
|
||||
|
||||
if(isMisskey == null) {
|
||||
TootTaskRunner(context).run(object : TootTask {
|
||||
|
||||
var isMisskey2 : Boolean = false
|
||||
|
||||
override fun background(client : TootApiClient) : TootApiResult? {
|
||||
client.instance = host
|
||||
val r = client.getInstanceInformation()
|
||||
isMisskey2 = r?.jsonObject?.optBoolean(TootApiClient.KEY_IS_MISSKEY) ?: false
|
||||
return r
|
||||
}
|
||||
|
||||
override fun handleResult(result : TootApiResult?) {
|
||||
if(result != null) addPseudoAccount(context, host, isMisskey2, callback)
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
val account_info = JSONObject()
|
||||
|
@ -91,15 +111,15 @@ internal fun addPseudoAccount(
|
|||
account.notification_reaction = false
|
||||
account.notification_vote = false
|
||||
account.saveSetting()
|
||||
return account
|
||||
callback(account)
|
||||
return
|
||||
} catch(ex : Throwable) {
|
||||
val log = LogCategory("addPseudoAccount")
|
||||
log.trace(ex)
|
||||
log.e(ex, "failed.")
|
||||
showToast(context, ex, "addPseudoAccount failed.")
|
||||
}
|
||||
|
||||
return null
|
||||
return
|
||||
}
|
||||
|
||||
// 疑似アカ以外のアカウントのリスト
|
||||
|
|
|
@ -102,8 +102,11 @@ object Action_Account {
|
|||
|
||||
} else {
|
||||
// 疑似アカウントを追加
|
||||
val a = addPseudoAccount(activity, instance, data.optBoolean("isMisskey",false))
|
||||
if(a != null) {
|
||||
addPseudoAccount(
|
||||
activity,
|
||||
instance,
|
||||
data.optBoolean("isMisskey", false)
|
||||
) { a ->
|
||||
showToast(activity, false, R.string.server_confirmed)
|
||||
val pos = App1.getAppState(activity).column_list.size
|
||||
activity.addColumn(pos, a, Column.TYPE_LOCAL)
|
||||
|
@ -113,7 +116,6 @@ object Action_Account {
|
|||
} catch(ignored : Throwable) {
|
||||
// IllegalArgumentException がたまに出る
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -198,7 +200,14 @@ object Action_Account {
|
|||
bAllowPseudo = false,
|
||||
bAuto = true,
|
||||
message = activity.getString(R.string.account_picker_toot)
|
||||
) { ai -> ActPost.open(activity, ActMain.REQUEST_CODE_POST, ai.db_id, initial_text = initial_text) }
|
||||
) { ai ->
|
||||
ActPost.open(
|
||||
activity,
|
||||
ActMain.REQUEST_CODE_POST,
|
||||
ai.db_id,
|
||||
initial_text = initial_text
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -231,7 +240,11 @@ object Action_Account {
|
|||
)
|
||||
val jsonObject = result?.jsonObject
|
||||
if(jsonObject != null) {
|
||||
val tr = parseItem(::TootRelationShip,TootParser(client.context,access_info),jsonObject)
|
||||
val tr = parseItem(
|
||||
::TootRelationShip,
|
||||
TootParser(client.context, access_info),
|
||||
jsonObject
|
||||
)
|
||||
if(tr != null) {
|
||||
this.relation = saveUserRelation(access_info, tr)
|
||||
}
|
||||
|
@ -245,10 +258,12 @@ object Action_Account {
|
|||
if(result.error != null) {
|
||||
showToast(activity, true, result.error)
|
||||
} else {
|
||||
showToast(activity,false,when(bSet){
|
||||
showToast(
|
||||
activity, false, when(bSet) {
|
||||
true -> R.string.endorse_succeeded
|
||||
else -> R.string.remove_endorse_succeeded
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
@ -6,6 +6,7 @@ import jp.juggler.subwaytooter.ActMain
|
|||
import jp.juggler.subwaytooter.App1
|
||||
import jp.juggler.subwaytooter.Column
|
||||
import jp.juggler.subwaytooter.R
|
||||
import jp.juggler.subwaytooter.api.entity.TootStatus
|
||||
import jp.juggler.subwaytooter.dialog.ActionsDialog
|
||||
import jp.juggler.subwaytooter.table.AcctColor
|
||||
import jp.juggler.subwaytooter.table.SavedAccount
|
||||
|
@ -14,14 +15,37 @@ object Action_HashTag {
|
|||
|
||||
// ハッシュタグへの操作を選択する
|
||||
fun dialog(
|
||||
activity : ActMain, pos : Int, url : String, host : String, tag_without_sharp : String, tag_list : ArrayList<String>?
|
||||
activity : ActMain,
|
||||
pos : Int,
|
||||
url : String,
|
||||
host : String,
|
||||
tag_without_sharp : String,
|
||||
tag_list : ArrayList<String>?
|
||||
) {
|
||||
val tag_with_sharp = "#" + tag_without_sharp
|
||||
|
||||
val d = ActionsDialog()
|
||||
.addAction(activity.getString(R.string.open_hashtag_column)) { timelineOtherInstance(activity, pos, url, host, tag_without_sharp) }
|
||||
.addAction(activity.getString(R.string.open_in_browser)) { App1.openCustomTab(activity, url) }
|
||||
.addAction(activity.getString(R.string.quote_hashtag_of, tag_with_sharp)) { Action_Account.openPost(activity, tag_with_sharp + " ") }
|
||||
.addAction(activity.getString(R.string.open_hashtag_column)) {
|
||||
timelineOtherInstance(
|
||||
activity,
|
||||
pos,
|
||||
url,
|
||||
host,
|
||||
tag_without_sharp
|
||||
)
|
||||
}
|
||||
.addAction(activity.getString(R.string.open_in_browser)) {
|
||||
App1.openCustomTab(
|
||||
activity,
|
||||
url
|
||||
)
|
||||
}
|
||||
.addAction(
|
||||
activity.getString(
|
||||
R.string.quote_hashtag_of,
|
||||
tag_with_sharp
|
||||
)
|
||||
) { Action_Account.openPost(activity, tag_with_sharp + " ") }
|
||||
|
||||
if(tag_list != null && tag_list.size > 1) {
|
||||
val sb = StringBuilder()
|
||||
|
@ -30,7 +54,12 @@ object Action_HashTag {
|
|||
sb.append(s)
|
||||
}
|
||||
val tag_all = sb.toString()
|
||||
d.addAction(activity.getString(R.string.quote_all_hashtag_of, tag_all)) { Action_Account.openPost(activity, tag_all + " ") }
|
||||
d.addAction(
|
||||
activity.getString(
|
||||
R.string.quote_all_hashtag_of,
|
||||
tag_all
|
||||
)
|
||||
) { Action_Account.openPost(activity, tag_all + " ") }
|
||||
}
|
||||
|
||||
d.show(activity, tag_with_sharp)
|
||||
|
@ -43,7 +72,6 @@ object Action_HashTag {
|
|||
activity.addColumn(pos, access_info, Column.TYPE_HASHTAG, tag_without_sharp)
|
||||
}
|
||||
|
||||
|
||||
// アカウントを選んでハッシュタグカラムを開く
|
||||
fun timelineOtherInstance(
|
||||
activity : ActMain,
|
||||
|
@ -76,13 +104,17 @@ object Action_HashTag {
|
|||
}
|
||||
|
||||
// ブラウザで表示する
|
||||
dialog.addAction(activity.getString(R.string.open_web_on_host, host)) { App1.openCustomTab(activity, url) }
|
||||
dialog.addAction(activity.getString(R.string.open_web_on_host, host)) {
|
||||
App1.openCustomTab(
|
||||
activity,
|
||||
url
|
||||
)
|
||||
}
|
||||
|
||||
// 同タンスのアカウントがない場合は疑似アカウントを作成して開く
|
||||
if(list_original.isEmpty() && list_original_pseudo.isEmpty()) {
|
||||
dialog.addAction(activity.getString(R.string.open_in_pseudo_account, "?@" + host)) {
|
||||
val sa = addPseudoAccount(activity, host)
|
||||
if(sa != null) {
|
||||
addPseudoAccount(activity, host) { sa ->
|
||||
timeline(activity, pos, sa, tag_without_sharp)
|
||||
}
|
||||
}
|
||||
|
@ -90,15 +122,33 @@ object Action_HashTag {
|
|||
|
||||
// 分類した順に選択肢を追加する
|
||||
for(a in list_original) {
|
||||
dialog.addAction(AcctColor.getStringWithNickname(activity, R.string.open_in_account, a.acct))
|
||||
dialog.addAction(
|
||||
AcctColor.getStringWithNickname(
|
||||
activity,
|
||||
R.string.open_in_account,
|
||||
a.acct
|
||||
)
|
||||
)
|
||||
{ timeline(activity, pos, a, tag_without_sharp) }
|
||||
}
|
||||
for(a in list_original_pseudo) {
|
||||
dialog.addAction(AcctColor.getStringWithNickname(activity, R.string.open_in_account, a.acct))
|
||||
dialog.addAction(
|
||||
AcctColor.getStringWithNickname(
|
||||
activity,
|
||||
R.string.open_in_account,
|
||||
a.acct
|
||||
)
|
||||
)
|
||||
{ timeline(activity, pos, a, tag_without_sharp) }
|
||||
}
|
||||
for(a in list_other) {
|
||||
dialog.addAction(AcctColor.getStringWithNickname(activity, R.string.open_in_account, a.acct))
|
||||
dialog.addAction(
|
||||
AcctColor.getStringWithNickname(
|
||||
activity,
|
||||
R.string.open_in_account,
|
||||
a.acct
|
||||
)
|
||||
)
|
||||
{ timeline(activity, pos, a, tag_without_sharp) }
|
||||
}
|
||||
|
||||
|
|
|
@ -36,8 +36,7 @@ object Action_Instance {
|
|||
}
|
||||
if(account_list.isEmpty()) {
|
||||
// 持ってないなら疑似アカウントを追加する
|
||||
val ai = addPseudoAccount(activity, host)
|
||||
if(ai != null) {
|
||||
addPseudoAccount(activity, host) { ai ->
|
||||
activity.addColumn(pos, ai, Column.TYPE_LOCAL)
|
||||
}
|
||||
} else {
|
||||
|
@ -53,7 +52,6 @@ object Action_Instance {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// ドメインブロック
|
||||
fun blockDomain(
|
||||
activity : ActMain, access_info : SavedAccount, domain : String, bBlock : Boolean
|
||||
|
@ -72,7 +70,8 @@ object Action_Instance {
|
|||
)
|
||||
|
||||
var request_builder = Request.Builder()
|
||||
request_builder = if(bBlock) request_builder.post(body) else request_builder.delete(body)
|
||||
request_builder =
|
||||
if(bBlock) request_builder.post(body) else request_builder.delete(body)
|
||||
|
||||
return client.request("/api/v1/domain_blocks", request_builder)
|
||||
}
|
||||
|
@ -86,7 +85,11 @@ object Action_Instance {
|
|||
column.onDomainBlockChanged(access_info, domain, bBlock)
|
||||
}
|
||||
|
||||
showToast(activity, false, if(bBlock) R.string.block_succeeded else R.string.unblock_succeeded)
|
||||
showToast(
|
||||
activity,
|
||||
false,
|
||||
if(bBlock) R.string.block_succeeded else R.string.unblock_succeeded
|
||||
)
|
||||
|
||||
} else {
|
||||
showToast(activity, false, result.error)
|
||||
|
@ -190,6 +193,4 @@ object Action_Instance {
|
|||
showToast(activity, false, R.string.missing_available_account)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -698,12 +698,14 @@ object Action_Toot {
|
|||
|
||||
// 同タンスのアカウントがないなら、疑似アカウントで開く選択肢
|
||||
if(local_account_list.isEmpty()) {
|
||||
|
||||
val isMisskey = TootStatus.reStatusPageMisskey.matcher(url).find()
|
||||
|
||||
if(status_id_original != null) {
|
||||
dialog.addAction(
|
||||
activity.getString(R.string.open_in_pseudo_account, "?@$host_original")
|
||||
) {
|
||||
val sa = addPseudoAccount(activity, host_original)
|
||||
if(sa != null) {
|
||||
addPseudoAccount(activity, host_original, isMisskey = isMisskey) { sa ->
|
||||
conversationLocal(activity, pos, sa, status_id_original)
|
||||
}
|
||||
}
|
||||
|
@ -711,8 +713,7 @@ object Action_Toot {
|
|||
dialog.addAction(
|
||||
activity.getString(R.string.open_in_pseudo_account, "?@$host_original")
|
||||
) {
|
||||
val sa = addPseudoAccount(activity, host_original)
|
||||
if(sa != null) {
|
||||
addPseudoAccount(activity, host_original, isMisskey = isMisskey) { sa ->
|
||||
conversationRemote(activity, pos, sa, url)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1478,16 +1478,22 @@ fun TootApiClient.syncStatus(accessInfo : SavedAccount, urlArg : String) : TootA
|
|||
val m = TootStatus.reStatusPageMisskey.matcher(urlArg)
|
||||
if(m.find()) {
|
||||
val host = m.group(1)
|
||||
val client2 = TootApiClient(context, callback = callback)
|
||||
client2.instance =host
|
||||
val params = JSONObject().put("uri", urlArg)
|
||||
val result = client2.request("/api/ap/show", params.toPostRequestBuilder())
|
||||
if(result == null || result.error != null) return result
|
||||
val noteId = m.group(2)
|
||||
|
||||
val obj = parseMisskeyApShow(
|
||||
TootParser(context, accessInfo,serviceType = ServiceType.MISSKEY),
|
||||
result.jsonObject
|
||||
) as? TootStatus
|
||||
val result = TootApiClient(context, callback = callback)
|
||||
.apply { instance = host }
|
||||
.request(
|
||||
"/api/notes/show",
|
||||
JSONObject()
|
||||
.put("noteId", noteId)
|
||||
.toPostRequestBuilder()
|
||||
) ?: return null
|
||||
|
||||
val obj = TootParser(
|
||||
context,
|
||||
accessInfo,
|
||||
serviceType = ServiceType.MISSKEY
|
||||
).status(result.jsonObject)
|
||||
|
||||
if(obj != null) {
|
||||
if(host.equals(accessInfo.host, ignoreCase = true)) {
|
||||
|
@ -1499,7 +1505,6 @@ fun TootApiClient.syncStatus(accessInfo : SavedAccount, urlArg : String) : TootA
|
|||
url = uri
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return if(accessInfo.isMisskey) {
|
||||
|
|
Loading…
Reference in New Issue