twterm 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/twterm.rb +2 -1
- data/lib/twterm/app.rb +3 -1
- data/lib/twterm/client.rb +74 -50
- data/lib/twterm/filter_query_window.rb +5 -0
- data/lib/twterm/history/base.rb +5 -24
- data/lib/twterm/history/hashtag.rb +3 -3
- data/lib/twterm/history/savable.rb +37 -0
- data/lib/twterm/history/screen_name.rb +2 -4
- data/lib/twterm/notifier.rb +5 -0
- data/lib/twterm/screen.rb +11 -0
- data/lib/twterm/status.rb +7 -7
- data/lib/twterm/tab/base.rb +5 -0
- data/lib/twterm/tab/statuses/base.rb +1 -1
- data/lib/twterm/tab_manager.rb +13 -0
- data/lib/twterm/user.rb +0 -2
- data/lib/twterm/version.rb +1 -1
- data/twterm.gemspec +2 -2
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 706e593e4edcad70bc6c85a508a87bb3b0b6f627
|
4
|
+
data.tar.gz: 5103de0dc3e61d085910facd228e7901feec04bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b154db08ac62478501dbad44c8330f6abb79a30514ded5432400b36221934a7c89e740b4180471c9334d04c2638bada78fec70a0c4490a570c8db6ad9f99e2de
|
7
|
+
data.tar.gz: e383c7167af2a394cc2ea7f0930c581c6e3afae5c630b7311791e2dcff8438b45f2999fda09e586f71324c3d35d48b567252a3fa9960abb63172d465faea585e
|
data/lib/twterm.rb
CHANGED
@@ -28,6 +28,7 @@ require 'twterm/filter_query_window'
|
|
28
28
|
require 'twterm/filterable_list'
|
29
29
|
require 'twterm/friendship'
|
30
30
|
require 'twterm/history/base'
|
31
|
+
require 'twterm/history/savable'
|
31
32
|
require 'twterm/history/hashtag'
|
32
33
|
require 'twterm/history/screen_name'
|
33
34
|
require 'twterm/list'
|
@@ -67,6 +68,6 @@ require 'twterm/version'
|
|
67
68
|
|
68
69
|
module Twterm
|
69
70
|
class Conf
|
70
|
-
REQUIRE_VERSION = '1.1.
|
71
|
+
REQUIRE_VERSION = '1.1.1'
|
71
72
|
end
|
72
73
|
end
|
data/lib/twterm/app.rb
CHANGED
data/lib/twterm/client.rb
CHANGED
@@ -18,21 +18,6 @@ module Twterm
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def connect_stream
|
22
|
-
stream_client.stop_stream
|
23
|
-
|
24
|
-
@streaming_thread = Thread.new do
|
25
|
-
begin
|
26
|
-
Notifier.instance.show_message 'Trying to connect to Twitter...'
|
27
|
-
stream_client.userstream
|
28
|
-
rescue EventMachine::ConnectionError
|
29
|
-
Notifier.instance.show_error 'Connection failed'
|
30
|
-
sleep 30
|
31
|
-
retry
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
21
|
def destroy_status(status)
|
37
22
|
send_request_without_catch do
|
38
23
|
rest_client.destroy_status(status.id)
|
@@ -143,9 +128,45 @@ module Twterm
|
|
143
128
|
end
|
144
129
|
end
|
145
130
|
|
131
|
+
initialize_user_stream
|
132
|
+
|
146
133
|
@@instances << self
|
147
134
|
end
|
148
135
|
|
136
|
+
def initialize_user_stream
|
137
|
+
return if user_stream_initialized?
|
138
|
+
|
139
|
+
streaming_client.on_friends do
|
140
|
+
user_stream_connected!
|
141
|
+
end
|
142
|
+
|
143
|
+
streaming_client.on_timeline_status do |tweet|
|
144
|
+
status = Status.new(tweet)
|
145
|
+
invoke_callbacks(:timeline_status, status)
|
146
|
+
invoke_callbacks(:mention, status) if status.text.include? "@#{@screen_name}"
|
147
|
+
end
|
148
|
+
|
149
|
+
streaming_client.on_delete do |status_id|
|
150
|
+
timeline.delete_status(status_id)
|
151
|
+
end
|
152
|
+
|
153
|
+
streaming_client.on_event(:favorite) do |event|
|
154
|
+
break if event[:source][:screen_name] == @screen_name
|
155
|
+
|
156
|
+
user = event[:source][:screen_name]
|
157
|
+
text = event[:target_object][:text]
|
158
|
+
message = "@#{user} has favorited your tweet: #{text}"
|
159
|
+
Notifier.instance.show_message(message)
|
160
|
+
end
|
161
|
+
|
162
|
+
streaming_client.on_no_data_received do
|
163
|
+
user_stream_disconnected!
|
164
|
+
user_stream
|
165
|
+
end
|
166
|
+
|
167
|
+
user_stream_initialized!
|
168
|
+
end
|
169
|
+
|
149
170
|
def list(list_id)
|
150
171
|
send_request do
|
151
172
|
rest_client.list(list_id)
|
@@ -318,41 +339,8 @@ module Twterm
|
|
318
339
|
end
|
319
340
|
end
|
320
341
|
|
321
|
-
def
|
322
|
-
|
323
|
-
Notifier.instance.show_message 'Connection established' unless @stream_connected
|
324
|
-
@stream_connected = true
|
325
|
-
end
|
326
|
-
|
327
|
-
stream_client.on_timeline_status do |tweet|
|
328
|
-
status = Status.new(tweet)
|
329
|
-
invoke_callbacks(:timeline_status, status)
|
330
|
-
invoke_callbacks(:mention, status) if status.text.include? "@#{@screen_name}"
|
331
|
-
end
|
332
|
-
|
333
|
-
stream_client.on_delete do |status_id|
|
334
|
-
timeline.delete_status(status_id)
|
335
|
-
end
|
336
|
-
|
337
|
-
stream_client.on_event(:favorite) do |event|
|
338
|
-
break if event[:source][:screen_name] == @screen_name
|
339
|
-
|
340
|
-
user = event[:source][:screen_name]
|
341
|
-
text = event[:target_object][:text]
|
342
|
-
message = "@#{user} has favorited your tweet: #{text}"
|
343
|
-
Notifier.instance.show_message(message)
|
344
|
-
end
|
345
|
-
|
346
|
-
stream_client.on_no_data_received do
|
347
|
-
@stream_connected = false
|
348
|
-
connect_stream
|
349
|
-
end
|
350
|
-
|
351
|
-
connect_stream
|
352
|
-
end
|
353
|
-
|
354
|
-
def stream_client
|
355
|
-
@stream_client ||= TweetStream::Client.new(
|
342
|
+
def streaming_client
|
343
|
+
@streaming_client ||= TweetStream::Client.new(
|
356
344
|
consumer_key: CONSUMER_KEY,
|
357
345
|
consumer_secret: CONSUMER_SECRET,
|
358
346
|
oauth_token: @access_token,
|
@@ -402,6 +390,42 @@ module Twterm
|
|
402
390
|
end
|
403
391
|
end
|
404
392
|
|
393
|
+
def user_stream
|
394
|
+
streaming_client.stop_stream
|
395
|
+
|
396
|
+
@streaming_thread = Thread.new do
|
397
|
+
begin
|
398
|
+
Notifier.instance.show_message 'Trying to connect to Twitter...'
|
399
|
+
streaming_client.userstream
|
400
|
+
rescue EventMachine::ConnectionError
|
401
|
+
Notifier.instance.show_error 'Connection failed'
|
402
|
+
sleep 30
|
403
|
+
retry
|
404
|
+
end
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
def user_stream_connected?
|
409
|
+
@user_stream_connected || false
|
410
|
+
end
|
411
|
+
|
412
|
+
def user_stream_connected!
|
413
|
+
Notifier.instance.show_message 'Connection established' unless user_stream_connected?
|
414
|
+
@user_stream_connected = true
|
415
|
+
end
|
416
|
+
|
417
|
+
def user_stream_disconnected!
|
418
|
+
@user_stream_connected = false
|
419
|
+
end
|
420
|
+
|
421
|
+
def user_stream_initialized?
|
422
|
+
@user_stream_initialized || false
|
423
|
+
end
|
424
|
+
|
425
|
+
def user_stream_initialized!
|
426
|
+
@user_stream_initialized = true
|
427
|
+
end
|
428
|
+
|
405
429
|
def user_timeline(user_id)
|
406
430
|
send_request do
|
407
431
|
rest_client.user_timeline(user_id, count: 200)
|
data/lib/twterm/history/base.rb
CHANGED
@@ -1,39 +1,20 @@
|
|
1
1
|
module Twterm
|
2
2
|
module History
|
3
3
|
module Base
|
4
|
-
MAX_HISTORY_SIZE = 500
|
5
|
-
|
6
4
|
attr_reader :history
|
7
5
|
|
8
6
|
def initialize
|
9
|
-
|
10
|
-
@history = []
|
11
|
-
return
|
12
|
-
end
|
13
|
-
|
14
|
-
begin
|
15
|
-
@history = YAML.load(File.read(history_file)) || []
|
16
|
-
rescue
|
17
|
-
@history = []
|
18
|
-
end
|
7
|
+
@history = []
|
19
8
|
end
|
20
9
|
|
21
|
-
def add(
|
22
|
-
@history
|
23
|
-
@history = @history.uniq.take(MAX_HISTORY_SIZE)
|
24
|
-
save
|
10
|
+
def add(item)
|
11
|
+
@history << item
|
25
12
|
end
|
26
13
|
|
27
14
|
private
|
28
15
|
|
29
|
-
def
|
30
|
-
|
31
|
-
f.write @history.to_yaml
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def history_file
|
36
|
-
fail NotImplementedError, 'history_file method must be implemented'
|
16
|
+
def file
|
17
|
+
fail NotImplementedError, 'file method must be implemented'
|
37
18
|
end
|
38
19
|
end
|
39
20
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Twterm
|
2
|
+
module History
|
3
|
+
module Savable
|
4
|
+
include Base
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
unless File.exist?(file)
|
8
|
+
@history = []
|
9
|
+
return
|
10
|
+
end
|
11
|
+
|
12
|
+
begin
|
13
|
+
@history = YAML.load(File.read(file)) || []
|
14
|
+
rescue
|
15
|
+
@history = []
|
16
|
+
end
|
17
|
+
|
18
|
+
Scheduler.new(300) { save }
|
19
|
+
end
|
20
|
+
|
21
|
+
def add(item)
|
22
|
+
@history << item unless @history.include?(item)
|
23
|
+
@history = history.take(1000)
|
24
|
+
end
|
25
|
+
|
26
|
+
def save
|
27
|
+
File.open(file, 'w', 0600) { |f| f.write(history.to_yaml) }
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def file
|
33
|
+
fail NotImplementedError, 'file method must be implemented'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/twterm/notifier.rb
CHANGED
data/lib/twterm/screen.rb
CHANGED
@@ -19,6 +19,17 @@ module Twterm
|
|
19
19
|
Notifier.instance.show
|
20
20
|
end
|
21
21
|
|
22
|
+
def resize
|
23
|
+
resizeterm(`tput lines`.to_i, `tput cols`.to_i)
|
24
|
+
@screen.resize(`tput lines`.to_i, `tput cols`.to_i)
|
25
|
+
|
26
|
+
TabManager.instance.resize
|
27
|
+
TabManager.instance.each_tab(&:resize)
|
28
|
+
Notifier.instance.resize
|
29
|
+
FilterQueryWindow.instance.resize
|
30
|
+
refresh
|
31
|
+
end
|
32
|
+
|
22
33
|
def respond_to_key(key)
|
23
34
|
case key
|
24
35
|
when ?n
|
data/lib/twterm/status.rb
CHANGED
@@ -52,13 +52,13 @@ module Twterm
|
|
52
52
|
unless tweet.retweeted_status.is_a? Twitter::NullObject
|
53
53
|
@retweeted_by_user_id = tweet.user.id
|
54
54
|
User.new(tweet.user)
|
55
|
-
retweeted_at =
|
55
|
+
retweeted_at = tweet.created_at.dup.localtime
|
56
56
|
tweet = tweet.retweeted_status
|
57
57
|
end
|
58
58
|
|
59
59
|
@id = tweet.id
|
60
60
|
@text = CGI.unescapeHTML(tweet.full_text.dup)
|
61
|
-
@created_at =
|
61
|
+
@created_at = tweet.created_at.dup.localtime
|
62
62
|
@appeared_at = retweeted_at || @created_at
|
63
63
|
@retweet_count = tweet.retweet_count
|
64
64
|
@favorite_count = tweet.favorite_count
|
@@ -100,7 +100,7 @@ module Twterm
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def split(width)
|
103
|
-
@splitted_text[
|
103
|
+
@splitted_text[width] ||= @text.split_by_width(width)
|
104
104
|
end
|
105
105
|
|
106
106
|
def touch!
|
@@ -138,6 +138,10 @@ module Twterm
|
|
138
138
|
@@instances = status_ids.zip(statuses).to_h
|
139
139
|
end
|
140
140
|
|
141
|
+
def self.delete(id)
|
142
|
+
@@instances.delete(id)
|
143
|
+
end
|
144
|
+
|
141
145
|
def self.find(id)
|
142
146
|
@@instances[id]
|
143
147
|
end
|
@@ -155,9 +159,5 @@ module Twterm
|
|
155
159
|
instance = find(tweet.id)
|
156
160
|
instance.nil? ? super : instance.update!(tweet)
|
157
161
|
end
|
158
|
-
|
159
|
-
def self.parse_time(time)
|
160
|
-
(time.is_a?(String) ? Time.parse(time) : time.dup).localtime
|
161
|
-
end
|
162
162
|
end
|
163
163
|
end
|
data/lib/twterm/tab/base.rb
CHANGED
data/lib/twterm/tab_manager.rb
CHANGED
@@ -116,8 +116,21 @@ module Twterm
|
|
116
116
|
@window.refresh
|
117
117
|
end
|
118
118
|
|
119
|
+
def resize
|
120
|
+
@window.resize(3, stdscr.maxx)
|
121
|
+
@window.move(0, 0)
|
122
|
+
end
|
123
|
+
|
119
124
|
def respond_to_key(key)
|
120
125
|
case key
|
126
|
+
when ?1..?9
|
127
|
+
@index = key.to_i - 1 if @tabs.count >= key.to_i
|
128
|
+
current_tab.refresh
|
129
|
+
refresh_window
|
130
|
+
when ?0
|
131
|
+
@index = @tabs.count - 1
|
132
|
+
current_tab.refresh
|
133
|
+
refresh_window
|
121
134
|
when ?h, 2, Key::LEFT
|
122
135
|
show_previous
|
123
136
|
when ?l, 6, Key::RIGHT
|
data/lib/twterm/user.rb
CHANGED
data/lib/twterm/version.rb
CHANGED
data/twterm.gemspec
CHANGED
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency 'curses', '>= 1.0.1'
|
22
22
|
spec.add_dependency 'launchy', '>= 2.4.3'
|
23
23
|
spec.add_dependency 'oauth', '>= 0.4.7'
|
24
|
-
spec.add_dependency 'tweetstream', '
|
25
|
-
spec.add_dependency 'twitter', '
|
24
|
+
spec.add_dependency 'tweetstream', '~> 2.6'
|
25
|
+
spec.add_dependency 'twitter', '~> 5.13'
|
26
26
|
spec.add_dependency 'twitter-text', '>= 1.11.0'
|
27
27
|
|
28
28
|
spec.add_development_dependency 'bundler', '~> 1.8'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twterm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryota Kameoka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses
|
@@ -56,30 +56,30 @@ dependencies:
|
|
56
56
|
name: tweetstream
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.6
|
61
|
+
version: '2.6'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 2.6
|
68
|
+
version: '2.6'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: twitter
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 5.
|
75
|
+
version: '5.13'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 5.
|
82
|
+
version: '5.13'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: twitter-text
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -167,6 +167,7 @@ files:
|
|
167
167
|
- lib/twterm/friendship.rb
|
168
168
|
- lib/twterm/history/base.rb
|
169
169
|
- lib/twterm/history/hashtag.rb
|
170
|
+
- lib/twterm/history/savable.rb
|
170
171
|
- lib/twterm/history/screen_name.rb
|
171
172
|
- lib/twterm/list.rb
|
172
173
|
- lib/twterm/notification/base.rb
|