104
97
multiRecipient.forceActiveFocus()
100
function sendMessage(text, participants, attachments) {
101
// check if at least one account is selected
102
if (!messages.account) {
103
Qt.inputMethod.hide()
104
PopupUtils.open(Qt.createComponent("Dialogs/NoSIMCardSelectedDialog.qml").createObject(messages))
108
// create the new thread and update the threadId list
109
var threadId = eventModel.threadIdForParticipants(messages.account.accountId,
110
HistoryThreadModel.EventTypeText,
112
HistoryThreadModel.MatchPhoneNumber,
114
for (var i=0; i < eventModel.count; i++) {
115
var event = eventModel.get(i)
116
if (event.senderId == "self" && event.accountId != messages.account.accountId) {
117
// if the last outgoing message used a different accountId, add an
118
// information event and quit the loop
119
eventModel.writeTextInformationEvent(messages.account.accountId,
124
} else if (event.senderId == "self" && event.accountId == messages.account.accountId) {
125
// in case last ougoing event used the same accountId, just skip
130
if (!sendMessageNetworkCheck()) {
131
// we can't simply send the message as the handler checks for
132
// connection state. while this is not fixed, we generate the event here
133
// and insert it into the history service
135
var timestamp = new Date()
136
var tmpEventId = timestamp.toISOString()
137
event["accountId"] = messages.account.accountId
138
event["threadId"] = threadId
139
event["eventId"] = tmpEventId
140
event["type"] = HistoryEventModel.MessageTypeText
141
event["participants"] = participants
142
event["senderId"] = "self"
143
event["timestamp"] = timestamp
144
event["newEvent"] = false
145
event["message"] = text
146
event["messageStatus"] = HistoryEventModel.MessageStatusPermanentlyFailed
147
event["readTimestamp"] = timestamp;
148
event["subject"] = ""; // we dont support subject yet
149
if (attachments.length > 0) {
150
event["messageType"] = HistoryEventModel.MessageTypeMultiPart
151
var newAttachments = []
152
for (var i = 0; i < attachments.length; i++) {
154
var item = attachments[i]
155
attachment["accountId"] = messages.account.accountId
156
attachment["threadId"] = threadId
157
attachment["eventId"] = tmpEventId
158
attachment["attachmentId"] = item[0]
159
attachment["contentType"] = item[1]
160
attachment["filePath"] = item[2]
161
attachment["status"] = HistoryEventModel.AttachmentDownloaded
162
newAttachments.push(attachment)
164
event["attachments"] = newAttachments
166
event["messageType"] = HistoryEventModel.MessageTypeText
168
eventModel.writeEvents([event]);
170
var isMMS = attachments.length > 0
171
var isMmsGroupChat = participants.length > 1 && telepathyHelper.mmsGroupChat
172
// mms group chat only works if we know our own phone number
173
var isSelfContactKnown = account.selfContactId != ""
174
if (isMMS || (isMmsGroupChat && isSelfContactKnown)) {
175
chatManager.sendMMS(participants, text, attachments, messages.account.accountId)
177
chatManager.sendMessage(participants, text, messages.account.accountId)
181
if (multipleAccounts && !telepathyHelper.defaultMessagingAccount && !settings.messagesDontAsk) {
182
Qt.inputMethod.hide()
183
PopupUtils.open(Qt.createComponent("Dialogs/SetDefaultSIMCardDialog.qml").createObject(messages))
107
188
// this is necessary to automatically update the view when the
108
189
// default account changes in system settings
925
997
if (participants.length == 0) {
926
998
participants = multiRecipient.recipients
928
// create the new thread and update the threadId list
929
var threadId = eventModel.threadIdForParticipants(messages.account.accountId,
930
HistoryThreadModel.EventTypeText,
932
HistoryThreadModel.MatchPhoneNumber,
934
for (var i=0; i < eventModel.count; i++) {
935
var event = eventModel.get(i)
936
if (event.senderId == "self" && event.accountId != messages.account.accountId) {
937
// if the last outgoing message used a different accountId, add an
938
// information event and quit the loop
939
eventModel.writeTextInformationEvent(messages.account.accountId,
944
} else if (event.senderId == "self" && event.accountId == messages.account.accountId) {
945
// in case last ougoing event used the same accountId, just skip
1001
var newAttachments = []
1002
for (var i = 0; i < attachments.count; i++) {
1004
var item = attachments.get(i)
1005
// we dont include smil files. they will be auto generated
1006
if (item.contentType.toLowerCase() === "application/smil") {
1009
attachment.push(item.name)
1010
attachment.push(item.contentType)
1011
attachment.push(item.filePath)
1012
newAttachments.push(attachment)
950
var isMMS = attachments.count > 0
951
var isMmsGroupChat = participants.length > 1 && telepathyHelper.mmsGroupChat
952
// mms group chat only works if we known our own phone number
953
var isSelfContactKnown = account.selfContactId != ""
954
if (isMMS || (isMmsGroupChat && isSelfContactKnown)) {
955
var newAttachments = []
956
for (var i = 0; i < attachments.count; i++) {
958
var item = attachments.get(i)
959
attachment.push(item.name)
960
attachment.push(item.contentType)
961
attachment.push(item.filePath)
962
newAttachments.push(attachment)
964
chatManager.sendMMS(participants, textEntry.text, newAttachments, messages.account.accountId)
1015
// if sendMessage succeeds it means the message was either sent or
1016
// injected into the history service so the user can retry later
1017
if (sendMessage(textEntry.text, participants, newAttachments)) {
965
1018
textEntry.text = ""
966
1019
attachments.clear()
970
chatManager.sendMessage(participants, textEntry.text, messages.account.accountId)