commit: 5c99e304e5d3e9f975d19d7097bfde3ace986ad8
parent: 75b3339a99bd32c59004effd05dcd0edfc0b7c2a
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Wed, 16 Mar 2016 10:58:58 +0100
Deleting statuses, deletion propagation
Diffstat:
5 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/README.md b/README.md
@@ -16,12 +16,12 @@ Mastodon is a federated microblogging engine. An alternative implementation of t
- REST API, including home and mention timelines
- OAuth2 provider system for the API
- Upload header image for profile page
+- Deleting statuses, deletion propagation
Missing:
- Media attachments (photos, videos)
- UI to post, reblog, favourite, follow and unfollow
-- Deleting statuses, deletion propagation
- Streaming API
## Configuration
diff --git a/app/helpers/atom_builder_helper.rb b/app/helpers/atom_builder_helper.rb
@@ -147,8 +147,8 @@ module AtomBuilderHelper
def include_entry(xml, stream_entry)
unique_id xml, stream_entry.created_at, stream_entry.activity_id, stream_entry.activity_type
- published_at xml, stream_entry.activity.created_at
- updated_at xml, stream_entry.activity.updated_at
+ published_at xml, stream_entry.created_at
+ updated_at xml, stream_entry.updated_at
title xml, stream_entry.title
content xml, stream_entry.content
verb xml, stream_entry.verb
diff --git a/app/models/feed.rb b/app/models/feed.rb
@@ -12,7 +12,7 @@ class Feed
return PrecomputeFeedService.new.(@type, @account).take(limit) if unhydrated.empty? && offset == 0
Status.where(id: unhydrated).with_includes.with_counters.each { |status| status_map[status.id.to_s] = status }
- return unhydrated.map { |id| status_map[id] }
+ return unhydrated.map { |id| status_map[id] }.compact
end
private
diff --git a/app/models/status.rb b/app/models/status.rb
@@ -4,7 +4,7 @@ class Status < ActiveRecord::Base
belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies
belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs
- has_one :stream_entry, as: :activity, dependent: :destroy
+ has_one :stream_entry, as: :activity
has_many :favourites, inverse_of: :status, dependent: :destroy
has_many :reblogs, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblog, dependent: :destroy
diff --git a/app/models/stream_entry.rb b/app/models/stream_entry.rb
@@ -5,11 +5,11 @@ class StreamEntry < ActiveRecord::Base
validates :account, :activity, presence: true
def object_type
- targeted? ? :activity : self.activity.object_type
+ orphaned? ? :activity : (targeted? ? :activity : self.activity.object_type)
end
def verb
- self.activity.verb
+ orphaned? ? :delete : self.activity.verb
end
def targeted?
@@ -17,15 +17,15 @@ class StreamEntry < ActiveRecord::Base
end
def target
- self.activity.target
+ orphaned? ? nil : self.activity.target
end
def title
- self.activity.title
+ orphaned? ? nil : self.activity.title
end
def content
- self.activity.content
+ orphaned? ? nil : self.activity.content
end
def threaded?
@@ -33,10 +33,16 @@ class StreamEntry < ActiveRecord::Base
end
def thread
- self.activity.thread
+ orphaned? ? nil : self.activity.thread
end
def mentions
- self.activity.mentions
+ orphaned? ? [] : self.activity.mentions
+ end
+
+ private
+
+ def orphaned?
+ self.activity.nil?
end
end