mirror of
https://github.com/neocities/neocities.git
synced 2025-04-25 01:32:36 +02:00
an inappropriate amount of fixes and improvements to the news feeds. if something breaks it's somebody else's fault
This commit is contained in:
parent
6ced50a88d
commit
68e1e2fed2
7 changed files with 58 additions and 21 deletions
|
@ -2,7 +2,15 @@ get '/activity' do
|
||||||
#expires 7200, :public, :must_revalidate if self.class.production? # 2 hours
|
#expires 7200, :public, :must_revalidate if self.class.production? # 2 hours
|
||||||
|
|
||||||
@page = params[:page] || 1
|
@page = params[:page] || 1
|
||||||
@pagination_dataset = Event.global_dataset.paginate(@page.to_i, Event::GLOBAL_PAGINATION_LENGTH)
|
|
||||||
|
@pagination_dataset = Event.global_dataset
|
||||||
|
|
||||||
|
if current_site
|
||||||
|
blocking_site_ids = current_site.blocking_site_ids
|
||||||
|
@pagination_dataset.exclude(events__site_id: blocking_site_ids).exclude(events__actioning_site_id: blocking_site_ids)
|
||||||
|
end
|
||||||
|
|
||||||
|
@pagination_dataset = @pagination_dataset.paginate @page.to_i, Event::GLOBAL_PAGINATION_LENGTH
|
||||||
@events = @pagination_dataset.all
|
@events = @pagination_dataset.all
|
||||||
|
|
||||||
erb :'activity'
|
erb :'activity'
|
||||||
|
|
|
@ -2,6 +2,8 @@ post '/event/:event_id/toggle_like' do |event_id|
|
||||||
require_login
|
require_login
|
||||||
content_type :json
|
content_type :json
|
||||||
event = Event[id: event_id]
|
event = Event[id: event_id]
|
||||||
|
return 403 if event.site.is_blocking?(current_site)
|
||||||
|
return 403 if event.actioning_site.is_blocking?(current_site)
|
||||||
liked_response = event.toggle_site_like(current_site) ? 'liked' : 'unliked'
|
liked_response = event.toggle_site_like(current_site) ? 'liked' : 'unliked'
|
||||||
{result: liked_response, event_like_count: event.likes_dataset.count, liking_site_names: event.liking_site_usernames}.to_json
|
{result: liked_response, event_like_count: event.likes_dataset.count, liking_site_names: event.liking_site_usernames}.to_json
|
||||||
end
|
end
|
||||||
|
@ -11,6 +13,8 @@ post '/event/:event_id/comment' do |event_id|
|
||||||
content_type :json
|
content_type :json
|
||||||
event = Event[id: event_id]
|
event = Event[id: event_id]
|
||||||
|
|
||||||
|
return 403 if event.actioning_site.is_blocking?(current_site)
|
||||||
|
|
||||||
site = event.site
|
site = event.site
|
||||||
|
|
||||||
if(site.is_blocking?(current_site) ||
|
if(site.is_blocking?(current_site) ||
|
||||||
|
|
|
@ -8,14 +8,14 @@ get '/?' do
|
||||||
@page = 1 if @page.not_an_integer?
|
@page = 1 if @page.not_an_integer?
|
||||||
|
|
||||||
if params[:activity] == 'mine'
|
if params[:activity] == 'mine'
|
||||||
events_dataset = current_site.latest_events(@page, 10)
|
events_dataset = current_site.latest_events(@page)
|
||||||
elsif params[:event_id]
|
elsif params[:event_id]
|
||||||
event = Event.select(:id).where(id: params[:event_id]).first
|
event = Event.select(:id).where(id: params[:event_id]).first
|
||||||
not_found if event.nil?
|
not_found if event.nil?
|
||||||
not_found if event.is_deleted
|
not_found if event.is_deleted
|
||||||
events_dataset = Event.where(id: params[:event_id]).paginate(1, 1)
|
events_dataset = Event.where(id: params[:event_id]).paginate(1, 1)
|
||||||
else
|
else
|
||||||
events_dataset = current_site.news_feed(@page, 10)
|
events_dataset = current_site.news_feed(@page)
|
||||||
end
|
end
|
||||||
|
|
||||||
@pagination_dataset = events_dataset
|
@pagination_dataset = events_dataset
|
||||||
|
|
|
@ -21,11 +21,15 @@ get '/site/:username/?' do |username|
|
||||||
|
|
||||||
if params[:event_id]
|
if params[:event_id]
|
||||||
not_found if params[:event_id].not_an_integer?
|
not_found if params[:event_id].not_an_integer?
|
||||||
event = Event.select(:id).where(id: params[:event_id]).exclude(is_deleted: true).first
|
event = Event.where(id: params[:event_id]).exclude(is_deleted: true).first
|
||||||
not_found if event.nil?
|
not_found if event.nil?
|
||||||
|
event_site = event.site
|
||||||
|
event_actioning_site = event.actioning_site
|
||||||
|
not_found if current_site && event_site && event_site.is_blocking?(current_site)
|
||||||
|
not_found if current_site && event_actioning_site && event_actioning_site.is_blocking?(current_site)
|
||||||
events_dataset = Event.where(id: params[:event_id]).paginate(1, 1)
|
events_dataset = Event.where(id: params[:event_id]).paginate(1, 1)
|
||||||
else
|
else
|
||||||
events_dataset = site.latest_events(@page, 10)
|
events_dataset = site.latest_events(@page, current_site)
|
||||||
end
|
end
|
||||||
|
|
||||||
@page_count = events_dataset.page_count || 1
|
@page_count = events_dataset.page_count || 1
|
||||||
|
|
|
@ -15,29 +15,38 @@ class Event < Sequel::Model
|
||||||
|
|
||||||
PAGINATION_LENGTH = 10
|
PAGINATION_LENGTH = 10
|
||||||
GLOBAL_PAGINATION_LENGTH = 20
|
GLOBAL_PAGINATION_LENGTH = 20
|
||||||
GLOBAL_SCORE_LIMIT = 3
|
GLOBAL_SCORE_LIMIT = 2
|
||||||
|
|
||||||
def undeleted_comments_count
|
def undeleted_comments_count
|
||||||
comments_dataset.exclude(is_deleted: true).count
|
comments_dataset.exclude(is_deleted: true).count
|
||||||
end
|
end
|
||||||
|
|
||||||
def undeleted_comments
|
def undeleted_comments(exclude_ids=nil)
|
||||||
comments_dataset.exclude(is_deleted: true).order(:created_at).all
|
ds = comments_dataset.exclude(is_deleted: true).order(:created_at)
|
||||||
|
if exclude_ids
|
||||||
|
ds = ds.exclude actioning_site_id: exclude_ids
|
||||||
|
end
|
||||||
|
ds.all
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.news_feed_default_dataset
|
def self.news_feed_default_dataset
|
||||||
select(:events.*).
|
select(:events.*).
|
||||||
join(:sites, id: :site_id).
|
join(:sites, id: :site_id).
|
||||||
order(:created_at.desc).
|
left_join(Sequel[:sites].as(:actioning_sites), id: :events__actioning_site_id).
|
||||||
|
order(:events__created_at.desc).
|
||||||
exclude(events__is_deleted: true).
|
exclude(events__is_deleted: true).
|
||||||
exclude(sites__is_deleted: true).
|
exclude(sites__is_deleted: true).
|
||||||
exclude(is_nsfw: true).
|
exclude(sites__is_nsfw: true).
|
||||||
exclude(is_crashing: true).
|
exclude(sites__is_crashing: true).
|
||||||
|
exclude(actioning_sites__is_deleted: true).
|
||||||
where(follow_id: nil)
|
where(follow_id: nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.global_dataset
|
def self.global_dataset
|
||||||
news_feed_default_dataset.where{score > GLOBAL_SCORE_LIMIT}
|
news_feed_default_dataset.where(
|
||||||
|
Sequel.expr(Sequel[:sites][:score] > GLOBAL_SCORE_LIMIT) |
|
||||||
|
Sequel.expr(Sequel[:actioning_sites][:score] > GLOBAL_SCORE_LIMIT)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def created_by?(site)
|
def created_by?(site)
|
||||||
|
|
|
@ -648,6 +648,10 @@ class Site < Sequel::Model
|
||||||
@blocking_site_ids ||= blockings_dataset.select(:site_id).all.collect {|s| s.site_id}
|
@blocking_site_ids ||= blockings_dataset.select(:site_id).all.collect {|s| s.site_id}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def block_site_ids
|
||||||
|
@block_site_ids ||= blocks_dataset.select(:actioning_site_id).all.collect {|s| s.actioning_site_id}
|
||||||
|
end
|
||||||
|
|
||||||
def unfollow_blocked_sites!
|
def unfollow_blocked_sites!
|
||||||
blockings.each do |blocking|
|
blockings.each do |blocking|
|
||||||
follows.each do |follow|
|
follows.each do |follow|
|
||||||
|
@ -1384,20 +1388,28 @@ class Site < Sequel::Model
|
||||||
super val
|
super val
|
||||||
end
|
end
|
||||||
|
|
||||||
def latest_events(current_page=1, limit=10)
|
def latest_events(current_page=1, current_site=nil, limit=Event::PAGINATION_LENGTH)
|
||||||
site_id = self.id
|
site_id = self.id
|
||||||
Event.news_feed_default_dataset.where{Sequel.|({site_id: site_id}, {actioning_site_id: site_id})}.
|
ds = Event.news_feed_default_dataset.where{Sequel.|({site_id: site_id}, {actioning_site_id: site_id})}.
|
||||||
order(:created_at.desc).
|
order(:created_at.desc)
|
||||||
paginate(current_page.to_i, limit.to_i)
|
|
||||||
|
if current_site
|
||||||
|
ds = ds.where(
|
||||||
|
Sequel.|(
|
||||||
|
{events__actioning_site_id: nil},
|
||||||
|
Sequel.~(events__actioning_site_id: current_site.block_site_ids)
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def news_feed(current_page=1, limit=10)
|
ds.paginate(current_page.to_i, limit.to_i)
|
||||||
|
end
|
||||||
|
|
||||||
|
def news_feed(current_page=1, limit=Event::PAGINATION_LENGTH)
|
||||||
following_ids = self.followings_dataset.select(:site_id).all.collect {|f| f.site_id}
|
following_ids = self.followings_dataset.select(:site_id).all.collect {|f| f.site_id}
|
||||||
search_ids = following_ids+[self.id]
|
search_ids = following_ids+[self.id]
|
||||||
|
|
||||||
Event.news_feed_default_dataset.where{Sequel.|({site_id: search_ids}, {actioning_site_id: search_ids})}.
|
Event.news_feed_default_dataset.where{Sequel.|({events__actioning_site_id: search_ids})}.paginate(current_page.to_i, limit.to_i)
|
||||||
order(:created_at.desc).
|
|
||||||
paginate(current_page.to_i, limit.to_i)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def newest_follows
|
def newest_follows
|
||||||
|
|
|
@ -129,7 +129,7 @@
|
||||||
<% if event.undeleted_comments_count > 0 %>
|
<% if event.undeleted_comments_count > 0 %>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="comments">
|
<div class="comments">
|
||||||
<% event.undeleted_comments.each do |comment| %>
|
<% event.undeleted_comments(current_site ? current_site.blocking_site_ids : nil).each do |comment| %>
|
||||||
<% comment_actioning_site = comment.actioning_site_dataset.select(:id, :title, :domain, :username, :stripe_customer_id, :plan_type).first %>
|
<% comment_actioning_site = comment.actioning_site_dataset.select(:id, :title, :domain, :username, :stripe_customer_id, :plan_type).first %>
|
||||||
<% comment_event_site = comment.event.site_dataset.select(:id, :title, :domain, :username, :stripe_customer_id, :plan_type).first %>
|
<% comment_event_site = comment.event.site_dataset.select(:id, :title, :domain, :username, :stripe_customer_id, :plan_type).first %>
|
||||||
<div class="comment" id="comment_<%= comment.id %>">
|
<div class="comment" id="comment_<%= comment.id %>">
|
||||||
|
|
Loading…
Add table
Reference in a new issue