Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 889d298f authored by Moez Bhatti's avatar Moez Bhatti
Browse files

Copy text from multiple messages

Closes #1122
parent 8e4ff3ec
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -201,7 +201,7 @@ class ComposeActivity : QkThemedActivity(), ComposeView {
                && state.query.isEmpty()
        toolbar.menu.findItem(R.id.info)?.isVisible = !state.editingMode && state.selectedMessages == 0
                && state.query.isEmpty()
        toolbar.menu.findItem(R.id.copy)?.isVisible = !state.editingMode && state.selectedMessages == 1
        toolbar.menu.findItem(R.id.copy)?.isVisible = !state.editingMode && state.selectedMessages > 0
        toolbar.menu.findItem(R.id.details)?.isVisible = !state.editingMode && state.selectedMessages == 1
        toolbar.menu.findItem(R.id.delete)?.isVisible = !state.editingMode && state.selectedMessages > 0
        toolbar.menu.findItem(R.id.forward)?.isVisible = !state.editingMode && state.selectedMessages == 1
+13 −4
Original line number Diff line number Diff line
@@ -300,12 +300,21 @@ class ComposeViewModel @Inject constructor(
        // Copy the message contents
        view.optionsItemIntent
                .filter { it == R.id.copy }
                .withLatestFrom(view.messagesSelectedIntent) { _, messages ->
                    messages?.firstOrNull()?.let { messageRepo.getMessage(it) }?.let { message ->
                        ClipboardUtils.copy(context, message.getText())
                        context.makeToast(R.string.toast_copied)
                .withLatestFrom(view.messagesSelectedIntent) { _, messageIds ->
                    val messages = messageIds.mapNotNull(messageRepo::getMessage).sortedBy { it.date }
                    val text = when (messages.size) {
                        1 -> messages.first().getText()
                        else -> messages.foldIndexed("") { index, acc, message ->
                            when {
                                index == 0 -> message.getText()
                                messages[index - 1].compareSender(message) -> "$acc\n${message.getText()}"
                                else -> "$acc\n\n${message.getText()}"
                            }
                        }
                    }

                    ClipboardUtils.copy(context, text)
                }
                .autoDisposable(view.scope())
                .subscribe { view.clearSelection() }