void Util::exportSMS(QTextStream &out) { GroupModel groupModel; groupModel.enableContactChanges(false); groupModel.setQueryMode(EventModel::SyncQuery); groupModel.getGroups(); EventModel eventModel; ConversationModel model; model.enableContactChanges(false); model.setQueryMode(EventModel::SyncQuery); for (int i = 0; i < groupModel.rowCount(); i++) { Group g = groupModel.group(groupModel.index(i, 0)); model.getEvents(g.id()); // the events got by getEvents is reversed-ordered for (int i = model.rowCount() - 1; i >= 0; i--) { Event event = model.event(model.index(i, 0)); out << QString(event.remoteUid() % QChar(',') % QString::number(event.direction()) % QChar(',') % event.startTime().toLocalTime().toString(QString("yyyy-MM-dd hh:mm:ss")) % QChar(',') % QChar('"') % event.freeText().replace(QChar('"'), QString("\"\"")) % QChar('"')); out << "\n"; } } }
int main(int argc, char **argv) { QApplication app(argc, argv); ConversationModel model; GroupModel groupModel; groupModel.setQueryMode(EventModel::SyncQuery); groupModel.getGroups("/org/freedesktop/Telepathy/Account/gabble/jabber/dut_40localhost0"); model.getEvents(groupModel.group(groupModel.index(0, 0)).id()); QTableView view; view.setModel(&model); view.show(); #if 0 // Examples for accessing group data. You'll have to either use // SyncQuery mode or wait for rowsInserted() or modelReady() before // you can iterate over the model data. for (int i = 0; i < model.rowCount(); i++) { // Model style: qDebug() << model.index(i, EventModel::EventId).data().toString() << model.index(i, EventModel::StartTime).data().toDateTime() << model.index(i, EventModel::LocalUid).data().toString() << model.index(i, EventModel::RemoteUid).data().toString() << model.index(i, EventModel::FreeText).data().toString(); // Event style: Event e = model.event(model.index(i, 0)); // or // Event e = model.index(i, 0).data(Qt::UserRole).value<Event>(); qDebug() << e.id() << e.startTime() << e.localUid() << e.remoteUid() << e.freeText(); } #endif int ret = app.exec(); return ret; }
void Util::importSMS(QTextStream &in) { QString line; GroupModel groupModel; groupModel.enableContactChanges(false); groupModel.setQueryMode(EventModel::SyncQuery); QList<Event> events; int count = 0; int groupId; QMap<QString, int> phoneGroupMap; while (!(line = in.readLine()).isNull()) { count ++; std::cout << "Handling " << count << " messages" << std::endl; QStringList stringList = line.split(QChar(',')); QString remoteUid = stringList.at(0); QString localUid = RING_ACCOUNT; QDateTime startTime = QDateTime::fromString(stringList.at(2), "yyyy-MM-dd hh:mm:ss"); QDateTime endTime = startTime; if (!phoneGroupMap.contains(remoteUid)) { if (!groupModel.getGroups(RING_ACCOUNT, QString(remoteUid))) { std::cout << "Error getting groups!"; return; } else { if (groupModel.rowCount() >= 1) { groupId = groupModel.group(groupModel.index(0, 0)).id(); } else { // new group Group group; group.setLocalUid(localUid); QStringList remoteUids; remoteUids << remoteUid; group.setRemoteUids(remoteUids); if (!groupModel.addGroup(group)) { qCritical() << "Error adding group"; return; } groupId = group.id(); } phoneGroupMap.insert(remoteUid, groupId); } } else { groupId = phoneGroupMap[remoteUid]; } Event::EventDirection direction = Event::UnknownDirection; if (stringList.at(1) == QString("1")) direction = Event::Inbound; else direction = Event::Outbound; Event e; e.setDirection(direction); e.setType(Event::SMSEvent); e.setLocalUid(localUid); e.setMessageToken(QUuid::createUuid().toString()); e.setStartTime(startTime); e.setEndTime(endTime); e.setIsRead(true); e.setStatus(Event::DeliveredStatus); e.setBytesReceived(0); e.setGroupId(groupId); e.setRemoteUid(remoteUid); QString freeText = QStringList(stringList.mid(3)).join(QString(",")); if (freeText.count(QChar('"')) % 2 != 0) { QString nextLine; while (!(nextLine = in.readLine()).isNull()) { freeText += "\n" + nextLine; if (nextLine.count(QChar('"')) % 2 != 0) { break; } } } freeText = freeText.mid(1, freeText.length() - 2); freeText.replace(QString("\"\""), QChar('"')); e.setFreeText(freeText); events.append(e); std::cout << "Handled " << count << " messages" << std::endl; } if (events.count() > 0) { std::cout << "About to commit the changes" << std::endl; EventModel model; Catcher c(&model); if (!model.addEvents(events, false)) { qCritical() << "Error adding events"; return; } c.waitCommit(events.count()); } }