Class: Twterm::Tab::DirectMessage::ConversationList

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

Instance Attribute Summary

Attributes inherited from AbstractTab

#window

Instance Method Summary collapse

Methods included from Subscriber

included, #subscribe, #unsubscribe

Methods included from Scrollable

#scroller, #total_item_count

Methods included from Loadable

#initially_loaded!, #initially_loaded?

Methods inherited from AbstractTab

#close, #find_or_fetch_list, #find_or_fetch_status, #find_or_fetch_user, #render

Constructor Details

#initialize(app, client) ⇒ ConversationList

Returns a new instance of ConversationList.



42
43
44
45
46
# File 'lib/twterm/tab/direct_message/conversation_list.rb', line 42

def initialize(app, client)
  super(app, client)

  subscribe(Event::DirectMessage::Fetched) { initially_loaded! }
end

Instance Method Details

#==(other) ⇒ Object



48
49
50
# File 'lib/twterm/tab/direct_message/conversation_list.rb', line 48

def ==(other)
  other.is_a?(self.class)
end

#drawable_item_countObject



17
18
19
# File 'lib/twterm/tab/direct_message/conversation_list.rb', line 17

def drawable_item_count
  window.maxy.-(2).div(3)
end

#imageObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/twterm/tab/direct_message/conversation_list.rb', line 21

def image
  return Image.string(initially_loaded? ? 'No results found' : 'Loading...') if items.empty?

  scroller.drawable_items.map.with_index(0) do |conversation, i|
    cursor = Image.cursor(2, scroller.current_index?(i))

    collocutor = app.user_repository.find(conversation.collocutor_id)

    header = [
      ImageBuilder::UserNameImageBuilder.new(collocutor).build,
      Image.string(conversation.updated_at.to_s).brackets,
    ].intersperse(Image.whitespace).reduce(Image.empty, :-)

    body = Image.string(conversation.preview.split_by_width(window.maxx - 4).first)

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

#itemsObject



52
53
54
# File 'lib/twterm/tab/direct_message/conversation_list.rb', line 52

def items
  client.direct_message_conversations
end

#matches?(conversation, query) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
59
60
61
62
63
64
# File 'lib/twterm/tab/direct_message/conversation_list.rb', line 56

def matches?(conversation, query)
  collocutor = app.user_repository.find(conversation.collocutor_id)

  [
    collocutor.name,
    collocutor.screen_name,
    conversation.preview
  ].any? { |x| x.downcase.include?(query.downcase) }
end

#respond_to_key(key) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/twterm/tab/direct_message/conversation_list.rb', line 66

def respond_to_key(key)
  return true if scroller.respond_to_key(key)

  k = KeyMapper.instance

  case key
  when 10
    open_conversation
  when k[:status, :compose], k[:status, :reply]
    conversation = current_item
    collocutor = app.user_repository.find(conversation.collocutor_id)
    app.direct_message_composer.compose(collocutor)
  else
    return false
  end

  true
end

#titleObject



85
86
87
# File 'lib/twterm/tab/direct_message/conversation_list.rb', line 85

def title
  'Direct Messages'
end