予約した投稿の一覧と削除(試験実装)

This commit is contained in:
tateisu 2019-01-06 19:17:54 +09:00
parent e7428f6bb9
commit daff46da89
9 changed files with 135 additions and 11 deletions

View File

@ -610,7 +610,16 @@ class ActMain : AppCompatActivity()
private fun refreshAfterPost() {
val posted_acct = this.posted_acct
val posted_status_id = this.posted_status_id
if(posted_acct?.isNotEmpty() == true && posted_status_id != null) {
if( posted_acct?.isNotEmpty() == true && posted_status_id == null) {
// 予約投稿なら予約投稿リストをリロードする
for(column in app_state.column_list) {
if( column.column_type == Column.TYPE_SCHEDULED_STATUS && column.access_info.acct == posted_acct){
column.startLoading()
}
}
}else if(posted_acct?.isNotEmpty() == true && posted_status_id != null) {
val posted_redraft_id = this.posted_redraft_id
if(posted_redraft_id != null) {
@ -830,10 +839,13 @@ class ActMain : AppCompatActivity()
REQUEST_CODE_POST -> if(data != null) {
etQuickToot.setText("")
posted_acct = data.getStringExtra(ActPost.EXTRA_POSTED_ACCT)
posted_status_id = EntityId.from(data, ActPost.EXTRA_POSTED_STATUS_ID)
posted_reply_id = EntityId.from(data, ActPost.EXTRA_POSTED_REPLY_ID)
posted_redraft_id = EntityId.from(data, ActPost.EXTRA_POSTED_REDRAFT_ID)
if(! data.extras.containsKey(ActPost.EXTRA_POSTED_STATUS_ID) ){
posted_status_id = null
}else {
posted_status_id = EntityId.from(data, ActPost.EXTRA_POSTED_STATUS_ID)
posted_reply_id = EntityId.from(data, ActPost.EXTRA_POSTED_REPLY_ID)
posted_redraft_id = EntityId.from(data, ActPost.EXTRA_POSTED_REDRAFT_ID)
}
}
REQUEST_CODE_COLUMN_COLOR -> if(data != null) {

View File

@ -2134,7 +2134,9 @@ class ActPost : AppCompatActivity(),
override fun onScheduledPostComplete(target_account : SavedAccount) {
showToast(this@ActPost,false,getString(R.string.scheduled_status_sent))
setResult(Activity.RESULT_CANCELED)
val data = Intent()
data.putExtra(EXTRA_POSTED_ACCT, target_account.acct)
setResult(RESULT_OK, data)
isPostComplete = true
this@ActPost.finish()
}

View File

@ -2587,10 +2587,10 @@ class Column(
private fun getScheduledStatuses(client:TootApiClient):TootApiResult?{
val result = client.request("/api/v1/scheduled_statuses")
val src = parser.statusList(result?.jsonArray)
list_tmp = addWithFilterStatus(list_tmp,src)
val src = parseList(::TootScheduled,parser,result?.jsonArray)
list_tmp = addAll(list_tmp,src)
// TODO: paging?
// ページングはないっぽい
idOld = null
idRecent = null
@ -6919,6 +6919,19 @@ class Column(
}
}
fun onScheduleDeleted(item : TootScheduled) {
val tmp_list = ArrayList<TimelineItem>(list_data.size)
for(o in list_data) {
if(o === item ) continue
tmp_list.add(o)
}
if(tmp_list.size != list_data.size) {
list_data.clear()
list_data.addAll(tmp_list)
fireShowContent(reason = "onScheduleDeleted")
}
}
val isMisskey : Boolean = access_info.isMisskey
fun saveScrollPosition() {
@ -6975,6 +6988,7 @@ class Column(
)
}
// fun findListIndexByTimelineId(orderId : EntityId) : Int? {
// list_data.forEachIndexed { i, v ->
// if(v.getOrderId() == orderId) return i

View File

@ -498,12 +498,20 @@ internal class ItemViewHolder(
showConversationIcons(item)
}
is TootScheduled ->{
showScheduled(item)
}
else -> {
}
}
b.report()
}
private fun showScheduled(item : TootScheduled) {
llSearchTag.visibility = View.VISIBLE
btnSearchTag.text = TootStatus.formatTime(activity,item.timeScheduledAt,Pref.bpRelativeTimestamp(activity.pref))
}
private fun removeExtraView() {
llExtra.scan { v ->
if(v is MyNetworkImageView) {
@ -1632,6 +1640,17 @@ internal class ItemViewHolder(
item.name // #を含まない
)
}
is TootScheduled ->{
ActionsDialog()
.addAction(activity.getString(R.string.delete)){
Action_Toot.deleteScheduledPost(activity,access_info,item){
column.onScheduleDeleted(item)
showToast(activity,false,R.string.scheduled_post_deleted)
}
}
.show(activity)
}
}
btnListTL -> if(item is TootList) {

View File

@ -1191,4 +1191,42 @@ object Action_Toot {
}
}
fun deleteScheduledPost(
activity:ActMain,
access_info : SavedAccount,
item : TootScheduled,
bConfirmed : Boolean = false,
callback : () -> Unit
) {
if(! bConfirmed ) {
DlgConfirm.openSimple(activity,activity.getString(R.string.scheduled_status_delete_confirm)){
deleteScheduledPost(activity,access_info,item,bConfirmed=true,callback=callback)
}
return
}
TootTaskRunner(activity).run(access_info, object : TootTask {
override fun background(client : TootApiClient) : TootApiResult? {
return client.request(
"/api/v1/scheduled_statuses/${item.id}",
Request.Builder().delete()
)
}
override fun handleResult(result : TootApiResult?) {
result ?: return
val error = result.error
if(error != null) {
showToast(activity, false, error)
return
}
callback()
}
})
}
}

View File

@ -0,0 +1,32 @@
package jp.juggler.subwaytooter.api.entity
import jp.juggler.subwaytooter.api.TootParser
import jp.juggler.util.LogCategory
import jp.juggler.util.parseLong
import jp.juggler.util.parseString
import org.json.JSONObject
class TootScheduled(parser:TootParser,src:JSONObject): TimelineItem(){
companion object {
val log = LogCategory("TootScheduled")
}
val id :EntityId
val scheduled_at: String?
val timeScheduledAt: Long
val media_attachments : ArrayList<TootAttachment>?
init{
id = EntityId.mayDefault( src.parseLong("id"))
scheduled_at = src.parseString("scheduled_at")
timeScheduledAt = TootStatus.parseTime(scheduled_at)
media_attachments =
parseListOrNull(
::TootAttachment,
parser,
src.optJSONArray("media_attachments"),
log
)
}
}

View File

@ -120,7 +120,8 @@
<item
android:id="@+id/nav_scheduled_statuses_list"
android:icon="?attr/ic_timer"
android:title="@string/scheduled_status"/>
android:title="@string/scheduled_status_list"/>
<!--<item-->
<!--android:id="@+id/nav_add_reports"-->
<!--android:icon="?attr/btn_report"-->

View File

@ -834,7 +834,10 @@
<string name="pseudo_account_cant_get_follow_list">疑似アカウントではフォローリストを読めません</string>
<string name="reaction_remove_confirm">あなたのリアクション \"%1$s\"を削除しますか?</string>
<string name="scheduled_status">予約投稿</string>
<string name="scheduled_status_list">予約した投稿</string>
<string name="scheduled_status_sent">予約投稿を送信しました</string>
<string name="scheduled_status_delete_confirm">この予約投稿を削除しますか?</string>
<string name="scheduled_post_deleted">削除しました</string>
<string name="unspecified">指定なし</string>
<string name="scheduled_status_sent">予約投稿を送信しました。</string>
</resources>

View File

@ -856,5 +856,8 @@
<string name="scheduled_status">Scheduled post</string>
<string name="unspecified">Unspecified</string>
<string name="scheduled_status_sent">Scheduled status was sent.</string>
<string name="scheduled_status_delete_confirm">Delete this scheduled status?</string>
<string name="scheduled_post_deleted">Deleted.</string>
<string name="scheduled_status_list">Scheduled status list</string>
</resources>