From daff46da89429f415eaae2b03fa9d2d04c03da32 Mon Sep 17 00:00:00 2001 From: tateisu Date: Sun, 6 Jan 2019 19:17:54 +0900 Subject: [PATCH] =?UTF-8?q?=E4=BA=88=E7=B4=84=E3=81=97=E3=81=9F=E6=8A=95?= =?UTF-8?q?=E7=A8=BF=E3=81=AE=E4=B8=80=E8=A6=A7=E3=81=A8=E5=89=8A=E9=99=A4?= =?UTF-8?q?(=E8=A9=A6=E9=A8=93=E5=AE=9F=E8=A3=85)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/jp/juggler/subwaytooter/ActMain.kt | 22 ++++++++--- .../java/jp/juggler/subwaytooter/ActPost.kt | 4 +- .../java/jp/juggler/subwaytooter/Column.kt | 20 ++++++++-- .../jp/juggler/subwaytooter/ItemViewHolder.kt | 19 ++++++++++ .../subwaytooter/action/Action_Toot.kt | 38 +++++++++++++++++++ .../subwaytooter/api/entity/TootScheduled.kt | 32 ++++++++++++++++ app/src/main/res/menu/menu_navi_drawer.xml | 3 +- app/src/main/res/values-ja/strings.xml | 5 ++- app/src/main/res/values/strings.xml | 3 ++ 9 files changed, 135 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/jp/juggler/subwaytooter/api/entity/TootScheduled.kt diff --git a/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt b/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt index 8d0a5c83..b887820d 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt @@ -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) { diff --git a/app/src/main/java/jp/juggler/subwaytooter/ActPost.kt b/app/src/main/java/jp/juggler/subwaytooter/ActPost.kt index ac23497a..0bfca8df 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ActPost.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ActPost.kt @@ -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() } diff --git a/app/src/main/java/jp/juggler/subwaytooter/Column.kt b/app/src/main/java/jp/juggler/subwaytooter/Column.kt index bd3200a3..ee4c1d9f 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/Column.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/Column.kt @@ -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(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 diff --git a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt index f423e3c9..3fc9192a 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt @@ -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) { diff --git a/app/src/main/java/jp/juggler/subwaytooter/action/Action_Toot.kt b/app/src/main/java/jp/juggler/subwaytooter/action/Action_Toot.kt index 6f40ab72..7d4a8852 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/action/Action_Toot.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/action/Action_Toot.kt @@ -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() + } + }) + } + } diff --git a/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootScheduled.kt b/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootScheduled.kt new file mode 100644 index 00000000..a40a19ef --- /dev/null +++ b/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootScheduled.kt @@ -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? + + 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 + ) + } +} \ No newline at end of file diff --git a/app/src/main/res/menu/menu_navi_drawer.xml b/app/src/main/res/menu/menu_navi_drawer.xml index 247068a4..325a5b6e 100644 --- a/app/src/main/res/menu/menu_navi_drawer.xml +++ b/app/src/main/res/menu/menu_navi_drawer.xml @@ -120,7 +120,8 @@ + android:title="@string/scheduled_status_list"/> + diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index ee08bd9e..e74de9fc 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -834,7 +834,10 @@ 疑似アカウントではフォローリストを読めません あなたのリアクション \"%1$s\"を削除しますか? 予約投稿 + 予約した投稿 + 予約投稿を送信しました + この予約投稿を削除しますか? + 削除しました 指定なし - 予約投稿を送信しました。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bfba80af..fd383407 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -856,5 +856,8 @@ Scheduled post Unspecified Scheduled status was sent. + Delete this scheduled status? + Deleted. + Scheduled status list