blob: c6daedc07b44e2d845c249687893922c37ac04ed (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
class TweetsController < ApplicationController
def show
@tweet = Tweet.find(params[:id])
@user = @tweet.user
authorize_to_show_user! @user
@replies_before = @tweet.reply_ancestors(2)
@replies_after = @tweet.reply_descendants(2)
end
def user_index
begin
user_best
render :user_best
rescue Aclog::Exceptions::AccountPrivate
user_timeline
render :user_timeline
end
end
def user_best
@user = require_user
authorize_to_show_user! @user
authorize_to_show_user_best! @user
@tweets = paginate_with_page_number(@user.tweets.reacted.order_by_reactions)
end
def user_recent
@user = require_user
authorize_to_show_user! @user
authorize_to_show_user_best! @user
@tweets = paginate_with_page_number(@user.tweets.reacted.recent.order_by_reactions)
end
def user_timeline
@user = require_user
authorize_to_show_user! @user
@tweets = paginate(@user.tweets.reacted(params[:reactions]).order_by_id)
end
def user_discoveries
@user = require_user
authorize_to_show_user! @user
@tweets = paginate(Tweet).discovered_by(@user).order_by_id
end
def user_favorites
@user = require_user
authorize_to_show_user! @user
@tweets = paginate(Tweet).favorited_by(@user).order_by_id
end
def user_retweets
@user = require_user
authorize_to_show_user! @user
@tweets = paginate(Tweet).retweeted_by(@user).order_by_id
end
def user_discovered_by
@user = require_user
authorize_to_show_user! @user
@source_user = User.find(id: params[:user_id_b], screen_name: params[:screen_name_b])
authorize_to_show_user! @source_user
@tweets = paginate(@user.tweets).discovered_by(@source_user).order_by_id
end
def all_best
@tweets = paginate_with_page_number(Tweet.reacted.order_by_reactions)
end
def all_recent
@tweets = paginate_with_page_number(Tweet.recent.reacted.order_by_reactions)
end
def all_timeline
@tweets = paginate(Tweet.reacted(params[:reactions]).order_by_id)
end
def filter
@tweets = paginate(Tweet.reacted.recent(7).filter_by_query(params[:q].to_s).not_protected.order_by_id)
end
def import
raise Aclog::Exceptions::LoginRequired unless logged_in?
tweet = current_user.account.import(params[:id])
redirect_to tweet
end
private
def require_user
User.find(id: params[:user_id], screen_name: params[:screen_name])
end
def paginate(tweets)
if params[:page]
paginate_with_page_number(tweets)
else
tweets.limit(params_count).max_id(params[:max_id]).since_id(params[:since_id])
end
end
def paginate_with_page_number(tweets)
@page = (params[:page] || 1).to_i
tweets.limit(params_count).page(@page)
end
def params_count
[(params[:count] || Settings.tweets.count.default).to_i, Settings.tweets.count.max].min
end
def render(*args)
if @tweets
if @page
@prev_url = @page == 1 ? nil : url_for(params.merge(page: @page - 1))
@next_url = url_for(params.merge(page: @page + 1))
else
if @tweets.length > 0
@prev_url = url_for(params.tap {|h| h.delete(:max_id) }.merge(since_id: @tweets.first.id))
@next_url = url_for(params.tap {|h| h.delete(:since_id) }.merge(max_id: @tweets.last.id - 1))
end
end
end
if @tweets && request.xhr?
super(json: { html: render_to_string(partial: "tweet", collection: @tweets, as: :tweet, formats: :html),
next_url: @next_url,
prev_url: @prev_url })
else
super(*args)
end
end
end
|