示例#1
0
QPair<int, HistoryKeeper::ChatType> HistoryKeeper::getChatID(const QString &id_str, ChatType ct)
{
    auto it = chats.find(id_str);
    if (it != chats.end())
        return it.value();

    db->exec(QString("INSERT INTO chats (name, ctype) VALUES ('%1', '%2');").arg(id_str).arg(ct));
    updateChatsID();

    return getChatID(id_str, ct);
}
示例#2
0
QList<QString> HistoryKeeper::generateAddChatEntryCmd(const QString& chat, const QString& message, const QString& sender, const QDateTime &dt, bool isSent, QString dispName)
{
    QList<QString> cmds;

    int chat_id = getChatID(chat, ctSingle).first;
    int sender_id = getAliasID(sender);

    cmds.push_back(QString("INSERT INTO history (timestamp, chat_id, sender, message, alias) VALUES (%1, %2, %3, '%4', '%5');")
                   .arg(dt.toMSecsSinceEpoch()).arg(chat_id).arg(sender_id).arg(wrapMessage(message)).arg(dispName));
    cmds.push_back(QString("INSERT INTO sent_status (status) VALUES (%1);").arg(isSent));

    return cmds;
}
示例#3
0
int HistoryKeeper::addChatEntry(const QString& chat, const QString& message, const QString& sender, const QDateTime &dt, bool isSent)
{
    int chat_id = getChatID(chat, ctSingle).first;
    int sender_id = getAliasID(sender);

    db->exec("BEGIN TRANSACTION;");
    db->exec(QString("INSERT INTO history (timestamp, chat_id, sender, message) ") +
             QString("VALUES (%1, %2, %3, '%4');")
             .arg(dt.toMSecsSinceEpoch()).arg(chat_id).arg(sender_id).arg(wrapMessage(message)));
    db->exec(QString("INSERT INTO sent_status (status) VALUES (%1);").arg(isSent));
    db->exec("COMMIT TRANSACTION;");

    messageID++;
    return messageID;
}
示例#4
0
void HistoryKeeper::removeFriendHistory(const QString& chat)
{
    int chat_id = getChatID(chat, ctSingle).first;

    db->exec("BEGIN TRANSACTION;");

    QString cmd = QString("DELETE FROM chats WHERE name = '%1';").arg(chat);
    db->exec(cmd);
    cmd = QString("DELETE FROM aliases WHERE user_id = '%1';").arg(chat);
    db->exec(cmd);
    cmd = QString("DELETE FROM sent_status WHERE id IN (SELECT id FROM history WHERE chat_id = '%1');").arg(chat_id);
    db->exec(cmd);
    cmd = QString("DELETE FROM history WHERE chat_id = '%1';").arg(chat_id);
    db->exec(cmd);

    db->exec("COMMIT TRANSACTION;");
}
示例#5
0
QList<HistoryKeeper::HistMessage> HistoryKeeper::getChatHistory(HistoryKeeper::ChatType ct, const QString &chat,
        const QDateTime &time_from, const QDateTime &time_to)
{
    QList<HistMessage> res;

    qint64 time64_from = time_from.toMSecsSinceEpoch();
    qint64 time64_to = time_to.toMSecsSinceEpoch();

    int chat_id = getChatID(chat, ct).first;

    QSqlQuery dbAnswer;
    if (ct == ctSingle)
    {
        dbAnswer = db->exec(QString("SELECT history.id, timestamp, user_id, message, status, alias FROM history LEFT JOIN sent_status ON history.id = sent_status.id ") +
                            QString("INNER JOIN aliases ON history.sender = aliases.id AND timestamp BETWEEN %1 AND %2 AND chat_id = %3;")
                            .arg(time64_from).arg(time64_to).arg(chat_id));
    }
    else
    {
        // no groupchats yet
    }

    while (dbAnswer.next())
    {
        qint64 id = dbAnswer.value(0).toLongLong();
        qint64 timeInt = dbAnswer.value(1).toLongLong();
        QString sender = dbAnswer.value(2).toString();
        QString senderName = dbAnswer.value(5).toString();
        QString message = unWrapMessage(dbAnswer.value(3).toString());
        bool isSent = true;
        if (!dbAnswer.value(4).isNull())
            isSent = dbAnswer.value(4).toBool();

        QDateTime time = QDateTime::fromMSecsSinceEpoch(timeInt);

        res.push_back(HistMessage(id, "", sender, message, time, isSent, senderName));
    }

    return res;
}