mirror of https://github.com/mastodon/mastodon
48 lines
1.2 KiB
Ruby
48 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
# == Schema Information
|
|
#
|
|
# Table name: encrypted_messages
|
|
#
|
|
# id :bigint(8) not null, primary key
|
|
# device_id :bigint(8)
|
|
# from_account_id :bigint(8)
|
|
# from_device_id :string default(""), not null
|
|
# type :integer default(0), not null
|
|
# body :text default(""), not null
|
|
# digest :text default(""), not null
|
|
# message_franking :text default(""), not null
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
#
|
|
|
|
class EncryptedMessage < ApplicationRecord
|
|
self.inheritance_column = nil
|
|
|
|
include Paginable
|
|
|
|
scope :up_to, ->(id) { where(arel_table[:id].lteq(id)) }
|
|
|
|
belongs_to :device
|
|
belongs_to :from_account, class_name: 'Account'
|
|
|
|
around_create Mastodon::Snowflake::Callbacks
|
|
|
|
after_commit :push_to_streaming_api
|
|
|
|
private
|
|
|
|
def push_to_streaming_api
|
|
return if destroyed? || !subscribed_to_timeline?
|
|
|
|
PushEncryptedMessageWorker.perform_async(id)
|
|
end
|
|
|
|
def subscribed_to_timeline?
|
|
Redis.current.exists?("subscribed:#{streaming_channel}")
|
|
end
|
|
|
|
def streaming_channel
|
|
"timeline:#{device.account_id}:#{device.device_id}"
|
|
end
|
|
end
|