twterm 2.5.1 → 2.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +62 -0
- data/.gitignore +1 -0
- data/Makefile +21 -0
- data/README.md +52 -6
- data/bin/twterm +1 -3
- data/default.nix +21 -0
- data/gemset.nix +4981 -0
- data/lib/twterm/app.rb +13 -26
- data/lib/twterm/client.rb +1 -6
- data/lib/twterm/color_manager.rb +8 -9
- data/lib/twterm/image.rb +31 -0
- data/lib/twterm/image/attr.rb +42 -0
- data/lib/twterm/image/bold.rb +7 -21
- data/lib/twterm/image/color.rb +9 -15
- data/lib/twterm/image/dim.rb +13 -0
- data/lib/twterm/image/underlined.rb +17 -0
- data/lib/twterm/image_builder/user_name_image_builder.rb +1 -0
- data/lib/twterm/key_mapper.rb +6 -8
- data/lib/twterm/key_mapper/abstract_key_mapper.rb +2 -2
- data/lib/twterm/list.rb +36 -1
- data/lib/twterm/message_window.rb +4 -13
- data/lib/twterm/persistable_configuration_proxy.rb +6 -6
- data/lib/twterm/preferences.rb +8 -1
- data/lib/twterm/rest_client.rb +0 -33
- data/lib/twterm/screen.rb +103 -25
- data/lib/twterm/search_query_window.rb +5 -13
- data/lib/twterm/status.rb +10 -0
- data/lib/twterm/tab/abstract_tab.rb +30 -16
- data/lib/twterm/tab/new/index.rb +0 -10
- data/lib/twterm/tab/new/search.rb +2 -2
- data/lib/twterm/tab/new/user.rb +2 -2
- data/lib/twterm/tab/preferences/control.rb +77 -0
- data/lib/twterm/tab/preferences/index.rb +6 -0
- data/lib/twterm/tab/scrollable.rb +1 -1
- data/lib/twterm/tab/searchable.rb +6 -4
- data/lib/twterm/tab/status_tab.rb +10 -0
- data/lib/twterm/tab/statuses/abstract_statuses_tab.rb +11 -6
- data/lib/twterm/tab/statuses/home.rb +0 -3
- data/lib/twterm/tab/statuses/mentions.rb +1 -0
- data/lib/twterm/tab/user_tab.rb +0 -9
- data/lib/twterm/tab_manager.rb +77 -10
- data/lib/twterm/tweetbox.rb +2 -3
- data/lib/twterm/user.rb +1 -0
- data/lib/twterm/version.rb +1 -1
- data/nix/Gemfile +3 -0
- data/nix/Gemfile.lock +77 -0
- data/nix/gemset.nix +325 -0
- data/shell.nix +40 -0
- data/spec/twterm/image/bold_spec.rb +30 -0
- data/spec/twterm/image/color_spec.rb +16 -0
- data/spec/twterm/image/dim_spec.rb +30 -0
- data/twterm.gemspec +13 -13
- metadata +46 -46
- data/.travis.yml +0 -12
- data/lib/twterm/direct_message.rb +0 -60
- data/lib/twterm/direct_message_composer.rb +0 -80
- data/lib/twterm/direct_message_manager.rb +0 -51
- data/lib/twterm/event/direct_message/fetched.rb +0 -10
- data/lib/twterm/event/notification/direct_message.rb +0 -30
- data/lib/twterm/event/screen/resize.rb +0 -13
- data/lib/twterm/event/status/timeline.rb +0 -10
- data/lib/twterm/repository/direct_message_repository.rb +0 -14
- data/lib/twterm/streaming_client.rb +0 -146
- data/lib/twterm/tab/direct_message/conversation.rb +0 -104
- data/lib/twterm/tab/direct_message/conversation_list.rb +0 -100
- data/spec/twterm/event/screen/resize_spec.rb +0 -11
@@ -1,100 +0,0 @@
|
|
1
|
-
require 'twterm/direct_message_composer'
|
2
|
-
require 'twterm/event/direct_message/fetched'
|
3
|
-
require 'twterm/image_builder/user_name_image_builder'
|
4
|
-
require 'twterm/subscriber'
|
5
|
-
require 'twterm/tab/abstract_tab'
|
6
|
-
require 'twterm/tab/loadable'
|
7
|
-
require 'twterm/tab/direct_message/conversation'
|
8
|
-
|
9
|
-
module Twterm
|
10
|
-
module Tab
|
11
|
-
module DirectMessage
|
12
|
-
class ConversationList < AbstractTab
|
13
|
-
include Loadable
|
14
|
-
include Searchable
|
15
|
-
include Subscriber
|
16
|
-
|
17
|
-
def drawable_item_count
|
18
|
-
window.maxy.-(2).div(3)
|
19
|
-
end
|
20
|
-
|
21
|
-
def image
|
22
|
-
return Image.string(initially_loaded? ? 'No results found' : 'Loading...') if items.empty?
|
23
|
-
|
24
|
-
scroller.drawable_items.map.with_index(0) do |conversation, i|
|
25
|
-
cursor = Image.cursor(2, scroller.current_index?(i))
|
26
|
-
|
27
|
-
collocutor = app.user_repository.find(conversation.collocutor_id)
|
28
|
-
|
29
|
-
header = [
|
30
|
-
ImageBuilder::UserNameImageBuilder.new(collocutor).build,
|
31
|
-
Image.string(conversation.updated_at.to_s).brackets,
|
32
|
-
].intersperse(Image.whitespace).reduce(Image.empty, :-)
|
33
|
-
|
34
|
-
body = Image.string(conversation.preview.split_by_width(window.maxx - 4).first)
|
35
|
-
|
36
|
-
cursor - Image.whitespace - (header | body)
|
37
|
-
end
|
38
|
-
.intersperse(Image.blank_line)
|
39
|
-
.reduce(Image.empty, :|)
|
40
|
-
end
|
41
|
-
|
42
|
-
def initialize(app, client)
|
43
|
-
super(app, client)
|
44
|
-
|
45
|
-
subscribe(Event::DirectMessage::Fetched) { initially_loaded! }
|
46
|
-
end
|
47
|
-
|
48
|
-
def ==(other)
|
49
|
-
other.is_a?(self.class)
|
50
|
-
end
|
51
|
-
|
52
|
-
def items
|
53
|
-
client.direct_message_conversations
|
54
|
-
end
|
55
|
-
|
56
|
-
def matches?(conversation, query)
|
57
|
-
collocutor = app.user_repository.find(conversation.collocutor_id)
|
58
|
-
|
59
|
-
[
|
60
|
-
collocutor.name,
|
61
|
-
collocutor.screen_name,
|
62
|
-
conversation.preview
|
63
|
-
].any? { |x| x.downcase.include?(query.downcase) }
|
64
|
-
end
|
65
|
-
|
66
|
-
def respond_to_key(key)
|
67
|
-
return true if scroller.respond_to_key(key)
|
68
|
-
|
69
|
-
k = KeyMapper.instance
|
70
|
-
|
71
|
-
case key
|
72
|
-
when 10
|
73
|
-
open_conversation
|
74
|
-
when k[:status, :compose], k[:status, :reply]
|
75
|
-
conversation = current_item
|
76
|
-
collocutor = app.user_repository.find(conversation.collocutor_id)
|
77
|
-
app.direct_message_composer.compose(collocutor)
|
78
|
-
else
|
79
|
-
return false
|
80
|
-
end
|
81
|
-
|
82
|
-
true
|
83
|
-
end
|
84
|
-
|
85
|
-
def title
|
86
|
-
'Direct Messages'
|
87
|
-
end
|
88
|
-
|
89
|
-
private
|
90
|
-
|
91
|
-
def open_conversation
|
92
|
-
conversation = scroller.current_item
|
93
|
-
|
94
|
-
tab = Tab::DirectMessage::Conversation.new(app, client, conversation)
|
95
|
-
app.tab_manager.add_and_show(tab)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'twterm/event/screen/resize'
|
3
|
-
|
4
|
-
RSpec.describe Twterm::Event::Screen::Resize do
|
5
|
-
describe '#fields' do
|
6
|
-
it 'has fields of Integer * Integer' do
|
7
|
-
expect { described_class.new(5, 10) }.not_to raise_error
|
8
|
-
expect { described_class.new('hello', 'world') }.to raise_error
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|