From 3e9e0486ba6b1e1d04016fc6c2d7aa5e1497da90 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 30 Mar 2022 10:55:32 -0500 Subject: [PATCH 1/3] Preserve TruthSocial "external_video_id" in attachments --- ...ruthsocial-status-with-external-video.json | 95 +++++++++++++++++++ .../normalizers/__tests__/status-test.js | 6 ++ app/soapbox/normalizers/attachment.ts | 1 + 3 files changed, 102 insertions(+) create mode 100644 app/soapbox/__fixtures__/truthsocial-status-with-external-video.json diff --git a/app/soapbox/__fixtures__/truthsocial-status-with-external-video.json b/app/soapbox/__fixtures__/truthsocial-status-with-external-video.json new file mode 100644 index 000000000..eb6150192 --- /dev/null +++ b/app/soapbox/__fixtures__/truthsocial-status-with-external-video.json @@ -0,0 +1,95 @@ +{ + "id": "108046244464677537", + "created_at": "2022-03-30T15:40:53.287Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": null, + "uri": "https://truthsocial.com/users/alex/statuses/108046244464677537", + "url": "https://truthsocial.com/@alex/108046244464677537", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "favourited": false, + "reblogged": false, + "muted": false, + "bookmarked": false, + "pinned": false, + "content": "", + "reblog": null, + "application": { + "name": "Soapbox FE", + "website": "https://soapbox.pub/" + }, + "account": { + "id": "107759994408336377", + "username": "alex", + "acct": "alex", + "display_name": "Alex Gleason", + "locked": false, + "bot": false, + "discoverable": null, + "group": false, + "created_at": "2022-02-08T00:00:00.000Z", + "note": "

Launching Truth Social

", + "url": "https://truthsocial.com/@alex", + "avatar": "https://static-assets.truthsocial.com/tmtg:prime-truth-social-assets/accounts/avatars/107/759/994/408/336/377/original/119cb0dd1fa615b7.png", + "avatar_static": "https://static-assets.truthsocial.com/tmtg:prime-truth-social-assets/accounts/avatars/107/759/994/408/336/377/original/119cb0dd1fa615b7.png", + "header": "https://static-assets.truthsocial.com/tmtg:prime-truth-social-assets/accounts/headers/107/759/994/408/336/377/original/31f62b0453ccf554.png", + "header_static": "https://static-assets.truthsocial.com/tmtg:prime-truth-social-assets/accounts/headers/107/759/994/408/336/377/original/31f62b0453ccf554.png", + "followers_count": 4713, + "following_count": 43, + "statuses_count": 7, + "last_status_at": "2022-03-30", + "verified": true, + "location": "Texas", + "website": "https://soapbox.pub/", + "emojis": [], + "fields": [] + }, + "media_attachments": [ + { + "id": "108046243948255335", + "type": "video", + "url": "https://static-assets.truthsocial.com/tmtg:prime-truth-social-assets/media_attachments/files/108/046/243/948/255/335/original/3b17ce701c0d6f08.mp4", + "preview_url": "https://static-assets.truthsocial.com/tmtg:prime-truth-social-assets/cache/preview_cards/images/000/543/912/original/e1fcf6ace01d9ded.jpg", + "external_video_id": "vwfnq9", + "remote_url": null, + "preview_remote_url": null, + "text_url": "https://truthsocial.com/media/SpbYvqKIT2VubC9FFn0", + "meta": { + "original": { + "width": 988, + "height": 556, + "frame_rate": "60/1", + "duration": 1.949025, + "bitrate": 402396 + } + }, + "description": null, + "blurhash": null + } + ], + "mentions": [], + "tags": [], + "emojis": [], + "card": { + "url": "https://rumble.com/vz1trd-video-upload-for-108046244464677537.html?mref=ummtf&mc=3nvg0", + "title": "Video upload for 108046244464677537", + "description": "", + "type": "video", + "author_name": "hostid1", + "author_url": "https://rumble.com/user/hostid1", + "provider_name": "Rumble.com", + "provider_url": "https://rumble.com/", + "html": "", + "width": 988, + "height": 556, + "image": "https://static-assets.truthsocial.com/tmtg:prime-truth-social-assets/cache/preview_cards/images/000/543/912/original/e1fcf6ace01d9ded.jpg", + "embed_url": "", + "blurhash": "UQH1;m~8sks,%M~9?DRk-mRnR+xs9cWVj[bH" + }, + "poll": null +} diff --git a/app/soapbox/normalizers/__tests__/status-test.js b/app/soapbox/normalizers/__tests__/status-test.js index ebfcb3eee..ac9358f51 100644 --- a/app/soapbox/normalizers/__tests__/status-test.js +++ b/app/soapbox/normalizers/__tests__/status-test.js @@ -195,4 +195,10 @@ describe('normalizeStatus()', () => { expect(result.card.type).toEqual('link'); expect(result.card.provider_url).toEqual('https://soapbox.pub'); }); + + it('preserves Truth Social external_video_id', () => { + const status = require('soapbox/__fixtures__/truthsocial-status-with-external-video.json'); + const result = normalizeStatus(status); + expect(result.media_attachments.get(0).external_video_id).toBe('vwfnq9'); + }); }); diff --git a/app/soapbox/normalizers/attachment.ts b/app/soapbox/normalizers/attachment.ts index 26e616696..de960d258 100644 --- a/app/soapbox/normalizers/attachment.ts +++ b/app/soapbox/normalizers/attachment.ts @@ -15,6 +15,7 @@ import { mergeDefined } from 'soapbox/utils/normalizers'; export const AttachmentRecord = ImmutableRecord({ blurhash: undefined, description: '', + external_video_id: null as string | null, // TruthSocial id: '', meta: ImmutableMap(), pleroma: ImmutableMap(), From b363c203596eaab1e26f92ccaf5744349739fd71 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 30 Mar 2022 10:58:06 -0500 Subject: [PATCH 2/3] Enable Trends and Suggestions for TruthSocial --- app/soapbox/utils/features.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/soapbox/utils/features.ts b/app/soapbox/utils/features.ts index 7e5ca16ed..c9b050f1c 100644 --- a/app/soapbox/utils/features.ts +++ b/app/soapbox/utils/features.ts @@ -48,14 +48,19 @@ const getInstanceFeatures = (instance: Instance) => { ]), suggestions: any([ v.software === MASTODON && gte(v.compatVersion, '2.4.3'), + v.software === TRUTHSOCIAL, features.includes('v2_suggestions'), ]), suggestionsV2: any([ v.software === MASTODON && gte(v.compatVersion, '3.4.0'), + v.software === TRUTHSOCIAL, features.includes('v2_suggestions'), ]), blockersVisible: features.includes('blockers_visible'), - trends: v.software === MASTODON && gte(v.compatVersion, '3.0.0'), + trends: any([ + v.software === MASTODON && gte(v.compatVersion, '3.0.0'), + v.software === TRUTHSOCIAL, + ]), mediaV2: any([ v.software === MASTODON && gte(v.compatVersion, '3.1.3'), // Even though Pleroma supports these endpoints, it has disadvantages From ebc2bf96acdcd1b666d1f6eefa04a9082cd9d428 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 30 Mar 2022 11:03:35 -0500 Subject: [PATCH 3/3] external_video_id: render card html instead of hardcoding the provider --- app/soapbox/components/status.js | 15 +++------------ .../features/status/components/detailed_status.js | 15 +++------------ 2 files changed, 6 insertions(+), 24 deletions(-) diff --git a/app/soapbox/components/status.js b/app/soapbox/components/status.js index ef9aafdbe..eafc14922 100644 --- a/app/soapbox/components/status.js +++ b/app/soapbox/components/status.js @@ -439,8 +439,7 @@ class Status extends ImmutablePureComponent { } else if (size === 1 && status.getIn(['media_attachments', 0, 'type']) === 'video') { const video = status.getIn(['media_attachments', 0]); - const external_id = (video.get('external_video_id')); - if (external_id) { + if (video.external_video_id) { const { mediaWrapperWidth } = this.state; const height = mediaWrapperWidth / (video.getIn(['meta', 'original', 'width']) / video.getIn(['meta', 'original', 'height'])); media = ( @@ -449,16 +448,8 @@ class Status extends ImmutablePureComponent { ref={this.setRef} className='status-card__image status-card-video' style={height ? { height } : {}} - > -