about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-03-16 10:58:58 +0100
committerEugen Rochko <eugen@zeonfederated.com>2016-03-16 10:58:58 +0100
commit5c99e304e5d3e9f975d19d7097bfde3ace986ad8 (patch)
tree9c59226db9ad6127409898668484d6f99d5e0ea3
parent75b3339a99bd32c59004effd05dcd0edfc0b7c2a (diff)
Deleting statuses, deletion propagation
-rw-r--r--README.md2
-rw-r--r--app/helpers/atom_builder_helper.rb4
-rw-r--r--app/models/feed.rb2
-rw-r--r--app/models/status.rb2
-rw-r--r--app/models/stream_entry.rb20
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