বার্তা প্রদর্শিত অবস্থা
প্রতিটি ক্লায়েন্টকে সাধারণত কোন প্রতিযোগী কোন বার্তা পড়েছে তা দেখাতে এবং কতটি অপঠিত বার্তা আছে তা জানতে সক্ষম হতে হবে।
এর জন্য, ডেমোন কিছু এপিআই সরবরাহ করেঃ
প্রদর্শিত বার্তা সেট করুন
কনফিগারেশন ম্যানেজার নিম্নলিখিতগুলি প্রদান করেঃ
<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 with status 3 (libjami::Account::MessageStates::DISPLAYED))
অ-পঠিত বার্তা পান
আমাদের অ্যাকাউন্টের জন্য সর্বশেষ প্রদর্শিত বার্তাটি জেনে আমরা এই তথ্য এবং ConfigrationManager::countInteractionsSince ব্যবহার করতে পারি যা একটি নির্দিষ্ট বার্তার জন্য সর্বশেষ বার্তা থেকে মিথস্ক্রিয়া গণনা করে (সাধারণত সর্বশেষ প্রদর্শিত মিথস্ক্রিয়া)
কনফিগারেশন::getConversationMembers প্রতিটি সদস্যের `memberInfo["শেষ প্রদর্শিত"] মাধ্যমে সর্বশেষ প্রদর্শিত মিথস্ক্রিয়া উপলব্ধ থাকবে
এই তথ্য কিভাবে সংরক্ষণ করা হয়
src/jamidht/conversation.cpp প্রতিটি কথোপকথন একটি মানচিত্রে সর্বশেষ প্রদর্শিত বার্তা সংরক্ষণ করে<string, string> (uri, interactionId) এবং এই কাঠামো fileutils::get_data_dir()/getAccountID()/conversation_data/repository_->id()/lastDisplayed