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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +62 -0
  3. data/.gitignore +1 -0
  4. data/Makefile +21 -0
  5. data/README.md +52 -6
  6. data/bin/twterm +1 -3
  7. data/default.nix +21 -0
  8. data/gemset.nix +4981 -0
  9. data/lib/twterm/app.rb +13 -26
  10. data/lib/twterm/client.rb +1 -6
  11. data/lib/twterm/color_manager.rb +8 -9
  12. data/lib/twterm/image.rb +31 -0
  13. data/lib/twterm/image/attr.rb +42 -0
  14. data/lib/twterm/image/bold.rb +7 -21
  15. data/lib/twterm/image/color.rb +9 -15
  16. data/lib/twterm/image/dim.rb +13 -0
  17. data/lib/twterm/image/underlined.rb +17 -0
  18. data/lib/twterm/image_builder/user_name_image_builder.rb +1 -0
  19. data/lib/twterm/key_mapper.rb +6 -8
  20. data/lib/twterm/key_mapper/abstract_key_mapper.rb +2 -2
  21. data/lib/twterm/list.rb +36 -1
  22. data/lib/twterm/message_window.rb +4 -13
  23. data/lib/twterm/persistable_configuration_proxy.rb +6 -6
  24. data/lib/twterm/preferences.rb +8 -1
  25. data/lib/twterm/rest_client.rb +0 -33
  26. data/lib/twterm/screen.rb +103 -25
  27. data/lib/twterm/search_query_window.rb +5 -13
  28. data/lib/twterm/status.rb +10 -0
  29. data/lib/twterm/tab/abstract_tab.rb +30 -16
  30. data/lib/twterm/tab/new/index.rb +0 -10
  31. data/lib/twterm/tab/new/search.rb +2 -2
  32. data/lib/twterm/tab/new/user.rb +2 -2
  33. data/lib/twterm/tab/preferences/control.rb +77 -0
  34. data/lib/twterm/tab/preferences/index.rb +6 -0
  35. data/lib/twterm/tab/scrollable.rb +1 -1
  36. data/lib/twterm/tab/searchable.rb +6 -4
  37. data/lib/twterm/tab/status_tab.rb +10 -0
  38. data/lib/twterm/tab/statuses/abstract_statuses_tab.rb +11 -6
  39. data/lib/twterm/tab/statuses/home.rb +0 -3
  40. data/lib/twterm/tab/statuses/mentions.rb +1 -0
  41. data/lib/twterm/tab/user_tab.rb +0 -9
  42. data/lib/twterm/tab_manager.rb +77 -10
  43. data/lib/twterm/tweetbox.rb +2 -3
  44. data/lib/twterm/user.rb +1 -0
  45. data/lib/twterm/version.rb +1 -1
  46. data/nix/Gemfile +3 -0
  47. data/nix/Gemfile.lock +77 -0
  48. data/nix/gemset.nix +325 -0
  49. data/shell.nix +40 -0
  50. data/spec/twterm/image/bold_spec.rb +30 -0
  51. data/spec/twterm/image/color_spec.rb +16 -0
  52. data/spec/twterm/image/dim_spec.rb +30 -0
  53. data/twterm.gemspec +13 -13
  54. metadata +46 -46
  55. data/.travis.yml +0 -12
  56. data/lib/twterm/direct_message.rb +0 -60
  57. data/lib/twterm/direct_message_composer.rb +0 -80
  58. data/lib/twterm/direct_message_manager.rb +0 -51
  59. data/lib/twterm/event/direct_message/fetched.rb +0 -10
  60. data/lib/twterm/event/notification/direct_message.rb +0 -30
  61. data/lib/twterm/event/screen/resize.rb +0 -13
  62. data/lib/twterm/event/status/timeline.rb +0 -10
  63. data/lib/twterm/repository/direct_message_repository.rb +0 -14
  64. data/lib/twterm/streaming_client.rb +0 -146
  65. data/lib/twterm/tab/direct_message/conversation.rb +0 -104
  66. data/lib/twterm/tab/direct_message/conversation_list.rb +0 -100
  67. 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