MCPcopy Create free account
hub / github.com/Palm1r/QodeAssist / addMessage

Method addMessage

ChatView/ChatModel.cpp:137–204  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

135}
136
137void ChatModel::addMessage(
138 const QString &content,
139 ChatRole role,
140 const QString &id,
141 const QList<Context::ContentFile> &attachments,
142 const QList<ImageAttachment> &images,
143 bool isRedacted,
144 const QString &signature)
145{
146 if (!m_messages.isEmpty() && !id.isEmpty() && m_messages.last().id == id
147 && m_messages.last().role == role) {
148 Message &lastMessage = m_messages.last();
149 lastMessage.content = content;
150 lastMessage.attachments = attachments;
151 lastMessage.images = images;
152 lastMessage.isRedacted = isRedacted;
153 lastMessage.signature = signature;
154 emit dataChanged(index(m_messages.size() - 1), index(m_messages.size() - 1));
155 } else {
156 beginInsertRows(QModelIndex(), m_messages.size(), m_messages.size());
157 Message newMessage{role, content, id};
158 newMessage.attachments = attachments;
159 newMessage.images = images;
160 newMessage.isRedacted = isRedacted;
161 newMessage.signature = signature;
162 m_messages.append(newMessage);
163 endInsertRows();
164
165 if (m_loadingFromHistory && role == ChatRole::FileEdit) {
166 const QString marker = "QODEASSIST_FILE_EDIT:";
167 if (content.contains(marker)) {
168 int markerPos = content.indexOf(marker);
169 int jsonStart = markerPos + marker.length();
170
171 if (jsonStart < content.length()) {
172 QString jsonStr = content.mid(jsonStart);
173 QJsonDocument doc = QJsonDocument::fromJson(jsonStr.toUtf8());
174
175 if (doc.isObject()) {
176 QJsonObject editData = doc.object();
177 QString editId = editData.value("edit_id").toString();
178 QString filePath = editData.value("file").toString();
179 QString oldContent = editData.value("old_content").toString();
180 QString newContent = editData.value("new_content").toString();
181 QString originalStatus = editData.value("status").toString();
182
183 if (!editId.isEmpty() && !filePath.isEmpty()) {
184 Context::ChangesManager::instance().addFileEdit(
185 editId, filePath, oldContent, newContent, false, true);
186
187 editData["status"] = "archived";
188 editData["status_message"] = "Loaded from chat history";
189
190 QString updatedContent = marker
191 + QString::fromUtf8(QJsonDocument(editData).toJson(QJsonDocument::Compact));
192 m_messages.last().content = updatedContent;
193
194 emit dataChanged(index(m_messages.size() - 1), index(m_messages.size() - 1));

Callers 3

sendMessageMethod · 0.80
handleLLMResponseMethod · 0.80
deserializeChatMethod · 0.80

Calls 8

sizeMethod · 0.80
appendMethod · 0.80
toUtf8Method · 0.80
valueMethod · 0.80
addFileEditMethod · 0.80
isEmptyMethod · 0.45
toStringMethod · 0.45
toJsonMethod · 0.45

Tested by

no test coverage detected