| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ActivityPub::NoteSerializer < ActiveModel::Serializer | 
					
						
							|  |  |  |   attributes :id, :type, :summary, :content, | 
					
						
							|  |  |  |              :in_reply_to, :published, :url, | 
					
						
							| 
									
										
										
										
											2017-09-02 14:01:23 +02:00
										 |  |  |              :attributed_to, :to, :cc, :sensitive, | 
					
						
							|  |  |  |              :atom_uri, :in_reply_to_atom_uri, | 
					
						
							|  |  |  |              :conversation | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   has_many :media_attachments, key: :attachment | 
					
						
							|  |  |  |   has_many :virtual_tags, key: :tag | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def id | 
					
						
							|  |  |  |     ActivityPub::TagManager.instance.uri_for(object) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def type | 
					
						
							|  |  |  |     'Note' | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def summary | 
					
						
							|  |  |  |     object.spoiler_text.presence | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def content | 
					
						
							|  |  |  |     Formatter.instance.format(object) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def in_reply_to | 
					
						
							| 
									
										
										
										
											2017-09-16 22:00:36 +09:00
										 |  |  |     return unless object.reply? && !object.thread.nil? | 
					
						
							| 
									
										
										
										
											2017-08-19 18:44:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if object.thread.uri.nil? || object.thread.uri.start_with?('http') | 
					
						
							|  |  |  |       ActivityPub::TagManager.instance.uri_for(object.thread) | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       object.thread.url | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def published | 
					
						
							|  |  |  |     object.created_at.iso8601 | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def url | 
					
						
							|  |  |  |     ActivityPub::TagManager.instance.url_for(object) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-16 10:28:55 +02:00
										 |  |  |   def attributed_to | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |     ActivityPub::TagManager.instance.uri_for(object.account) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def to | 
					
						
							|  |  |  |     ActivityPub::TagManager.instance.to(object) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def cc | 
					
						
							|  |  |  |     ActivityPub::TagManager.instance.cc(object) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def virtual_tags | 
					
						
							| 
									
										
										
										
											2018-03-22 11:31:17 +01:00
										 |  |  |     object.mentions.to_a.sort_by(&:id) + object.tags + object.emojis | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-17 21:35:00 +02:00
										 |  |  |   def atom_uri | 
					
						
							| 
									
										
										
										
											2017-09-02 14:01:23 +02:00
										 |  |  |     return unless object.local? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-20 01:08:08 +09:00
										 |  |  |     OStatus::TagManager.instance.uri_for(object) | 
					
						
							| 
									
										
										
										
											2017-08-17 21:35:00 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-26 19:55:10 +02:00
										 |  |  |   def in_reply_to_atom_uri | 
					
						
							| 
									
										
										
										
											2017-09-16 22:00:36 +09:00
										 |  |  |     return unless object.reply? && !object.thread.nil? | 
					
						
							| 
									
										
										
										
											2017-08-26 19:55:10 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-20 01:08:08 +09:00
										 |  |  |     OStatus::TagManager.instance.uri_for(object.thread) | 
					
						
							| 
									
										
										
										
											2017-08-26 19:55:10 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-02 14:01:23 +02:00
										 |  |  |   def conversation | 
					
						
							| 
									
										
										
										
											2017-09-12 00:57:18 +02:00
										 |  |  |     return if object.conversation.nil? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-02 14:01:23 +02:00
										 |  |  |     if object.conversation.uri? | 
					
						
							|  |  |  |       object.conversation.uri | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2017-09-20 01:08:08 +09:00
										 |  |  |       OStatus::TagManager.instance.unique_tag(object.conversation.created_at, object.conversation.id, 'Conversation') | 
					
						
							| 
									
										
										
										
											2017-09-02 14:01:23 +02:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-17 21:35:00 +02:00
										 |  |  |   def local? | 
					
						
							|  |  |  |     object.account.local? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |   class MediaAttachmentSerializer < ActiveModel::Serializer | 
					
						
							|  |  |  |     include RoutingHelper | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-28 15:31:31 +02:00
										 |  |  |     attributes :type, :media_type, :url, :name | 
					
						
							| 
									
										
										
										
											2018-03-04 07:21:41 +01:00
										 |  |  |     attribute :focal_point, if: :focal_point? | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def type | 
					
						
							|  |  |  |       'Document' | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-28 15:31:31 +02:00
										 |  |  |     def name | 
					
						
							|  |  |  |       object.description | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |     def media_type | 
					
						
							|  |  |  |       object.file_content_type | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def url | 
					
						
							|  |  |  |       object.local? ? full_asset_url(object.file.url(:original, false)) : object.remote_url | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2018-03-04 07:21:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def focal_point? | 
					
						
							|  |  |  |       object.file.meta.is_a?(Hash) && object.file.meta['focus'].is_a?(Hash) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def focal_point | 
					
						
							|  |  |  |       [object.file.meta['focus']['x'], object.file.meta['focus']['y']] | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   class MentionSerializer < ActiveModel::Serializer | 
					
						
							|  |  |  |     attributes :type, :href, :name | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def type | 
					
						
							|  |  |  |       'Mention' | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def href | 
					
						
							|  |  |  |       ActivityPub::TagManager.instance.uri_for(object.account) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def name | 
					
						
							|  |  |  |       "@#{object.account.acct}" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   class TagSerializer < ActiveModel::Serializer | 
					
						
							|  |  |  |     include RoutingHelper | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     attributes :type, :href, :name | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def type | 
					
						
							|  |  |  |       'Hashtag' | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def href | 
					
						
							|  |  |  |       tag_url(object) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def name | 
					
						
							|  |  |  |       "##{object.name}" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-09-19 02:42:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-07 17:43:42 +02:00
										 |  |  |   class CustomEmojiSerializer < ActivityPub::EmojiSerializer | 
					
						
							| 
									
										
										
										
											2017-09-19 02:42:40 +02:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-07-15 03:01:39 +02:00
										 |  |  | end |