وضعیت نمایش پیام
هر مشتری باید به طور کلی بتواند نشان دهد که چه همسالانی چه پیام هایی را می خوانند و می تواند متوجه شود که چه تعداد پیام های نخواند شده وجود دارد.
برای این کار، دیمون برخی از API ها را فراهم می کند:
تنظیم پیام نمایش داده شده
مدیر تنظیمات:
<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>
برای تنظیم یک پیام به عنوان نمایش داده شده باید انجام شود زمانی که تعامل نمایش داده شده و مکالمه انتخاب شده است.
این پیام های SIP را به همسالان متصل با فرمت زیر ارسال می کند:
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>");
}
سپس همتایان این را از طریق onMessageDisplayed
می دانند و یک سیگنال به مشتری ارسال می کنند (libjami::ConfigurationSignal::AccountMessageStatusChanged
با وضعیت 3 (libjami::Account::MessageStates::DISPLAYED
))
پیام های نخونده رو دریافت کن
با دانستن آخرین پیام نمایش داده شده برای حساب ما، می توانیم از این اطلاعات و ConfigrationManager::countInteractionsSince
استفاده کنیم که تعامل را از آخرین پیام به یک پیام داده شده (معمولا آخرین تعامل نمایش داده شده) شمارش می کنند.
برای دریافت آخرین پیام نمایش داده شده برای یک عضو، در کنفگریشن::get مکالمهMembers
هر عضو آخرین تعامل نمایش داده شده را از طریق `memberInfo["آخر نمایش داده شده"]]]
نحوه ذخیره این اطلاعات
در src/jamidht/conversation.cpp
هر مکالمه آخرین پیام های نمایش داده شده را در یک نقشه ذخیره می کند<string, string> (uri, interactionId) و این ساختار در fileutils::get_data_dir()/getAccountID()/conversation_data/repository_->id()/lastDisplayed