twterm 2.5.1 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|