מצב הודעות הוצגו

כל לקוח בדרך כלל חייב להיות מסוגל להראות איזה חבר קורא איזה הודעה ולבחון כמה הודעות לא נראו יש.

לשם כך, הדיימון מספק כמה APIs:

להגדיר הודעה

מנהל ההסדרות מספק:

<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))

לקבל הודעות לא נלקחו

על ידי ידי ידיעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת הודעת ה-ש (ת ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה-ה

כדי לקבל הודעה הוצגה לאחרונה עבור חבר, ב Configuration::getConversationMembers כל חבר יהיה האינטראקציה הוצגה האחרונה זמינה באמצעות memberInfo["הצגה האחרונה"]

איך המידע הזה מאוחסן

ב- src/jamidht/conversation.cpp כל שיחה מאחסנת את ההודעות האחרונות המוצגות במפה<string, string> (uri, interactionId) והבניין הזה מסודר בסדרה ב- fileutils::get_data_dir()/getAccountID()/conversation_data/repository_->id()/lastDisplayed