Class: Twterm::Tab::DirectMessage::Conversation

Inherits:
AbstractTab
  • Object
show all
Includes:
Subscriber, Loadable, Searchable
Defined in:
lib/twterm/tab/direct_message/conversation.rb

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_countObject



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

#imageObject



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)

    header = [
      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 = header | body

    cursor = Image.cursor(m.height, scroller.current_index?(i))

    cursor - Image.whitespace - m
  end
    .intersperse(Image.blank_line)
    .reduce(Image.empty, :|)
end

#itemsObject



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

#titleObject



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