mirror of
https://github.com/Finb/Bark.git
synced 2025-12-08 21:36:01 +00:00
添加删除群组消息功能
This commit is contained in:
parent
437f4f92ab
commit
a82f65833f
@ -2254,6 +2254,29 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"removeNotice" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "This will be permanently removed and cannot be undone."
|
||||
}
|
||||
},
|
||||
"tr" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Bu kalıcı olarak kaldırılacak ve geri alınamaz."
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "将永久删除并且无法恢复。"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"resetFailed" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
|
||||
@ -175,7 +175,7 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
|
||||
input: MessageListViewModel.Input(
|
||||
refresh: tableView.refreshControl!.rx.controlEvent(.valueChanged).asDriver(),
|
||||
loadMore: tableView.mj_footer!.rx.refresh.asDriver(),
|
||||
itemDelete: tableView.rx.itemDeleted.asDriver().map { $0.row },
|
||||
itemDelete: tableView.rx.modelDeleted(MessageListCellItem.self).asDriver(),
|
||||
itemSelected: itemSelected,
|
||||
delete: getBatchDeleteDriver(),
|
||||
groupToggleTap: groupBtn.rx.tap.asDriver(),
|
||||
@ -287,8 +287,25 @@ class MessageListViewController: BaseViewController<MessageListViewModel> {
|
||||
extension MessageListViewController: UITableViewDelegate {
|
||||
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
|
||||
let action = UIContextualAction(style: .destructive, title: NSLocalizedString("removeMessage")) { [weak self] _, _, actionPerformed in
|
||||
self?.tableView.dataSource?.tableView?(self!.tableView, commit: .delete, forRowAt: indexPath)
|
||||
actionPerformed(true)
|
||||
guard let self else { return }
|
||||
|
||||
if let cell = self.tableView.cellForRow(at: indexPath) as? MessageTableViewCell {
|
||||
// 单个消息直接删除,不弹出提示
|
||||
self.tableView.dataSource?.tableView?(self.tableView, commit: .delete, forRowAt: indexPath)
|
||||
actionPerformed(true)
|
||||
return
|
||||
}
|
||||
|
||||
// 群组消息删除,弹出个确认提示
|
||||
let alertView = UIAlertController(title: nil, message: NSLocalizedString("removeNotice"), preferredStyle: .alert)
|
||||
alertView.addAction(UIAlertAction(title: NSLocalizedString("removeMessage"), style: .destructive, handler: { _ in
|
||||
self.tableView.dataSource?.tableView?(self.tableView, commit: .delete, forRowAt: indexPath)
|
||||
actionPerformed(true)
|
||||
}))
|
||||
alertView.addAction(UIAlertAction(title: NSLocalizedString("Cancel"), style: .cancel, handler: { _ in
|
||||
actionPerformed(false)
|
||||
}))
|
||||
self.present(alertView, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
let configuration = UISwipeActionsConfiguration(actions: [action])
|
||||
|
||||
@ -26,7 +26,7 @@ class MessageListViewModel: ViewModel, ViewModelType {
|
||||
/// 加载更多
|
||||
var loadMore: Driver<Void>
|
||||
/// 删除
|
||||
var itemDelete: Driver<Int>
|
||||
var itemDelete: Driver<MessageListCellItem>
|
||||
/// 点击
|
||||
var itemSelected: Driver<Int>
|
||||
/// 批量删除
|
||||
@ -259,16 +259,58 @@ class MessageListViewModel: ViewModel, ViewModelType {
|
||||
}).disposed(by: rx.disposeBag)
|
||||
|
||||
// 删除message
|
||||
input.itemDelete.drive(onNext: { [weak self] index in
|
||||
if var section = messagesRelay.value.first {
|
||||
if let realm = try? Realm(), let message = self?.results?[index] {
|
||||
input.itemDelete.drive(onNext: { [weak self] item in
|
||||
guard let self else { return }
|
||||
|
||||
guard var section = messagesRelay.value.first else {
|
||||
return
|
||||
}
|
||||
|
||||
// 根据类型删除数据
|
||||
switch item {
|
||||
case .message(let model):
|
||||
// 删除数据库对应消息
|
||||
if let realm = try? Realm(),
|
||||
let message = realm.objects(Message.self).filter("id == %@", model.id).first
|
||||
{
|
||||
try? realm.write {
|
||||
realm.delete(message)
|
||||
}
|
||||
}
|
||||
section.messages.remove(at: index)
|
||||
messagesRelay.accept([section])
|
||||
// 删除 cell item
|
||||
section.messages.removeAll { cellItem in
|
||||
if case .message(let m) = cellItem {
|
||||
return m.id == model.id
|
||||
}
|
||||
return false
|
||||
}
|
||||
case .messageGroup(let groupName, _, let messages):
|
||||
// 删除数据库中对应分组
|
||||
if let realm = try? Realm(), let first = messages.first {
|
||||
let messageResult: Results<Message>?
|
||||
if let group = first.group {
|
||||
messageResult = self.results?.filter("group == %@", group)
|
||||
} else {
|
||||
messageResult = self.results?.filter("group == nil")
|
||||
}
|
||||
if let messageResult {
|
||||
try? realm.write {
|
||||
realm.delete(messageResult)
|
||||
}
|
||||
}
|
||||
}
|
||||
// 删除 cell item
|
||||
section.messages.removeAll { cellItem in
|
||||
if case .messageGroup(let name, _, _) = cellItem {
|
||||
return name == groupName
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// 应用更改
|
||||
messagesRelay.accept([section])
|
||||
|
||||
}).disposed(by: rx.disposeBag)
|
||||
|
||||
// 批量删除
|
||||
|
||||
@ -17,6 +17,8 @@ enum MessageListCellDateStyle {
|
||||
|
||||
class MessageItemModel {
|
||||
var id: String = ""
|
||||
var group: String?
|
||||
|
||||
var attributedText: NSAttributedString?
|
||||
var dateText: String?
|
||||
|
||||
@ -33,6 +35,9 @@ class MessageItemModel {
|
||||
}
|
||||
|
||||
init(message: Message) {
|
||||
self.id = message.id
|
||||
self.group = message.group
|
||||
|
||||
let title = message.title ?? ""
|
||||
let subtitle = message.subtitle ?? ""
|
||||
let body = message.body ?? ""
|
||||
@ -83,7 +88,6 @@ class MessageItemModel {
|
||||
]))
|
||||
}
|
||||
|
||||
self.id = message.id
|
||||
self.attributedText = text
|
||||
self.createDate = message.createDate
|
||||
defer {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user