Conflicts: - `app/models/status.rb`: Upstream updated media and edit-related code textually close to glitch-soc additions (local-only and content-type). Ported upstream changes. - `app/models/status_edit.rb`: Upstream changes textually close to glitch-soc additions (content-type). Ported upstream changes. - `app/serializers/activitypub/note_serializer.rb`: Upstream changed how media attachments are handled. Not really a conflict, but textually close to glitch-soc additions (directMessage attribute). Ported upstream changes. - `app/services/remove_status_service.rb`: Upstream changed how media attachments are handled. Not really a conflict, but textually close to glitch-soc additions (DM timeline). Ported upstream changes. - `app/services/update_status_service.rb`: Upstream fixed an issue with language selection. Not really a conflict, but textually close to glitch-soc additions (content-type). Ported upstream changes. - `db/schema.rb`: Upstream added columns to the `status_edits` table, the conflict is because of an additional column (`content-type`) in glitch-soc. Ported upstream changes. - `package.json`: Upstream dependency (express) textually adjacent to a glitch-soc-specific one (favico.js) got updated. Updated it as well.local
commit
24e83246f9
168 changed files with 1823 additions and 725 deletions
@ -0,0 +1,116 @@ |
||||
import React from 'react'; |
||||
import PropTypes from 'prop-types'; |
||||
import ImmutablePropTypes from 'react-immutable-proptypes'; |
||||
import ImmutablePureComponent from 'react-immutable-pure-component'; |
||||
import { MediaGallery, Video, Audio } from 'mastodon/features/ui/util/async-components'; |
||||
import Bundle from 'mastodon/features/ui/components/bundle'; |
||||
import noop from 'lodash/noop'; |
||||
|
||||
export default class MediaAttachments extends ImmutablePureComponent { |
||||
|
||||
static propTypes = { |
||||
status: ImmutablePropTypes.map.isRequired, |
||||
height: PropTypes.number, |
||||
width: PropTypes.number, |
||||
}; |
||||
|
||||
static defaultProps = { |
||||
height: 110, |
||||
width: 239, |
||||
}; |
||||
|
||||
updateOnProps = [ |
||||
'status', |
||||
]; |
||||
|
||||
renderLoadingMediaGallery = () => { |
||||
const { height, width } = this.props; |
||||
|
||||
return ( |
||||
<div className='media-gallery' style={{ height, width }} /> |
||||
); |
||||
} |
||||
|
||||
renderLoadingVideoPlayer = () => { |
||||
const { height, width } = this.props; |
||||
|
||||
return ( |
||||
<div className='video-player' style={{ height, width }} /> |
||||
); |
||||
} |
||||
|
||||
renderLoadingAudioPlayer = () => { |
||||
const { height, width } = this.props; |
||||
|
||||
return ( |
||||
<div className='audio-player' style={{ height, width }} /> |
||||
); |
||||
} |
||||
|
||||
render () { |
||||
const { status, width, height } = this.props; |
||||
const mediaAttachments = status.get('media_attachments'); |
||||
|
||||
if (mediaAttachments.size === 0) { |
||||
return null; |
||||
} |
||||
|
||||
if (mediaAttachments.getIn([0, 'type']) === 'audio') { |
||||
const audio = mediaAttachments.get(0); |
||||
|
||||
return ( |
||||
<Bundle fetchComponent={Audio} loading={this.renderLoadingAudioPlayer} > |
||||
{Component => ( |
||||
<Component |
||||
src={audio.get('url')} |
||||
alt={audio.get('description')} |
||||
width={width} |
||||
height={height} |
||||
poster={audio.get('preview_url') || status.getIn(['account', 'avatar_static'])} |
||||
backgroundColor={audio.getIn(['meta', 'colors', 'background'])} |
||||
foregroundColor={audio.getIn(['meta', 'colors', 'foreground'])} |
||||
accentColor={audio.getIn(['meta', 'colors', 'accent'])} |
||||
duration={audio.getIn(['meta', 'original', 'duration'], 0)} |
||||
/> |
||||
)} |
||||
</Bundle> |
||||
); |
||||
} else if (mediaAttachments.getIn([0, 'type']) === 'video') { |
||||
const video = mediaAttachments.get(0); |
||||
|
||||
return ( |
||||
<Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} > |
||||
{Component => ( |
||||
<Component |
||||
preview={video.get('preview_url')} |
||||
frameRate={video.getIn(['meta', 'original', 'frame_rate'])} |
||||
blurhash={video.get('blurhash')} |
||||
src={video.get('url')} |
||||
alt={video.get('description')} |
||||
width={width} |
||||
height={height} |
||||
inline |
||||
sensitive={status.get('sensitive')} |
||||
onOpenVideo={noop} |
||||
/> |
||||
)} |
||||
</Bundle> |
||||
); |
||||
} else { |
||||
return ( |
||||
<Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery} > |
||||
{Component => ( |
||||
<Component |
||||
media={mediaAttachments} |
||||
sensitive={status.get('sensitive')} |
||||
defaultWidth={width} |
||||
height={height} |
||||
onOpenMedia={noop} |
||||
/> |
||||
)} |
||||
</Bundle> |
||||
); |
||||
} |
||||
} |
||||
|
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue