From b0567f9c62b830a6be4cfcf2ec5aa519f8b256cb Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Sun, 7 Feb 2016 23:39:07 +1100 Subject: [PATCH] FEATURE: automatically sync "move to inbox" / "archive" state on messages --- .../javascripts/discourse/controllers/topic.js.es6 | 8 ++++++++ app/controllers/topics_controller.rb | 12 ++++++------ app/models/group_archived_message.rb | 12 ++++++++++++ app/models/user_archived_message.rb | 11 +++++++++++ lib/post_creator.rb | 9 +++++++-- lib/topics_bulk_action.rb | 8 ++++---- 6 files changed, 48 insertions(+), 12 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/topic.js.es6 b/app/assets/javascripts/discourse/controllers/topic.js.es6 index e5f5d19d334..2fe9e6ee7bf 100644 --- a/app/assets/javascripts/discourse/controllers/topic.js.es6 +++ b/app/assets/javascripts/discourse/controllers/topic.js.es6 @@ -632,6 +632,14 @@ export default Ember.Controller.extend(SelectedPostsCount, BufferedContent, { } return; } + case "move_to_inbox": { + topic.set("message_archived",false); + return; + } + case "archived": { + topic.set("message_archived",true); + return; + } default: { Em.Logger.warn("unknown topic bus message type", data); } diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index bc53a2e955f..d30f1008ca4 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -289,20 +289,20 @@ class TopicsController < ApplicationController allowed_groups = topic.allowed_groups .where('topic_allowed_groups.group_id IN (?)', group_ids).pluck(:id) allowed_groups.each do |id| - GroupArchivedMessage.where(group_id: id, topic_id: topic.id).destroy_all - if archive + GroupArchivedMessage.archive!(id, topic.id) group_id = id - GroupArchivedMessage.create!(group_id: id, topic_id: topic.id) + else + GroupArchivedMessage.move_to_inbox!(id, topic.id) end end end if topic.allowed_users.include?(current_user) - UserArchivedMessage.where(user_id: current_user.id, topic_id: topic.id).destroy_all - if archive - UserArchivedMessage.create!(user_id: current_user.id, topic_id: topic.id) + UserArchivedMessage.archive!(current_user.id, topic.id) + else + UserArchivedMessage.move_to_inbox!(current_user.id, topic.id) end end diff --git a/app/models/group_archived_message.rb b/app/models/group_archived_message.rb index b32092cb39e..22e0fb9f19e 100644 --- a/app/models/group_archived_message.rb +++ b/app/models/group_archived_message.rb @@ -1,6 +1,18 @@ class GroupArchivedMessage < ActiveRecord::Base belongs_to :user belongs_to :topic + + def self.move_to_inbox!(group_id, topic_id) + GroupArchivedMessage.where(group_id: group_id, topic_id: topic_id).destroy_all + MessageBus.publish("/topic/#{topic_id}", {type: "move_to_inbox"}, group_ids: [group_id]) + end + + def self.archive!(group_id, topic_id) + GroupArchivedMessage.where(group_id: group_id, topic_id: topic_id).destroy_all + GroupArchivedMessage.create!(group_id: group_id, topic_id: topic_id) + MessageBus.publish("/topic/#{topic_id}", {type: "archived"}, group_ids: [group_id]) + end + end # == Schema Information diff --git a/app/models/user_archived_message.rb b/app/models/user_archived_message.rb index 3f7c94e4745..3a54b6ea6df 100644 --- a/app/models/user_archived_message.rb +++ b/app/models/user_archived_message.rb @@ -1,6 +1,17 @@ class UserArchivedMessage < ActiveRecord::Base belongs_to :user belongs_to :topic + + def self.move_to_inbox!(user_id, topic_id) + UserArchivedMessage.where(user_id: user_id, topic_id: topic_id).destroy_all + MessageBus.publish("/topic/#{topic_id}", {type: "move_to_inbox"}, user_ids: [user_id]) + end + + def self.archive!(user_id, topic_id) + UserArchivedMessage.where(user_id: user_id, topic_id: topic_id).destroy_all + UserArchivedMessage.create!(user_id: user_id, topic_id: topic_id) + MessageBus.publish("/topic/#{topic_id}", {type: "archived"}, user_ids: [user_id]) + end end # == Schema Information diff --git a/lib/post_creator.rb b/lib/post_creator.rb index f7151442b25..62bc2a57934 100644 --- a/lib/post_creator.rb +++ b/lib/post_creator.rb @@ -276,8 +276,13 @@ class PostCreator def unarchive_message return unless @topic.private_message? && @topic.id - UserArchivedMessage.where(topic_id: @topic.id).destroy_all - GroupArchivedMessage.where(topic_id: @topic.id).destroy_all + UserArchivedMessage.where(topic_id: @topic.id).pluck(:user_id).each do |user_id| + UserArchivedMessage.move_to_inbox!(user_id, @topic.id) + end + + GroupArchivedMessage.where(topic_id: @topic.id).pluck(:group_id).each do |group_id| + GroupArchivedMessage.move_to_inbox!(group_id, @topic.id) + end end private diff --git a/lib/topics_bulk_action.rb b/lib/topics_bulk_action.rb index 0fcdf8b713b..541d283a1a0 100644 --- a/lib/topics_bulk_action.rb +++ b/lib/topics_bulk_action.rb @@ -43,9 +43,9 @@ class TopicsBulkAction topics.each do |t| if guardian.can_see?(t) && t.private_message? if group - GroupArchivedMessage.where(group_id: group.id, topic_id: t.id).destroy_all + GroupArchivedMessage.move_to_inbox!(group.id, t.id) else - UserArchivedMessage.where(user_id: @user.id, topic_id: t.id).destroy_all + UserArchivedMessage.move_to_inbox!(@user.id,t.id) end end end @@ -56,9 +56,9 @@ class TopicsBulkAction topics.each do |t| if guardian.can_see?(t) && t.private_message? if group - GroupArchivedMessage.create!(group_id: group.id, topic_id: t.id) + GroupArchivedMessage.archive!(group.id, t.id) else - UserArchivedMessage.create!(user_id: @user.id, topic_id: t.id) + UserArchivedMessage.archive!(@user.id, t.id) end end end