compose: Remove draft older than 30 days.

This removes drafts older than 30 days as they become irrelevant
for the user. Those drafts are removed before populating them.

Fixes: #7602.
This commit is contained in:
Shubham Dhama
2018-02-15 22:08:31 +05:30
committed by Tim Abbott
parent 40958e0824
commit 7aeae688e7
4 changed files with 58 additions and 1 deletions

View File

@@ -145,3 +145,29 @@ var draft_2 = {
drafts.initialize(); drafts.initialize();
}()); }());
(function test_remove_old_drafts() {
var draft_3 = {
stream: "stream",
subject: "topic",
type: "stream",
content: "Test Stream Message",
updatedAt: Date.now(),
};
var draft_4 = {
private_message_recipient: "aaron@zulip.com",
reply_to: "aaron@zulip.com",
type: "private",
content: "Test Private Message",
updatedAt: new Date().setDate(-30),
};
var draft_model = drafts.draft_model;
var ls = localstorage();
localStorage.clear();
var data = {id3: draft_3, id4: draft_4};
ls.set("drafts", data);
assert.deepEqual(draft_model.get(), data);
drafts.remove_old_drafts();
assert.deepEqual(draft_model.get(), {id3: draft_3});
}());

View File

@@ -160,6 +160,20 @@ exports.restore_draft = function (draft_id) {
$("#compose-textarea").data("draft-id", draft_id); $("#compose-textarea").data("draft-id", draft_id);
}; };
var DRAFT_LIFETIME = 30;
function remove_old_drafts() {
var old_date = new Date().setDate(new Date().getDate() - DRAFT_LIFETIME);
var drafts = draft_model.get();
_.each(drafts, function (draft, id) {
if (draft.updatedAt < old_date) {
draft_model.deleteDraft(id);
}
});
}
// Exporting for testing purpose
exports.remove_old_drafts = remove_old_drafts;
exports.setup_page = function (callback) { exports.setup_page = function (callback) {
function setup_event_handlers() { function setup_event_handlers() {
$(".restore-draft").on("click", function (e) { $(".restore-draft").on("click", function (e) {
@@ -262,7 +276,10 @@ exports.setup_page = function (callback) {
function _populate_and_fill() { function _populate_and_fill() {
$('#drafts_table').empty(); $('#drafts_table').empty();
var drafts = format_drafts(draft_model.get()); var drafts = format_drafts(draft_model.get());
var rendered = templates.render('draft_table_body', { drafts: drafts }); var rendered = templates.render('draft_table_body',{
drafts: drafts,
draft_lifetime: DRAFT_LIFETIME,
});
$('#drafts_table').append(rendered); $('#drafts_table').append(rendered);
if ($("#drafts_table .draft-row").length > 0) { if ($("#drafts_table .draft-row").length > 0) {
$('#drafts_table .no-drafts').hide(); $('#drafts_table .no-drafts').hide();
@@ -280,6 +297,8 @@ exports.setup_page = function (callback) {
_populate_and_fill(); _populate_and_fill();
}); });
} }
remove_old_drafts();
populate_and_fill(); populate_and_fill();
}; };

View File

@@ -61,6 +61,15 @@
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
} }
.drafts-list .removed-drafts {
display: block;
text-align: center;
font-size: 1em;
color: hsl(0, 0%, 66%);
pointer-events: none;
-webkit-font-smoothing: antialiased;
}
.draft-row { .draft-row {
padding: 5px 10px; padding: 5px 10px;
} }

View File

@@ -8,6 +8,9 @@
</div> </div>
</div> </div>
<div class="drafts-list"> <div class="drafts-list">
<div class="removed-drafts">
{{#tr this}} Drafts older than <strong>__draft_lifetime__</strong> days are automatically removed {{/tr}}
</div>
<div class="no-drafts"> <div class="no-drafts">
{{t 'No drafts.'}} {{t 'No drafts.'}}
</div> </div>