~ps-jenkins/telepathy-ofono/utopic-proposed

« back to all changes in this revision

Viewing changes to ofonotextchannel.cpp

  • Committer: Tiago Salem Herrmann
  • Date: 2013-12-11 14:52:03 UTC
  • mto: This revision was merged to the branch mainline in revision 57.
  • Revision ID: tiago.herrmann@canonical.com-20131211145203-qarhg90rntygc1v2
add support for delivery reports

Show diffs side-by-side

added added

removed removed

Lines of Context:
86
86
    return mBaseChannel;
87
87
}
88
88
 
 
89
void oFonoTextChannel::sendDeliveryReport(const QString &messageId, Tp::DeliveryStatus status)
 
90
{
 
91
    Tp::MessagePartList partList;
 
92
    Tp::MessagePart header;
 
93
    header["message-sender"] = QDBusVariant(mTargetHandle);
 
94
    header["message-sender-id"] = QDBusVariant(mPhoneNumber);
 
95
    header["message-type"] = QDBusVariant(Tp::ChannelTextMessageTypeDeliveryReport);
 
96
    header["delivery-status"] = QDBusVariant(status);
 
97
    header["delivery-token"] = QDBusVariant(messageId);
 
98
    partList << header;
 
99
    mTextChannel->addReceivedMessage(partList);
 
100
}
 
101
 
 
102
void oFonoTextChannel::deliveryReportReceived(const QString &messageId, bool success)
 
103
{
 
104
    sendDeliveryReport(messageId, success ? Tp::DeliveryStatusDelivered : Tp::DeliveryStatusPermanentlyFailed);
 
105
}
 
106
 
89
107
void oFonoTextChannel::messageAcknowledged(const QString &id)
90
108
{
91
109
    Q_EMIT messageRead(id);
105
123
            error->set(TP_QT_ERROR_INVALID_ARGUMENT, mConnection->messageManager()->errorMessage());
106
124
        }
107
125
    }
 
126
    mConnection->addPendingMessage(objpath, mPhoneNumber);
108
127
 
109
128
    OfonoMessage *msg = new OfonoMessage(objpath);
110
129
    QObject::connect(msg, SIGNAL(stateChanged(QString)), SLOT(onOfonoMessageStateChanged(QString)));
117
136
    if(msg) {
118
137
        Tp::DeliveryStatus delivery_status;
119
138
        if (status == "sent") {
120
 
            delivery_status = Tp::DeliveryStatusDelivered;
 
139
            delivery_status = Tp::DeliveryStatusAccepted;
121
140
            msg->deleteLater();
122
141
        } else if(status == "failed") {
123
142
            delivery_status = Tp::DeliveryStatusPermanentlyFailed;
 
143
            mConnection->removePendingMessage(msg->path());
124
144
            msg->deleteLater();
125
145
        } else if(status == "pending") {
126
 
            delivery_status = Tp::DeliveryStatusAccepted;
 
146
            delivery_status = Tp::DeliveryStatusTemporarilyFailed;
127
147
        } else {
128
148
            delivery_status = Tp::DeliveryStatusUnknown;
129
149
        }
130
150
 
131
 
        Tp::MessagePartList partList;
132
 
        Tp::MessagePart header;
133
 
        header["message-sender"] = QDBusVariant(mTargetHandle);
134
 
        header["message-sender-id"] = QDBusVariant(mPhoneNumber);
135
 
        header["message-type"] = QDBusVariant(Tp::ChannelTextMessageTypeDeliveryReport);
136
 
        header["delivery-status"] = QDBusVariant(delivery_status);
137
 
        header["delivery-token"] = QDBusVariant(msg->path());
138
 
        partList << header;
139
 
        mTextChannel->addReceivedMessage(partList);
 
151
        sendDeliveryReport(msg->path(), delivery_status);
140
152
    }
141
153
}
142
154