Status prikazanega sporočila
Vsak stranka mora biti sposobna pokazati, kateri partner prebere katero sporočilo in ugotoviti, koliko neprebranih sporočil je.
Za to je demon zagotovil nekaj API:
Nastavite prikazano sporočilo
Upravljavec konfiguracije določa:
<method name="setMessageDisplayed" tp:name-for-bindings="setMessageDisplayed">
<tp:added version="8.1.0"/>
<tp:docstring>
<p>Informs that a message have been read</p>
</tp:docstring>
<arg type="s" name="accountId" direction="in">
<tp:docstring>
The account ID
</tp:docstring>
</arg>
<arg type="s" name="conversationUri" direction="in">
<tp:docstring>
A conversation uri (swarm:xxxx or jami:xxxx)
</tp:docstring>
</arg>
<arg type="s" name="messageId" direction="in">
<tp:docstring>
The message ID
</tp:docstring>
</arg>
<arg type="i" name="status" direction="in">
<tp:docstring>
The message status, 3 for displayed
</tp:docstring>
</arg>
<arg type="b" name="success" direction="out">
<tp:docstring>
True if the message status was set, false if account, contact or message is unknown.
</tp:docstring>
</arg>
</method>
Če želite nastaviti sporočilo, kot je prikazano, to storite, ko je prikazana interakcija in je izbrana pogovor.
To pošlje sporočila SIP povezanim vrstnikom z naslednjim oblikom:
std::string
getDisplayed(const std::string& conversationId, const std::string& messageId)
{
// implementing https://tools.ietf.org/rfc/rfc5438.txt
return fmt::format(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<imdn><message-id>{}</message-id>\n"
"{}"
"<display-notification><status><displayed/></status></display-notification>\n"
"</imdn>",
messageId,
conversationId.empty() ? "" : "<conversation>" + conversationId + "</conversation>");
}
Potem bo partner to vedel prek onMessageDisplayed
in izpustil signal k klientu (libjami::ConfigurationSignal::AccountMessageStatusChanged
z statusom 3 (libjami::Account::MessageStates::DISPLAYED
))
Preberite nepovedane sporočila.
Z znanjem zadnje prikazane sporočilo za naš račun lahko uporabimo te informacije in ConfigrationManager::countInteractionsSince
, ki štejejo interakcijo od zadnjega sporočila do določenega sporočila (običajno zadnje prikazane interakcije)
Če želite imeti zadnji prikazan sporočilo za člana, v Konfiguration::getConversationMembers
vsak član bo imel zadnji prikazan interakcijo na voljo prek memberInfo["zadnji prikazan"]
Kako se shranjujejo te informacije
V src/jamidht/conversation.cpp
vsaka pogovorna shranitev zadnje prikazane sporočila v zemljevidu<string, string> (uri, interactionId) in ta struktura je serizirana v fileutils::get_data_dir()/getAccountID()/conversation_data/repository_->id()/lastDisplayed