diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2016-09-17 17:47:26 +0200 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2016-09-17 17:47:26 +0200 |
commit | bd5ad304bac69b34a3c223e9baac532106db7dd8 (patch) | |
tree | 46d98c91108401e19a5065103b7c1f48db91def8 /app | |
parent | 183a23943bba2c214c56bf43c706f3f34d9bde32 (diff) |
Adding media controller, 1 webm/compose form allowed, previews generated
Diffstat (limited to 'app')
-rw-r--r-- | app/assets/javascripts/components/components/status.jsx | 3 | ||||
-rw-r--r-- | app/assets/javascripts/components/components/upload_form.jsx | 4 | ||||
-rw-r--r-- | app/assets/javascripts/components/features/status/index.jsx | 18 | ||||
-rw-r--r-- | app/controllers/media_controller.rb | 13 | ||||
-rw-r--r-- | app/models/media_attachment.rb | 6 | ||||
-rw-r--r-- | app/views/api/media/create.rabl | 3 |
6 files changed, 41 insertions, 6 deletions
diff --git a/app/assets/javascripts/components/components/status.jsx b/app/assets/javascripts/components/components/status.jsx index 3882fc97f..8cdbd5625 100644 --- a/app/assets/javascripts/components/components/status.jsx +++ b/app/assets/javascripts/components/components/status.jsx @@ -40,8 +40,9 @@ const Status = React.createClass({ if (e.button === 0) { e.preventDefault(); hashHistory.push(`/accounts/${id}`); - e.stopPropagation(); } + + e.stopPropagation(); }, render () { diff --git a/app/assets/javascripts/components/components/upload_form.jsx b/app/assets/javascripts/components/components/upload_form.jsx index 429e672c0..f0b6f7992 100644 --- a/app/assets/javascripts/components/components/upload_form.jsx +++ b/app/assets/javascripts/components/components/upload_form.jsx @@ -25,9 +25,11 @@ const UploadForm = React.createClass({ ); }.bind(this)); + const noMoreAllowed = (this.props.media.some(m => m.get('type') === 'video')) || (this.props.media.size > 3); + return ( <div style={{ marginBottom: '20px', padding: '10px', paddingTop: '0' }}> - <UploadButton onSelectFile={this.props.onSelectFile} disabled={this.props.is_uploading || this.props.media.size > 3} /> + <UploadButton onSelectFile={this.props.onSelectFile} disabled={this.props.is_uploading || noMoreAllowed } /> <div style={{ marginTop: '10px', overflow: 'hidden' }}> {uploads} diff --git a/app/assets/javascripts/components/features/status/index.jsx b/app/assets/javascripts/components/features/status/index.jsx index 122db8906..39bc2bec5 100644 --- a/app/assets/javascripts/components/features/status/index.jsx +++ b/app/assets/javascripts/components/features/status/index.jsx @@ -4,6 +4,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { fetchStatus } from '../../actions/statuses'; import Immutable from 'immutable'; import EmbeddedStatus from '../../components/status'; +import { favourite, reblog } from '../../actions/interactions'; +import { replyCompose } from '../../actions/compose'; function selectStatus(state, id) { let status = state.getIn(['timelines', 'statuses', id]); @@ -49,8 +51,20 @@ const Status = React.createClass({ } }, + handleFavouriteClick (status) { + this.props.dispatch(favourite(status)); + }, + + handleReplyClick (status) { + this.props.dispatch(replyCompose(status)); + }, + + handleReblogClick (status) { + this.props.dispatch(reblog(status)); + }, + renderChildren (list) { - return list.map(s => <EmbeddedStatus status={s} key={s.get('id')} />); + return list.map(s => <EmbeddedStatus status={s} key={s.get('id')} onReply={this.handleReplyClick} onFavourite={this.handleFavouriteClick} onReblog={this.handleReblogClick} />); }, render () { @@ -63,7 +77,7 @@ const Status = React.createClass({ return ( <div> {this.renderChildren(ancestors)} - <EmbeddedStatus status={status} /> + <EmbeddedStatus status={status} onReply={this.handleReplyClick} onFavourite={this.handleFavouriteClick} onReblog={this.handleReblogClick} /> {this.renderChildren(descendants)} </div> ); diff --git a/app/controllers/media_controller.rb b/app/controllers/media_controller.rb new file mode 100644 index 000000000..5a7b0bcbd --- /dev/null +++ b/app/controllers/media_controller.rb @@ -0,0 +1,13 @@ +class MediaController < ApplicationController + before_action :set_media_attachment + + def show + redirect TagManager.instance.url_for(@media_attachment.status) + end + + private + + def set_media_attachment + @media_attachment = MediaAttachment.where.not(status_id: nil).find(params[:id]) + end +end diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 7dddfd610..73fb967c4 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -5,7 +5,7 @@ class MediaAttachment < ApplicationRecord belongs_to :account, inverse_of: :media_attachments belongs_to :status, inverse_of: :media_attachments - has_attached_file :file, styles: lambda { |f| f.instance.image? ? { small: '510x680>' } : { small: { format: 'webm' } } }, processors: lambda { |f| f.video? ? [:transcoder] : [:thumbnail] } + has_attached_file :file, styles: lambda { |f| f.instance.image? ? { small: '510x680>' } : { small: { convert_options: { output: { vf: 'scale="min(510\, iw):min(680\, ih)":force_original_aspect_ratio=decrease' } }, format: 'png', time: 1 } } }, processors: lambda { |f| f.video? ? [:transcoder] : [:thumbnail] } validates_attachment_content_type :file, content_type: IMAGE_MIME_TYPES + VIDEO_MIME_TYPES validates_attachment_size :file, less_than: 4.megabytes @@ -26,4 +26,8 @@ class MediaAttachment < ApplicationRecord def video? VIDEO_MIME_TYPES.include? file_content_type end + + def type + image? ? 'image' : 'video' + end end diff --git a/app/views/api/media/create.rabl b/app/views/api/media/create.rabl index 0239aa585..803a93094 100644 --- a/app/views/api/media/create.rabl +++ b/app/views/api/media/create.rabl @@ -1,4 +1,5 @@ object @media -attribute :id +attribute :id, :type node(:url) { |media| full_asset_url(media.file.url) } node(:preview_url) { |media| full_asset_url(media.file.url(:small)) } +node(:text_url) { |media| medium_url(media) } |