commit: bf5f55a6bbfee69e41acfcd14002308c69d8b68c
parent: aabf884c5f6bf5c0a7cdec2c3e4fe174eeecfaec
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Thu, 10 Nov 2016 00:47:47 +0100
Fix live status removal from public/hashtag channels
Diffstat:
3 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/app/assets/javascripts/components/features/hashtag_timeline/index.jsx b/app/assets/javascripts/components/features/hashtag_timeline/index.jsx
@@ -4,7 +4,8 @@ import StatusListContainer from '../ui/containers/status_list_container';
import Column from '../ui/components/column';
import {
refreshTimeline,
- updateTimeline
+ updateTimeline,
+ deleteFromTimelines
} from '../../actions/timelines';
const HashtagTimeline = React.createClass({
@@ -24,7 +25,12 @@ const HashtagTimeline = React.createClass({
}, {
received (data) {
- dispatch(updateTimeline('tag', JSON.parse(data.message)));
+ switch(data.type) {
+ case 'update':
+ return dispatch(updateTimeline('tag', JSON.parse(data.message)));
+ case 'delete':
+ return dispatch(deleteFromTimelines(data.id));
+ }
}
});
diff --git a/app/assets/javascripts/components/features/public_timeline/index.jsx b/app/assets/javascripts/components/features/public_timeline/index.jsx
@@ -1,11 +1,12 @@
-import { connect } from 'react-redux';
-import PureRenderMixin from 'react-addons-pure-render-mixin';
+import { connect } from 'react-redux';
+import PureRenderMixin from 'react-addons-pure-render-mixin';
import StatusListContainer from '../ui/containers/status_list_container';
-import Column from '../ui/components/column';
+import Column from '../ui/components/column';
import {
refreshTimeline,
- updateTimeline
-} from '../../actions/timelines';
+ updateTimeline,
+ deleteFromTimelines
+} from '../../actions/timelines';
const PublicTimeline = React.createClass({
@@ -24,7 +25,12 @@ const PublicTimeline = React.createClass({
this.subscription = App.cable.subscriptions.create('PublicChannel', {
received (data) {
- dispatch(updateTimeline('public', JSON.parse(data.message)));
+ switch(data.type) {
+ case 'update':
+ return dispatch(updateTimeline('public', JSON.parse(data.message)));
+ case 'delete':
+ return dispatch(deleteFromTimelines(data.id));
+ }
}
});
diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb
@@ -42,12 +42,12 @@ class FanOutOnWriteService < BaseService
Rails.logger.debug "Delivering status #{status.id} to hashtags"
status.tags.find_each do |tag|
- FeedManager.instance.broadcast("hashtag:#{tag.name}", id: status.id)
+ FeedManager.instance.broadcast("hashtag:#{tag.name}", type: 'update', id: status.id)
end
end
def deliver_to_public(status)
Rails.logger.debug "Delivering status #{status.id} to public timeline"
- FeedManager.instance.broadcast(:public, id: status.id)
+ FeedManager.instance.broadcast(:public, type: 'update', id: status.id)
end
end