Added streaming of updated status from fetch_link_card_service
Sends updated status down after adding/updating/removing preview card.
This commit is contained in:
parent
dc87184ef0
commit
31d4660947
|
@ -10,6 +10,7 @@ import { updateNotificationsQueue, expandNotifications } from './notifications';
|
||||||
import { updateConversations } from './conversations';
|
import { updateConversations } from './conversations';
|
||||||
import { fetchFilters } from './filters';
|
import { fetchFilters } from './filters';
|
||||||
import { getLocale } from '../locales';
|
import { getLocale } from '../locales';
|
||||||
|
import { handleComposeSubmit } from './compose';
|
||||||
|
|
||||||
const { messages } = getLocale();
|
const { messages } = getLocale();
|
||||||
|
|
||||||
|
@ -61,3 +62,18 @@ export const connectHashtagStream = (id, tag, accept) => connectTimelineStream
|
||||||
export const connectDirectStream = () => connectTimelineStream('direct', 'direct');
|
export const connectDirectStream = () => connectTimelineStream('direct', 'direct');
|
||||||
export const connectListStream = id => connectTimelineStream(`list:${id}`, `list&list=${id}`);
|
export const connectListStream = id => connectTimelineStream(`list:${id}`, `list&list=${id}`);
|
||||||
export const connectGroupStream = id => connectTimelineStream(`group:${id}`, `group&group=${id}`);
|
export const connectGroupStream = id => connectTimelineStream(`group:${id}`, `group&group=${id}`);
|
||||||
|
|
||||||
|
export const connectStatusUpdateStream = () => {
|
||||||
|
return connectStream('statuscard', null, (dispatch, getState) => {
|
||||||
|
return {
|
||||||
|
onConnect() {},
|
||||||
|
onDisconnect() {},
|
||||||
|
onReceive (data) {
|
||||||
|
if (!data['event'] || !data['payload']) return;
|
||||||
|
if (data.event === 'update') {
|
||||||
|
handleComposeSubmit(dispatch, getState, {data: JSON.parse(data.payload)}, null)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
|
@ -15,7 +15,15 @@ class FetchLinkCardService < BaseService
|
||||||
@status = status
|
@status = status
|
||||||
@url = parse_urls
|
@url = parse_urls
|
||||||
|
|
||||||
return if @url.nil? || @status.preview_cards.any?
|
if @status.preview_cards.any?
|
||||||
|
if @url.nil?
|
||||||
|
detach_card
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return if @status.preview_cards.first.url == @url
|
||||||
|
end
|
||||||
|
|
||||||
|
return if @url.nil?
|
||||||
|
|
||||||
@url = @url.to_s
|
@url = @url.to_s
|
||||||
|
|
||||||
|
@ -49,13 +57,23 @@ class FetchLinkCardService < BaseService
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return if @html.nil?
|
if @html.nil?
|
||||||
|
detach_card
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
attempt_oembed || attempt_opengraph
|
attempt_oembed || attempt_opengraph
|
||||||
end
|
end
|
||||||
|
|
||||||
def attach_card
|
def attach_card
|
||||||
@status.preview_cards << @card
|
@status.preview_cards = [@card]
|
||||||
|
send_status_update_payload(@status)
|
||||||
|
Rails.cache.delete(@status)
|
||||||
|
end
|
||||||
|
|
||||||
|
def detach_card
|
||||||
|
@status.preview_cards = []
|
||||||
|
send_status_update_payload(@status)
|
||||||
Rails.cache.delete(@status)
|
Rails.cache.delete(@status)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -165,4 +183,10 @@ class FetchLinkCardService < BaseService
|
||||||
def lock_options
|
def lock_options
|
||||||
{ redis: Redis.current, key: "fetch:#{@url}" }
|
{ redis: Redis.current, key: "fetch:#{@url}" }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def send_status_update_payload(status)
|
||||||
|
@payload = InlineRenderer.render(status, nil, :status)
|
||||||
|
@payload = Oj.dump(event: :update, payload: @payload)
|
||||||
|
Redis.current.publish('statuscard', @payload)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -534,6 +534,11 @@ const startWorker = (workerId) => {
|
||||||
app.use(authenticationMiddleware);
|
app.use(authenticationMiddleware);
|
||||||
app.use(errorMiddleware);
|
app.use(errorMiddleware);
|
||||||
|
|
||||||
|
app.get('/api/v1/streaming/statuscard', (req, res) => {
|
||||||
|
const channel = `statuscard`;
|
||||||
|
streamFrom(channel, req, streamToHttp(req, res), streamHttpEnd(req, subscriptionHeartbeat(channel)));
|
||||||
|
});
|
||||||
|
|
||||||
app.get('/api/v1/streaming/user', (req, res) => {
|
app.get('/api/v1/streaming/user', (req, res) => {
|
||||||
const channel = `timeline:${req.accountId}`;
|
const channel = `timeline:${req.accountId}`;
|
||||||
streamFrom(channel, req, streamToHttp(req, res), streamHttpEnd(req, subscriptionHeartbeat(channel)));
|
streamFrom(channel, req, streamToHttp(req, res), streamHttpEnd(req, subscriptionHeartbeat(channel)));
|
||||||
|
@ -608,6 +613,10 @@ const startWorker = (workerId) => {
|
||||||
let channel;
|
let channel;
|
||||||
|
|
||||||
switch(location.query.stream) {
|
switch(location.query.stream) {
|
||||||
|
case 'statuscard':
|
||||||
|
channel = `statuscard`;
|
||||||
|
streamFrom(channel, req, streamToWs(req, ws), streamWsEnd(req, ws, subscriptionHeartbeat(channel)));
|
||||||
|
break;
|
||||||
case 'user':
|
case 'user':
|
||||||
channel = `timeline:${req.accountId}`;
|
channel = `timeline:${req.accountId}`;
|
||||||
streamFrom(channel, req, streamToWs(req, ws), streamWsEnd(req, ws, subscriptionHeartbeat(channel)));
|
streamFrom(channel, req, streamToWs(req, ws), streamWsEnd(req, ws, subscriptionHeartbeat(channel)));
|
||||||
|
|
Loading…
Reference in New Issue