From 5c99e304e5d3e9f975d19d7097bfde3ace986ad8 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 16 Mar 2016 10:58:58 +0100 Subject: [PATCH] Deleting statuses, deletion propagation --- README.md | 2 +- app/helpers/atom_builder_helper.rb | 4 ++-- app/models/feed.rb | 2 +- app/models/status.rb | 2 +- app/models/stream_entry.rb | 20 +++++++++++++------- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 592e150c0..f02e5cddd 100644 --- 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 index 8e3652c70..95d7c96ec 100644 --- 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 index 0c0b8ae2c..9f2b34c82 100644 --- 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 index 81744c25e..10f0444e9 100644 --- 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 index e19dcc6c6..0cc959a1c 100644 --- 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