予約した投稿の一覧と削除(試験実装)
This commit is contained in:
parent
e7428f6bb9
commit
daff46da89
|
@ -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) {
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
|
@ -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"-->
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue