Merge lp:~libqtelegram-team/telegram-app/obtain-messages-model-from-dialogid into lp:~libqtelegram-team/telegram-app/qml-plugin

Proposed by Roberto Mier Escandon
Status: Merged
Merged at revision: 173
Proposed branch: lp:~libqtelegram-team/telegram-app/obtain-messages-model-from-dialogid
Merge into: lp:~libqtelegram-team/telegram-app/qml-plugin
Diff against target: 261 lines (+72/-30)
12 files modified
qmlplugin/data.cpp (+2/-2)
qmlplugin/models/dialogitem.cpp (+2/-2)
qmlplugin/models/dialogitem.h (+2/-1)
qmlplugin/models/dialogsmodel.cpp (+7/-2)
qmlplugin/models/dialogsmodel.h (+1/-0)
qmlplugin/models/dialogsproxy.cpp (+10/-6)
qmlplugin/models/dialogsproxy.h (+2/-3)
qmlplugin/telegramclient.cpp (+10/-0)
qmlplugin/telegramclient.h (+4/-2)
uitest/components/listitems/DlgItem.qml (+5/-0)
uitest/ui/DialogDesignPage.qml (+24/-7)
uitest/uitest.qml (+3/-5)
To merge this branch: bzr merge lp:~libqtelegram-team/telegram-app/obtain-messages-model-from-dialogid
Reviewer Review Type Date Requested Status
Michał Karnicki (community) Approve
Review via email: mp+228059@code.launchpad.net

Description of the change

Added methods in TelegramClient accesible from qml:

Q_INVOKABLE QVariant getMessagesModelOfDialog(qint32 dialogId);
Q_INVOKABLE QVariant getDialog(qint32 dialogId);

First returns a MessagesModel object to be attached to a listView
Second returns a DialogItem object with the general data of that dialog

Both them are necessary to implement in qml the messages page

--------------------

This commit also fix a hidden bug: getMessagesModel and getMessagesModelFromId were set in DialogsModel but not in DialogsProxy, so they weren't usable from qml.

To post a comment you must log in.
Revision history for this message
Michał Karnicki (karni) wrote :

One in-line comment. Otherwise great.

review: Approve
Revision history for this message
Roberto Mier Escandon (rmescandon) wrote :

No problem (see below)

Revision history for this message
Michał Karnicki (karni) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'qmlplugin/data.cpp'
2--- qmlplugin/data.cpp 2014-07-23 13:39:50 +0000
3+++ qmlplugin/data.cpp 2014-07-24 08:49:31 +0000
4@@ -291,8 +291,8 @@
5 }
6
7 MessageItem *message = topMessage(d->id(), d->isChat());
8- MessagesModel &mm = d->getMessagesModel();
9- mm.append(*message);
10+ MessagesModel *mm = d->messagesModel();
11+ mm->append(*message);
12 result.append(d);
13 }
14 return result;
15
16=== modified file 'qmlplugin/models/dialogitem.cpp'
17--- qmlplugin/models/dialogitem.cpp 2014-07-23 09:47:04 +0000
18+++ qmlplugin/models/dialogitem.cpp 2014-07-24 08:49:31 +0000
19@@ -95,8 +95,8 @@
20 }
21 }
22
23-MessagesModel &DialogItem::getMessagesModel() {
24- return m_messagesModel;
25+MessagesModel *DialogItem::messagesModel() {
26+ return &m_messagesModel;
27 }
28
29 void DialogItem::dump() {
30
31=== modified file 'qmlplugin/models/dialogitem.h'
32--- qmlplugin/models/dialogitem.h 2014-07-22 12:02:01 +0000
33+++ qmlplugin/models/dialogitem.h 2014-07-24 08:49:31 +0000
34@@ -23,6 +23,7 @@
35 Q_PROPERTY(qint32 membersOnline READ membersOnline)
36 Q_PROPERTY(bool userOnline READ userOnline)
37 Q_PROPERTY(qint32 lastSeenOnline READ lastSeenOnline)
38+ Q_PROPERTY(MessagesModel* messagesModel READ messagesModel)
39
40 public:
41
42@@ -56,7 +57,7 @@
43 void appendMessage(const MessageItem &m);
44 void setIsTyping(qint32 whoisTyping);
45
46- MessagesModel &getMessagesModel();
47+ MessagesModel *messagesModel();
48
49 void dump();
50
51
52=== modified file 'qmlplugin/models/dialogsmodel.cpp'
53--- qmlplugin/models/dialogsmodel.cpp 2014-07-23 11:18:25 +0000
54+++ qmlplugin/models/dialogsmodel.cpp 2014-07-24 08:49:31 +0000
55@@ -68,13 +68,18 @@
56 return QVariant::fromValue(&d);
57 }
58
59+QVariant DialogsModel::getFromId(int dialogId) {
60+ qint32 pos = m_dlgIdsMap.value(dialogId, -1);
61+ return get(pos);
62+}
63+
64 QVariant DialogsModel::getMessagesModel(int row) {
65 if ((row < 0) || (row >= m_dialogs.size())) {
66 return QVariant();
67 }
68 DialogItem &tlDialog = m_dialogs[row];
69- MessagesModel &mm = tlDialog.getMessagesModel();
70- return QVariant::fromValue(&mm);
71+ MessagesModel *mm = tlDialog.messagesModel();
72+ return QVariant::fromValue(mm);
73 }
74
75 QVariant DialogsModel::getMessagesModelFromId(int dialogId) {
76
77=== modified file 'qmlplugin/models/dialogsmodel.h'
78--- qmlplugin/models/dialogsmodel.h 2014-07-23 09:47:04 +0000
79+++ qmlplugin/models/dialogsmodel.h 2014-07-24 08:49:31 +0000
80@@ -57,6 +57,7 @@
81 Qt::ItemFlags flags(const QModelIndex &index) const;
82
83 Q_INVOKABLE QVariant get(int row);
84+ Q_INVOKABLE QVariant getFromId(int dialogId);
85 Q_INVOKABLE QVariant getMessagesModel(int row);
86 Q_INVOKABLE QVariant getMessagesModelFromId(int dialogId);
87
88
89=== modified file 'qmlplugin/models/dialogsproxy.cpp'
90--- qmlplugin/models/dialogsproxy.cpp 2014-07-23 09:47:04 +0000
91+++ qmlplugin/models/dialogsproxy.cpp 2014-07-24 08:49:31 +0000
92@@ -5,14 +5,18 @@
93 QSortFilterProxyModel(parent) {
94 }
95
96-bool DialogsProxy::lessThan(const QModelIndex &left, const QModelIndex &right) const {
97- QVariant leftData = sourceModel()->data(left, DialogsModel::TopMessageDateRole);
98- QVariant rightData = sourceModel()->data(right, DialogsModel::TopMessageDateRole);
99- return leftData.toInt() < rightData.toInt();
100-}
101-
102 QVariant DialogsProxy::get(int row) {
103 QModelIndex proxyIndex = index(row, 0);
104 QModelIndex modelIndex = mapToSource(proxyIndex);
105 return static_cast<DialogsModel *>(sourceModel())->get(modelIndex.row());
106 }
107+
108+QVariant DialogsProxy::getMessagesModel(int row) {
109+ QModelIndex proxyIndex = index(row, 0);
110+ QModelIndex modelIndex = mapToSource(proxyIndex);
111+ return static_cast<DialogsModel *>(sourceModel())->getMessagesModel(modelIndex.row());
112+}
113+
114+QVariant DialogsProxy::getMessagesModelFromId(int dialogId) {
115+ return static_cast<DialogsModel *>(sourceModel())->getMessagesModelFromId(dialogId);
116+}
117
118=== modified file 'qmlplugin/models/dialogsproxy.h'
119--- qmlplugin/models/dialogsproxy.h 2014-07-23 09:47:04 +0000
120+++ qmlplugin/models/dialogsproxy.h 2014-07-24 08:49:31 +0000
121@@ -10,9 +10,8 @@
122 explicit DialogsProxy(QObject *parent = 0);
123
124 Q_INVOKABLE QVariant get(int row);
125-
126-protected:
127- bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
128+ Q_INVOKABLE QVariant getMessagesModel(int row);
129+ Q_INVOKABLE QVariant getMessagesModelFromId(int dialogId);
130 };
131
132 #endif // DIALOGSPROXY_H
133
134=== modified file 'qmlplugin/telegramclient.cpp'
135--- qmlplugin/telegramclient.cpp 2014-07-23 11:46:15 +0000
136+++ qmlplugin/telegramclient.cpp 2014-07-24 08:49:31 +0000
137@@ -77,6 +77,16 @@
138 m_telegram->contactsGetContacts();
139 }
140
141+QVariant TelegramClient::getMessagesModelOfDialog(qint32 dialogId) {
142+ MessagesModel &mm = ModelsManager::instance()->messagesModel(dialogId);
143+ return QVariant::fromValue(&mm);
144+}
145+
146+QVariant TelegramClient::getDialog(qint32 dialogId) {
147+ DialogsModel &dm = ModelsManager::instance()->dialogsModel();
148+ return dm.getFromId(dialogId);
149+}
150+
151 qint64 TelegramClient::messagesSendMessage(TLInputPeer *peer, const QString &message) {
152 qint64 requestId = RawApiClient::messagesSendMessage(peer, message);
153 qint32 dialogsItemId = peer->userId();
154
155=== modified file 'qmlplugin/telegramclient.h'
156--- qmlplugin/telegramclient.h 2014-07-22 12:02:01 +0000
157+++ qmlplugin/telegramclient.h 2014-07-24 08:49:31 +0000
158@@ -30,8 +30,10 @@
159
160 Q_INVOKABLE void initTelegramLibrary();
161
162- // Working with messages
163- Q_INVOKABLE qint64 messagesSendMessage (TLInputPeer *peer, const QString &message);
164+ Q_INVOKABLE QVariant getMessagesModelOfDialog(qint32 dialogId);
165+ Q_INVOKABLE QVariant getDialog(qint32 dialogId);
166+
167+ Q_INVOKABLE qint64 messagesSendMessage(TLInputPeer *peer, const QString &message);
168
169 Q_SIGNALS:
170 void dialogsModelChanged(QSortFilterProxyModel *);
171
172=== modified file 'uitest/components/listitems/DlgItem.qml'
173--- uitest/components/listitems/DlgItem.qml 2014-07-07 13:44:35 +0000
174+++ uitest/components/listitems/DlgItem.qml 2014-07-24 08:49:31 +0000
175@@ -11,5 +11,10 @@
176
177 console.log("ID:" + dialogPage.peerId);
178 console.log("ISCHAT" + dialogPage.peerIsChat);
179+
180+
181+ // fill messages model data
182+ dialogPage.labelText = telegramClient.getDialog(dialogPage.peerId).name;
183+ dialogPage.listModel = telegramClient.getMessagesModelOfDialog(dialogPage.peerId);
184 }
185 }
186
187=== modified file 'uitest/ui/DialogDesignPage.qml'
188--- uitest/ui/DialogDesignPage.qml 2014-07-07 13:44:35 +0000
189+++ uitest/ui/DialogDesignPage.qml 2014-07-24 08:49:31 +0000
190@@ -6,27 +6,44 @@
191
192 property int peerId
193 property int peerIsChat
194+
195 property alias sendMsgTextField : sendMsgTextField
196 property alias backButton: backButton
197+ property alias labelText: label.text
198+ property alias listModel: messagesListView.model
199
200 title: i18n.tr('Dialog');
201
202-// Flickable {
203-// boundsBehavior: Flickable.StopAtBounds
204-
205-// SentPhraseBubble {
206-// text: "ey, nene, que tal te va?"
207-// }
208-// }
209+
210+ ListView {
211+ id: messagesListView
212+ anchors {
213+ top: parent.top
214+ left: parent.left
215+ right: parent.right
216+ bottom: column.top
217+ }
218+
219+ delegate: Text {
220+ text: model.text
221+ }
222+ }
223
224 Column {
225
226+ id: column
227+
228 anchors {
229 left: parent.left
230 right: parent.right
231 bottom: parent.bottom
232 }
233
234+ Label {
235+ id: label
236+
237+ }
238+
239 Button {
240 id: backButton
241 text: "<- Back"
242
243=== modified file 'uitest/uitest.qml'
244--- uitest/uitest.qml 2014-07-23 13:39:50 +0000
245+++ uitest/uitest.qml 2014-07-24 08:49:31 +0000
246@@ -112,13 +112,11 @@
247
248 onAuthSendCallAnswer: verificationCodePage.countdownLabel.text = i18n.tr("calling user's mobile");
249
250-// onAuthLoggedIn: {
251-// console.log("onAuthLoggedIn");
252-// messagesGetDialogs();
253-// }
254-
255 onMessagesGetDialogsAnswer: {
256+ // *Uncomment to render dialogsPage
257 pageStack.showPage(dialogsPage);
258+
259+ // *Uncomment to render contactsPage
260 //pageStack.showPage(contactsPage);
261 }
262

Subscribers

People subscribed via source and target branches

to all changes: