twterm 1.0.11 → 1.0.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2572d3668fe0048eb79fa55c0b881a39fe130c7a
4
- data.tar.gz: 8fc15104af2e69ee71861a1e903a056f3dda1f57
3
+ metadata.gz: 01d68a787d82a916e9db6edf8801d3b774d70b62
4
+ data.tar.gz: 769b6645edd66d51ff21ae54d58a66ae8412e1dd
5
5
  SHA512:
6
- metadata.gz: c7f0770b2c858fee53746e64ee194218b565ff16d88d06fd336b5c3ad304716df9dc57e5a8fbd1f8eba5b377ba9ada1d97aaf580f9d68355090924de4a595451
7
- data.tar.gz: 7ed7a151ce86516110461ea3426e742f271713d6b87038d5c331c78d4f06ed8995ed39b98d96257a2aab5d1eaff99e54ff3a106ff76699002df426ac8594519a
6
+ metadata.gz: 668fd496ea6667035ba1a839ac308a6d92d3e76daf05b67ad5b3f685e25d7fcc52642a8a66588bc2ca8c310e9e597e82f37e81784bf492005019ebaed2435c49
7
+ data.tar.gz: e17fbe8226c4aa0c351d6d5d11a5d4619d54a024383f217f7e46fac255b1aebc0f90a5f5854a06690e4ec1887f3cbd63c650533bdad28714ebca583781f07aaf
data/lib/twterm.rb CHANGED
@@ -23,6 +23,8 @@ require 'twterm/extensions/curses/window'
23
23
  require 'twterm/extensions/enumerator/lazy'
24
24
  require 'twterm/extensions/integer'
25
25
  require 'twterm/extensions/string'
26
+ require 'twterm/filter_query_window'
27
+ require 'twterm/filterable_list'
26
28
  require 'twterm/history/base'
27
29
  require 'twterm/history/hashtag'
28
30
  require 'twterm/history/screen_name'
@@ -58,6 +60,6 @@ require 'twterm/version'
58
60
 
59
61
  module Twterm
60
62
  class Conf
61
- REQUIRE_VERSION = '1.0.11'
63
+ REQUIRE_VERSION = '1.0.12'
62
64
  end
63
65
  end
data/lib/twterm/app.rb CHANGED
@@ -10,6 +10,7 @@ module Twterm
10
10
  Auth.authenticate_user(config) if config[:screen_name].nil?
11
11
 
12
12
  Screen.instance
13
+ FilterQueryWindow.instance
13
14
 
14
15
  timeline = Tab::TimelineTab.new(client)
15
16
  TabManager.instance.add_and_show(timeline)
@@ -3,6 +3,10 @@ class String
3
3
  each_char.map { |c| c.bytesize == 1 ? 1 : 2 }.reduce(0, &:+)
4
4
  end
5
5
 
6
+ def matches?(query)
7
+ downcase.include?(query.downcase)
8
+ end
9
+
6
10
  def split_by_width(width)
7
11
  cnt = 0
8
12
  str = ''
@@ -0,0 +1,32 @@
1
+ module Twterm
2
+ class FilterQueryWindow
3
+ include Curses
4
+ include Singleton
5
+
6
+ def initialize
7
+ @window = stdscr.subwin(1, stdscr.maxx, stdscr.maxy - 1, 0)
8
+ end
9
+
10
+ def input
11
+ clear
12
+
13
+ echo
14
+ stdscr.setpos(stdscr.maxy - 1, 0)
15
+ stdscr.addch '/'
16
+
17
+ query = getstr.chomp
18
+ noecho
19
+
20
+ query || ''
21
+ end
22
+
23
+ def clear
24
+ stdscr.setpos(stdscr.maxy - 1, 0)
25
+ stdscr.addstr(' ' * window.maxx)
26
+ end
27
+
28
+ private
29
+
30
+ attr_reader :window
31
+ end
32
+ end
@@ -0,0 +1,35 @@
1
+ module Twterm
2
+ module FilterableList
3
+ extend Forwardable
4
+
5
+ def filter
6
+ @filter_query = FilterQueryWindow.instance.input
7
+
8
+ if filter_query.empty?
9
+ reset_filter
10
+ elsif items.count == 0
11
+ query = filter_query
12
+ reset_filter
13
+ Notifier.instance.show_error "No matches found: \"#{query}\""
14
+ else
15
+ Notifier.instance.show_message "#{total_item_count} statuses found: \"#{filter_query}\""
16
+ scroller.move_to_top
17
+ end
18
+
19
+ refresh
20
+ end
21
+
22
+ def filter_query
23
+ @filter_query ||= ''
24
+ end
25
+
26
+ def items
27
+ fail NotImplementedError, 'items method must be implemented'
28
+ end
29
+
30
+ def reset_filter
31
+ FilterQueryWindow.instance.clear
32
+ @filter_query = ''
33
+ end
34
+ end
35
+ end
@@ -11,7 +11,11 @@ module Twterm
11
11
  return
12
12
  end
13
13
 
14
- @history = YAML.load(File.read(history_file)) || []
14
+ begin
15
+ @history = YAML.load(File.read(history_file)) || []
16
+ rescue
17
+ @history = []
18
+ end
15
19
  end
16
20
 
17
21
  def add(hashtag)
data/lib/twterm/list.rb CHANGED
@@ -16,6 +16,10 @@ module Twterm
16
16
  self
17
17
  end
18
18
 
19
+ def matches?(query)
20
+ [full_name, description].any? { |x| x.downcase.include?(query.downcase) }
21
+ end
22
+
19
23
  def update!(list)
20
24
  @name = list.name
21
25
  @slug = list.slug
data/lib/twterm/status.rb CHANGED
@@ -29,7 +29,7 @@ module Twterm
29
29
  @favorited = true
30
30
  end
31
31
 
32
- def grepped_with?(query)
32
+ def matches?(query)
33
33
  [text, user.screen_name, user.name]
34
34
  .any? { |x| x.downcase.include?(query.downcase) }
35
35
  end
@@ -19,14 +19,12 @@ module Twterm
19
19
  end
20
20
 
21
21
  def refresh
22
- return unless refreshable?
23
-
24
22
  Thread.new do
25
23
  refresh_mutex.synchronize do
26
24
  window.clear
27
25
  update
28
26
  window.refresh
29
- end
27
+ end if refreshable?
30
28
  end
31
29
  end
32
30
 
@@ -3,6 +3,7 @@ module Twterm
3
3
  module New
4
4
  class List
5
5
  include Base
6
+ include FilterableList
6
7
  include Scrollable
7
8
 
8
9
  @@lists = nil
@@ -12,7 +13,7 @@ module Twterm
12
13
  end
13
14
 
14
15
  def drawable_item_count
15
- (window.maxy - 2).div(3)
16
+ (window.maxy - 6).div(3)
16
17
  end
17
18
 
18
19
  def initialize
@@ -23,11 +24,13 @@ module Twterm
23
24
  end
24
25
 
25
26
  def items
26
- @@lists
27
+ (@@lists || []).select { |l| l.matches?(filter_query) }
27
28
  end
28
29
 
29
30
  def respond_to_key(key)
30
31
  case key
32
+ when ?d, 4
33
+ 10.times { scroller.move_down }
31
34
  when ?g
32
35
  scroller.move_to_top
33
36
  when ?G
@@ -40,6 +43,12 @@ module Twterm
40
43
  TabManager.instance.switch(list_tab)
41
44
  when ?k, 16, Curses::Key::UP
42
45
  scroller.move_up
46
+ when ?q
47
+ reset_filter
48
+ when ?u, 21
49
+ 10.times { scroller.move_up }
50
+ when ?/
51
+ filter
43
52
  else
44
53
  return false
45
54
  end
@@ -47,13 +56,13 @@ module Twterm
47
56
  end
48
57
 
49
58
  def total_item_count
50
- @@lists.nil? ? 0 : @@lists.count
59
+ items.count
51
60
  end
52
61
 
53
62
  private
54
63
 
55
64
  def current_list
56
- @@lists.nil? ? nil : @@lists[scroller.index]
65
+ @@lists.nil? ? nil : items[scroller.index]
57
66
  end
58
67
 
59
68
  def show_lists
@@ -4,6 +4,7 @@ module Twterm
4
4
  class Search
5
5
  include Base
6
6
  include Readline
7
+ include FilterableList
7
8
  include Scrollable
8
9
 
9
10
  @@queries = []
@@ -13,7 +14,7 @@ module Twterm
13
14
  end
14
15
 
15
16
  def drawable_item_count
16
- (window.maxy - 2).div(3)
17
+ (window.maxy - 6).div(3)
17
18
  end
18
19
 
19
20
  def initialize
@@ -53,7 +54,11 @@ module Twterm
53
54
  end
54
55
 
55
56
  def items
56
- ['<Input search query>'] + @@queries
57
+ if filter_query.empty?
58
+ ['<Input search query>'] + @@queries
59
+ else
60
+ @@queries.select { |q| q.matches?(filter_query) }
61
+ end
57
62
  end
58
63
 
59
64
  def respond_to_key(key)
@@ -72,6 +77,10 @@ module Twterm
72
77
  scroller.move_up
73
78
  when ?u, 21
74
79
  10.times { scroller.move_up }
80
+ when ?q
81
+ reset_filter
82
+ when ?/
83
+ filter
75
84
  else
76
85
  return false
77
86
  end
@@ -80,7 +89,7 @@ module Twterm
80
89
  end
81
90
 
82
91
  def total_item_count
83
- @@queries.count + 1
92
+ items.count
84
93
  end
85
94
 
86
95
  private
@@ -90,10 +99,10 @@ module Twterm
90
99
  def open_search_tab_with_current_query
91
100
  index = scroller.index
92
101
 
93
- if index == 0
102
+ if filter_query.empty? && index.zero?
94
103
  invoke_input
95
104
  else
96
- query = @@queries[index - 1]
105
+ query = items[index]
97
106
  tab = Tab::SearchTab.new(query)
98
107
  TabManager.instance.switch(tab)
99
108
  end
@@ -2,6 +2,7 @@ module Twterm
2
2
  module Tab
3
3
  module StatusesTab
4
4
  include Base
5
+ include FilterableList
5
6
  include Scrollable
6
7
 
7
8
  def append(status)
@@ -50,27 +51,6 @@ module Twterm
50
51
  fail NotImplementedError, 'fetch method must be implemented'
51
52
  end
52
53
 
53
- def grep
54
- reset_grep
55
-
56
- Curses.echo
57
- Curses.setpos(stdscr.maxy - 1, 0)
58
- Curses.stdscr.addch '/'
59
- @grep_query = Curses.getstr.chomp
60
- Curses.noecho
61
-
62
- if grep_query.empty?
63
- reset_grep
64
- elsif total_item_count == 0
65
- Notifier.instance.show_error "No matches found: \"#{grep_query}\""
66
- reset_grep
67
- else
68
- Notifier.instance.show_message "#{total_item_count} statuses found: \"#{grep_query}\""
69
- scroller.move_to_top
70
- refresh
71
- end
72
- end
73
-
74
54
  def initialize
75
55
  super
76
56
 
@@ -106,15 +86,6 @@ module Twterm
106
86
  Tweetbox.instance.compose(highlighted_status)
107
87
  end
108
88
 
109
- def reset_grep
110
- # TODO: replace with more general way (issue #170)
111
- stdscr.clear
112
- Screen.instance.refresh
113
-
114
- @grep_query = ''
115
- refresh
116
- end
117
-
118
89
  def respond_to_key(key)
119
90
  case key
120
91
  when ?c
@@ -146,9 +117,9 @@ module Twterm
146
117
  when ?U
147
118
  show_user
148
119
  when ?/
149
- grep
120
+ filter
150
121
  when ?q
151
- reset_grep
122
+ reset_filter
152
123
  else
153
124
  return false
154
125
  end
@@ -179,10 +150,10 @@ module Twterm
179
150
  statuses = @status_ids.map { |id| Status.find(id) }.reject(&:nil?)
180
151
  @status_ids = statuses.map(&:id)
181
152
 
182
- if grep_query.empty?
153
+ if filter_query.empty?
183
154
  statuses
184
155
  else
185
- statuses.select { |s| s.grepped_with?(grep_query) }
156
+ statuses.select { |s| s.matches?(filter_query) }
186
157
  end
187
158
  end
188
159
 
@@ -191,7 +162,7 @@ module Twterm
191
162
  end
192
163
 
193
164
  def total_item_count
194
- grep_query.empty? ? @status_ids.count : statuses.count
165
+ filter_query.empty? ? @status_ids.count : statuses.count
195
166
  end
196
167
 
197
168
  def update
@@ -260,15 +231,13 @@ module Twterm
260
231
  end
261
232
 
262
233
  line += 2
234
+
235
+ UserWindow.instance.update(highlighted_status.user)
263
236
  end
264
237
  end
265
238
 
266
239
  private
267
240
 
268
- def grep_query
269
- @grep_query || ''
270
- end
271
-
272
241
  def highlighted_status
273
242
  statuses[scroller.count - scroller.index - 1]
274
243
  end
@@ -1,3 +1,3 @@
1
1
  module Twterm
2
- VERSION = '1.0.11'
2
+ VERSION = '1.0.12'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twterm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 1.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryota Kameoka
@@ -162,6 +162,8 @@ files:
162
162
  - lib/twterm/extensions/enumerator/lazy.rb
163
163
  - lib/twterm/extensions/integer.rb
164
164
  - lib/twterm/extensions/string.rb
165
+ - lib/twterm/filter_query_window.rb
166
+ - lib/twterm/filterable_list.rb
165
167
  - lib/twterm/history/base.rb
166
168
  - lib/twterm/history/hashtag.rb
167
169
  - lib/twterm/history/screen_name.rb