[#10362] Allow receiving old messages after rejoining a pubchat

This commit is contained in:
Roman Volosovskyi 2020-11-06 16:21:33 +02:00
parent f1d070ed82
commit 6eb840c8b2
No known key found for this signature in database
GPG Key ID: 0238A4B5ECEE70DE
4 changed files with 23 additions and 18 deletions

View File

@ -185,12 +185,15 @@
(fx/defn clear-history (fx/defn clear-history
"Clears history of the particular chat" "Clears history of the particular chat"
[{:keys [db] :as cofx} chat-id] [{:keys [db] :as cofx} chat-id remove-chat?]
(let [{:keys [last-message (let [{:keys [last-message public?
deleted-at-clock-value]} (get-in db [:chats chat-id]) deleted-at-clock-value]} (get-in db [:chats chat-id])
last-message-clock-value (or (:clock-value last-message) last-message-clock-value (if (and public? remove-chat?)
deleted-at-clock-value 0
(utils.clocks/send 0))] (or (:clock-value last-message)
deleted-at-clock-value
(utils.clocks/send 0)))]
(println :FOOO last-message-clock-value public? remove-chat?)
(fx/merge (fx/merge
cofx cofx
{:db (-> db {:db (-> db
@ -217,7 +220,7 @@
(mailserver/remove-gaps chat-id) (mailserver/remove-gaps chat-id)
(mailserver/remove-range chat-id) (mailserver/remove-range chat-id)
(deactivate-chat chat-id) (deactivate-chat chat-id)
(clear-history chat-id) (clear-history chat-id true)
(transport.filters/stop-listening chat-id) (transport.filters/stop-listening chat-id)
(when (and navigate-home? (not (= (:view-id db) :home))) (when (and navigate-home? (not (= (:view-id db) :home)))
(navigation/navigate-to-cofx :home {})))) (navigation/navigate-to-cofx :home {}))))

View File

@ -68,16 +68,16 @@
:chats {chat-id {:last-message {:clock-value 10} :chats {chat-id {:last-message {:clock-value 10}
:unviewed-messages-count 1}}}}] :unviewed-messages-count 1}}}}]
(testing "it deletes all the messages" (testing "it deletes all the messages"
(let [actual (chat/clear-history cofx chat-id)] (let [actual (chat/clear-history cofx chat-id true)]
(is (= {} (get-in actual [:db :messages chat-id]))))) (is (= {} (get-in actual [:db :messages chat-id])))))
(testing "it deletes all the message groups" (testing "it deletes all the message groups"
(let [actual (chat/clear-history cofx chat-id)] (let [actual (chat/clear-history cofx chat-id true)]
(is (= nil (get-in actual [:db :message-lists chat-id]))))) (is (= nil (get-in actual [:db :message-lists chat-id])))))
(testing "it deletes unviewed messages set" (testing "it deletes unviewed messages set"
(let [actual (chat/clear-history cofx chat-id)] (let [actual (chat/clear-history cofx chat-id true)]
(is (= 0 (get-in actual [:db :chats chat-id :unviewed-messages-count]))))) (is (= 0 (get-in actual [:db :chats chat-id :unviewed-messages-count])))))
(testing "it sets a deleted-at-clock-value equal to the last message clock-value" (testing "it sets a deleted-at-clock-value equal to the last message clock-value"
(let [actual (chat/clear-history cofx chat-id)] (let [actual (chat/clear-history cofx chat-id true)]
(is (= 10 (get-in actual [:db :chats chat-id :deleted-at-clock-value]))))) (is (= 10 (get-in actual [:db :chats chat-id :deleted-at-clock-value])))))
(testing "it does not override the deleted-at-clock-value when there are no messages" (testing "it does not override the deleted-at-clock-value when there are no messages"
(let [actual (chat/clear-history (update-in cofx (let [actual (chat/clear-history (update-in cofx
@ -85,7 +85,8 @@
assoc assoc
:last-message nil :last-message nil
:deleted-at-clock-value 100) :deleted-at-clock-value 100)
chat-id)] chat-id
true)]
(is (= 100 (get-in actual [:db :chats chat-id :deleted-at-clock-value]))))) (is (= 100 (get-in actual [:db :chats chat-id :deleted-at-clock-value])))))
(testing "it set the deleted-at-clock-value to now the chat has no messages nor previous deleted-at" (testing "it set the deleted-at-clock-value to now the chat has no messages nor previous deleted-at"
(with-redefs [utils.clocks/send (constantly 42)] (with-redefs [utils.clocks/send (constantly 42)]
@ -93,10 +94,11 @@
[:db :chats chat-id] [:db :chats chat-id]
assoc assoc
:last-message nil) :last-message nil)
chat-id)] chat-id
true)]
(is (= 42 (get-in actual [:db :chats chat-id :deleted-at-clock-value])))))) (is (= 42 (get-in actual [:db :chats chat-id :deleted-at-clock-value]))))))
(testing "it adds the relevant rpc calls" (testing "it adds the relevant rpc calls"
(let [actual (chat/clear-history cofx chat-id)] (let [actual (chat/clear-history cofx chat-id true)]
(is (::json-rpc/call actual)) (is (::json-rpc/call actual))
(is (= 2 (count (::json-rpc/call actual)))))))) (is (= 2 (count (::json-rpc/call actual))))))))

View File

@ -495,7 +495,7 @@
(handlers/register-handler-fx (handlers/register-handler-fx
:chat.ui/clear-history :chat.ui/clear-history
(fn [cofx [_ chat-id]] (fn [cofx [_ chat-id]]
(chat/clear-history cofx chat-id))) (chat/clear-history cofx chat-id false)))
(handlers/register-handler-fx (handlers/register-handler-fx
:chat.ui/resend-message :chat.ui/resend-message
@ -1312,4 +1312,4 @@
:profile :profile
(reset-current-profile-chat % (get-in % [:db :contacts/identity])) (reset-current-profile-chat % (get-in % [:db :contacts/identity]))
nil)))) nil))))

View File

@ -2,7 +2,7 @@
"_comment": "DO NOT EDIT THIS FILE BY HAND. USE 'scripts/update-status-go.sh <tag>' instead", "_comment": "DO NOT EDIT THIS FILE BY HAND. USE 'scripts/update-status-go.sh <tag>' instead",
"owner": "status-im", "owner": "status-im",
"repo": "status-go", "repo": "status-go",
"version": "v0.63.5", "version": "v0.63.6",
"commit-sha1": "40e2fc7526de06b47e16fb2f89b9c329ede17fe3", "commit-sha1": "d20cf2583f0721d809c2efe71450259c88981b4e",
"src-sha256": "05gwyjh3xv1gr7cp0bjgy4i82p2sa1ab4r8z64j0idq48hv0r5ny" "src-sha256": "1dbiwbfw109ns4czpfqzmnll92xlqzyyc2swl693hrn67nzwymgp"
} }