queue emails right away if a user is not online, no point waiting.
This commit is contained in:
parent
bb3725cfca
commit
322b5c236c
|
@ -36,7 +36,9 @@ class UserEmailObserver < ActiveRecord::Observer
|
||||||
|
|
||||||
def enqueue(type)
|
def enqueue(type)
|
||||||
return unless notification.user.email_direct?
|
return unless notification.user.email_direct?
|
||||||
Jobs.enqueue_in(SiteSetting.email_time_window_mins.minutes,
|
|
||||||
|
|
||||||
|
Jobs.enqueue_in(delay,
|
||||||
:user_email,
|
:user_email,
|
||||||
type: type,
|
type: type,
|
||||||
user_id: notification.user_id,
|
user_id: notification.user_id,
|
||||||
|
@ -45,12 +47,22 @@ class UserEmailObserver < ActiveRecord::Observer
|
||||||
|
|
||||||
def enqueue_private(type)
|
def enqueue_private(type)
|
||||||
return unless (notification.user.email_direct? && notification.user.email_private_messages?)
|
return unless (notification.user.email_direct? && notification.user.email_private_messages?)
|
||||||
Jobs.enqueue_in(SiteSetting.email_time_window_mins.minutes,
|
Jobs.enqueue_in(delay,
|
||||||
:user_email,
|
:user_email,
|
||||||
type: type,
|
type: type,
|
||||||
user_id: notification.user_id,
|
user_id: notification.user_id,
|
||||||
notification_id: notification.id)
|
notification_id: notification.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delay
|
||||||
|
mins = SiteSetting.email_time_window_mins.minutes
|
||||||
|
if notification.user &&
|
||||||
|
(!notification.user.last_seen_at || notification.user.last_seen_at < mins.ago)
|
||||||
|
0
|
||||||
|
else
|
||||||
|
mins
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def after_commit(notification)
|
def after_commit(notification)
|
||||||
|
@ -65,6 +77,7 @@ class UserEmailObserver < ActiveRecord::Observer
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
|
||||||
def extract_notification_type(notification)
|
def extract_notification_type(notification)
|
||||||
Notification.types[notification.notification_type]
|
Notification.types[notification.notification_type]
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,6 +8,12 @@ describe UserEmailObserver do
|
||||||
let!(:notification) { Fabricate(:notification, user: user) }
|
let!(:notification) { Fabricate(:notification, user: user) }
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
|
Jobs.expects(:enqueue_in).with(0, :user_email, type: :user_mentioned, user_id: notification.user_id, notification_id: notification.id)
|
||||||
|
UserEmailObserver.send(:new).after_commit(notification)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "enqueue a delayed job for users that are online" do
|
||||||
|
user.last_seen_at = 1.minute.ago
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_mentioned, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_mentioned, user_id: notification.user_id, notification_id: notification.id)
|
||||||
UserEmailObserver.send(:new).after_commit(notification)
|
UserEmailObserver.send(:new).after_commit(notification)
|
||||||
end
|
end
|
||||||
|
@ -26,7 +32,7 @@ describe UserEmailObserver do
|
||||||
let!(:notification) { Fabricate(:notification, user: user, notification_type: 9) }
|
let!(:notification) { Fabricate(:notification, user: user, notification_type: 9) }
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_posted, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(0, :user_email, type: :user_posted, user_id: notification.user_id, notification_id: notification.id)
|
||||||
UserEmailObserver.send(:new).after_commit(notification)
|
UserEmailObserver.send(:new).after_commit(notification)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -44,7 +50,7 @@ describe UserEmailObserver do
|
||||||
let!(:notification) { Fabricate(:notification, user: user, notification_type: 2) }
|
let!(:notification) { Fabricate(:notification, user: user, notification_type: 2) }
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_replied, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(0, :user_email, type: :user_replied, user_id: notification.user_id, notification_id: notification.id)
|
||||||
UserEmailObserver.send(:new).after_commit(notification)
|
UserEmailObserver.send(:new).after_commit(notification)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -62,13 +68,13 @@ describe UserEmailObserver do
|
||||||
let!(:notification) { Fabricate(:notification, user: user, notification_type: 3) }
|
let!(:notification) { Fabricate(:notification, user: user, notification_type: 3) }
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_quoted, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(0, :user_email, type: :user_quoted, user_id: notification.user_id, notification_id: notification.id)
|
||||||
UserEmailObserver.send(:new).after_commit(notification)
|
UserEmailObserver.send(:new).after_commit(notification)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't enqueue an email if the user has mention emails disabled" do
|
it "doesn't enqueue an email if the user has mention emails disabled" do
|
||||||
user.expects(:email_direct?).returns(false)
|
user.expects(:email_direct?).returns(false)
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, has_entry(type: :user_quoted)).never
|
Jobs.expects(:enqueue_in).with(0, :user_email, has_entry(type: :user_quoted)).never
|
||||||
UserEmailObserver.send(:new).after_commit(notification)
|
UserEmailObserver.send(:new).after_commit(notification)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -80,16 +86,16 @@ describe UserEmailObserver do
|
||||||
let!(:notification) { Fabricate(:notification, user: user, notification_type: 7) }
|
let!(:notification) { Fabricate(:notification, user: user, notification_type: 7) }
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_invited_to_private_message, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(0, :user_email, type: :user_invited_to_private_message, user_id: notification.user_id, notification_id: notification.id)
|
||||||
UserEmailObserver.send(:new).after_commit(notification)
|
UserEmailObserver.send(:new).after_commit(notification)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't enqueue an email if the user has mention emails disabled" do
|
it "doesn't enqueue an email if the user has mention emails disabled" do
|
||||||
user.expects(:email_direct?).returns(false)
|
user.expects(:email_direct?).returns(false)
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, has_entry(type: :user_invited_to_private_message)).never
|
Jobs.expects(:enqueue_in).with(0, :user_email, has_entry(type: :user_invited_to_private_message)).never
|
||||||
UserEmailObserver.send(:new).after_commit(notification)
|
UserEmailObserver.send(:new).after_commit(notification)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue