インスタンス情報カラム、会話ビューカラム

This commit is contained in:
tateisu 2018-08-20 14:10:56 +09:00
parent 92b0ef9441
commit 9c929baa78
7 changed files with 149 additions and 70 deletions

View File

@ -691,6 +691,7 @@ class Column(
}
}
internal fun getColumnName(bLong : Boolean) : String {
return when(column_type) {
@ -1552,11 +1553,8 @@ class Column(
} else {
// カラムに紐付けられたアカウントのタンスのインスタンス情報
}
val result = client.request("/api/v1/instance")
val jsonObject = result?.jsonObject
if(jsonObject != null) {
instance_tmp = parseItem(::TootInstance, parser, jsonObject)
}
val result = client.getInstanceInformation2()
instance_tmp = result?.data as? TootInstance
return result
}
@ -2026,67 +2024,125 @@ class Column(
)
TYPE_CONVERSATION -> {
// 指定された発言そのもの
result = client.request(
String.format(Locale.JAPAN, PATH_STATUSES, status_id)
)
var jsonObject = result?.jsonObject ?: return result
val target_status = parser.status(jsonObject)
?: return TootApiResult("TootStatus parse failed.")
// 前後の会話
result = client.request(
String.format(Locale.JAPAN, PATH_STATUSES_CONTEXT, status_id)
)
jsonObject = result?.jsonObject ?: return result
val conversation_context = parseItem(::TootContext, parser, jsonObject)
// 一つのリストにまとめる
target_status.conversation_main = true
if(conversation_context != null) {
this.list_tmp = ArrayList(
1
+ (conversation_context.ancestors?.size ?: 0)
+ (conversation_context.descendants?.size ?: 0)
if(isMisskey){
// 指定された発言そのもの
val queryParams = makeMisskeyBaseParameter(parser)
.put("noteId",status_id)
result = client.request(
"/api/notes/show"
,queryParams.toPostRequestBuilder()
)
//
if(conversation_context.ancestors != null)
addWithFilterStatus(
this.list_tmp,
conversation_context.ancestors
var jsonObject = result?.jsonObject ?: return result
val target_status = parser.status(jsonObject)
?: return TootApiResult("TootStatus parse failed.")
target_status.conversation_main = true
// 祖先
val list_asc = ArrayList<TootStatus>()
while(true){
if( client.isApiCancelled) return null
queryParams.put("offset",list_asc.size)
result = client.request(
"/api/notes/conversation"
,queryParams.toPostRequestBuilder()
)
//
addOne(list_tmp, target_status)
//
if(conversation_context.descendants != null)
addWithFilterStatus(
this.list_tmp,
conversation_context.descendants
)
//
} else {
this.list_tmp = addOne(this.list_tmp, target_status)
this.list_tmp = addOne(
this.list_tmp,
TootMessageHolder(context.getString(R.string.toot_context_parse_failed))
)
}
// カードを取得する
if(! Pref.bpDontRetrievePreviewCard(context)) {
this.list_tmp?.forEach { o ->
if(o is TootStatus)
o.card = parseItem(
::TootCard,
client.request("/api/v1/statuses/" + o.id + "/card")?.jsonObject
)
val jsonArray = result?.jsonArray ?: return result
val src = parser.statusList(jsonArray)
if(src.isEmpty()) break
list_asc.addAll(src)
}
// 直接の子リプライ。(子孫をたどることまではしない)
val list_desc = ArrayList<TootStatus>()
while(true){
if( client.isApiCancelled) return null
queryParams.put("offset",list_desc.size)
result = client.request(
"/api/notes/replies"
,queryParams.toPostRequestBuilder()
)
val jsonArray = result?.jsonArray ?: return result
val src = parser.statusList(jsonArray)
if(src.isEmpty()) break
list_desc.addAll(src)
}
// 一つのリストにまとめる
this.list_tmp = ArrayList<TimelineItem>(
list_asc.size + list_desc.size +2
).apply{
addAll( list_asc.sortedBy{it.time_created_at })
add( target_status)
addAll( list_desc.sortedBy{it.time_created_at })
add( TootMessageHolder(context.getString(R.string.misskey_cant_show_all_descendants)))
}
//
return result
}else{
// 指定された発言そのもの
result = client.request(
String.format(Locale.JAPAN, PATH_STATUSES, status_id)
)
var jsonObject = result?.jsonObject ?: return result
val target_status = parser.status(jsonObject)
?: return TootApiResult("TootStatus parse failed.")
// 前後の会話
result = client.request(
String.format(Locale.JAPAN, PATH_STATUSES_CONTEXT, status_id)
)
jsonObject = result?.jsonObject ?: return result
val conversation_context = parseItem(::TootContext, parser, jsonObject)
// 一つのリストにまとめる
target_status.conversation_main = true
if(conversation_context != null) {
this.list_tmp = ArrayList(
1
+ (conversation_context.ancestors?.size ?: 0)
+ (conversation_context.descendants?.size ?: 0)
)
//
if(conversation_context.ancestors != null)
addWithFilterStatus(
this.list_tmp,
conversation_context.ancestors
)
//
addOne(list_tmp, target_status)
//
if(conversation_context.descendants != null)
addWithFilterStatus(
this.list_tmp,
conversation_context.descendants
)
//
} else {
this.list_tmp = addOne(this.list_tmp, target_status)
this.list_tmp = addOne(
this.list_tmp,
TootMessageHolder(context.getString(R.string.toot_context_parse_failed))
)
}
// カードを取得する
if(! Pref.bpDontRetrievePreviewCard(context)) {
this.list_tmp?.forEach { o ->
if(o is TootStatus)
o.card = parseItem(
::TootCard,
client.request("/api/v1/statuses/" + o.id + "/card")?.jsonObject
)
}
}
//
return result
}
//
return result
}
TYPE_TREND_TAG -> {

View File

@ -338,6 +338,7 @@ internal class ItemViewHolder(
this.boost_account = null
this.follow_account = null
this.boost_time = 0L
this.viewRoot.setBackgroundColor(0)
llBoosted.visibility = View.GONE
llFollow.visibility = View.GONE
@ -595,6 +596,10 @@ internal class ItemViewHolder(
this.status_showing = status
llStatus.visibility = View.VISIBLE
if( status.conversation_main) {
this.viewRoot.setBackgroundColor( (Styler.getAttributeColor(activity,R.attr.colorImageButtonAccent) and 0xffffff ) or 0x20000000)
}
showStatusTime(activity, tvTime, who = status.account, status = status)
val whoRef = status.accountRef

View File

@ -171,11 +171,15 @@ internal class ViewHolderHeaderInstance(
R.id.btnEmail -> instance?.email?.let { email ->
try {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_EMAIL, arrayOf(email))
intent.putExtra(Intent.EXTRA_TEXT, email)
activity.startActivity(intent)
if(email.contains("://") ) {
App1.openCustomTab(activity,email)
}else {
val intent = Intent(Intent.ACTION_SEND)
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_EMAIL, arrayOf(email))
intent.putExtra(Intent.EXTRA_TEXT, email)
activity.startActivity(intent)
}
} catch(ex : Throwable) {
log.e(ex, "startActivity failed. mail=$email")

View File

@ -72,7 +72,12 @@ class TootInstance(parser : TootParser, src : JSONObject) {
this.uri = parser.linkHelper.host
this.title = parser.linkHelper.host
this.description = "(Misskey instance)"
this.email = src.optJSONObject("maintainer")?.parseString("url")
val sv = src.optJSONObject("maintainer")?.parseString("url")
this.email = when{
sv?.startsWith("mailto:") ==true-> sv.substring(7)
else-> sv
}
this.version = src.parseString("version")
this.decoded_version = VersionString(version)
this.stats = null
@ -86,7 +91,13 @@ class TootInstance(parser : TootParser, src : JSONObject) {
this.uri = src.parseString("uri")
this.title = src.parseString("title")
this.description = src.parseString("description")
this.email = src.parseString("email")
val sv = src.parseString("email")
this.email = when{
sv?.startsWith("mailto:") ==true-> sv.substring(7)
else-> sv
}
this.version = src.parseString("version")
this.decoded_version = VersionString(version)
this.stats = parseItem(::Stats, src.optJSONObject("stats"))

View File

@ -739,8 +739,9 @@
<string name="replies_count_none">None</string>
<string name="missing_available_account">There is no account available for this purpose.</string>
<string name="misskey_account_not_supported">Misskey account is not supported.</string>
<string name="misskey_cant_show_all_descendants">In Misskey, only direct replies to target note are enumerated. Not all descendants can be displayed.</string>
<!--<string name="abc_action_bar_home_description">Revenir à l\'accueil</string>-->
<!--<string name="abc_action_bar_home_description">Revenir à l\'accueil</string>-->
<!--<string name="abc_action_bar_home_description_format">%1$s, %2$s</string>-->
<!--<string name="abc_action_bar_home_subtitle_description_format">%1$s, %2$s, %3$s</string>-->
<!--<string name="abc_action_bar_up_description">Revenir en haut de la page</string>-->

View File

@ -1018,5 +1018,6 @@
<string name="replies_count_none">なし</string>
<string name="missing_available_account">この目的に使えるアカウントがありません。</string>
<string name="misskey_account_not_supported">Misskey account is not supported.</string>
<string name="misskey_cant_show_all_descendants">Misskeyでは対象ートへの直接の返信が列挙されます。子孫の全ては表示できません。</string>
</resources>

View File

@ -725,4 +725,5 @@
<string name="replies_count_none">None</string>
<string name="missing_available_account">There is no account available for this purpose.</string>
<string name="misskey_account_not_supported">Misskey account is not supported.</string>
<string name="misskey_cant_show_all_descendants">In Misskey, only direct replies to target note are enumerated. Not all descendants can be displayed.</string>
</resources>