Class: Twterm::Tab::DirectMessage::Conversation
Instance Attribute Summary
Attributes inherited from AbstractTab
#window
Instance Method Summary
collapse
Methods included from Loadable
#initially_loaded!, #initially_loaded?
Methods included from Subscriber
included, #subscribe, #unsubscribe
Methods included from Scrollable
#scroller, #total_item_count
Methods inherited from AbstractTab
#==, #close, #find_or_fetch_list, #find_or_fetch_status, #find_or_fetch_user, #render
Constructor Details
#initialize(app, client, conversation) ⇒ Conversation
51
52
53
54
55
56
57
|
# File 'lib/twterm/tab/direct_message/conversation.rb', line 51
def initialize(app, client, conversation)
super(app, client)
@conversation = conversation
subscribe(Event::DirectMessage::Fetched) { initially_loaded! }
end
|
Instance Method Details
#drawable_item_count ⇒ Object
17
18
19
20
21
22
23
24
|
# File 'lib/twterm/tab/direct_message/conversation.rb', line 17
def drawable_item_count
messages.drop(scroller.offset).lazy
.map { |m| m.text.split_by_width(window.maxx - 4).count + 2 }
.scan(0, :+)
.each_cons(2)
.select { |_, l| l < window.maxy }
.count
end
|
#image ⇒ Object
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/twterm/tab/direct_message/conversation.rb', line 26
def image
return Image.string(initially_loaded? ? 'No results found' : 'Loading...') if items.empty?
scroller.drawable_items.map.with_index(0) do |message, i|
sender = app.user_repository.find(message.sender_id)
= [
ImageBuilder::UserNameImageBuilder.new(sender).build,
Image.string(message.date.to_s).brackets,
].intersperse(Image.whitespace).reduce(Image.empty, :-)
body = message.text.split_by_width(window.maxx - 4)
.map { |x| Image.string(x) }
.reduce(Image.empty, :|)
m = | body
cursor = Image.cursor(m.height, scroller.current_index?(i))
cursor - Image.whitespace - m
end
.intersperse(Image.blank_line)
.reduce(Image.empty, :|)
end
|
#items ⇒ Object
59
60
61
|
# File 'lib/twterm/tab/direct_message/conversation.rb', line 59
def items
messages
end
|
#matches?(message, query) ⇒ Boolean
63
64
65
66
67
68
69
70
71
|
# File 'lib/twterm/tab/direct_message/conversation.rb', line 63
def matches?(message, query)
sender = app.user_repository.find(message.sender_id)
[
message.text,
sender.screen_name,
sender.name
].any? { |x| x.downcase.include?(query.downcase) }
end
|
#respond_to_key(key) ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/twterm/tab/direct_message/conversation.rb', line 73
def respond_to_key(key)
return true if scroller.respond_to_key(key)
k = KeyMapper.instance
case key
when k[:status, :compose], k[:status, :reply]
collocutor = app.user_repository.find(conversation.collocutor_id)
app.direct_message_composer.compose(collocutor)
else
return false
end
true
end
|
#title ⇒ Object
89
90
91
92
|
# File 'lib/twterm/tab/direct_message/conversation.rb', line 89
def title
collocutor = app.user_repository.find(conversation.collocutor_id)
'@%s messages' % collocutor.screen_name
end
|